<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/atom.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:fh="http://purl.org/syndication/history/1.0">
  <title>Archive</title>
  <id>https://waylonwalker.com/archive/atom.xml</id>
  <updated>2026-04-13T16:18:15Z</updated>
  <subtitle>All published posts</subtitle>
  <link href="https://waylonwalker.com/" rel="alternate" type="text/html"></link>
  <link href="https://waylonwalker.com/archive/atom.xml" rel="self" type="application/atom+xml"></link>
  <link href="https://waylonwalker.com/atom.xml" rel="current" type="application/atom+xml"></link>
  <author>
    <name>Waylon Walker</name>
  </author>
  <generator uri="https://github.com/WaylonWalker/markata-go">markata-go</generator>
  <fh:complete></fh:complete>
  <entry>
    <title>Anthropic Mythos</title>
    <id>https://waylonwalker.com/anthropic-mythos/</id>
    <updated>2026-04-13T16:18:15Z</updated>
    <published>2026-04-13T16:18:15Z</published>
    <link href="https://waylonwalker.com/anthropic-mythos/" rel="alternate" type="text/html"></link>
    <summary type="text">An ai model created by Anthropic was announced as a closed preview on April 7, 2026 for critical security research and evaluation with its close partners...</summary>
    <content type="html">&lt;p&gt;An ai model created by Anthropic was announced as a closed preview on April 7,&#xA;2026 for critical security research and evaluation with its close partners with&#xA;critical software such as operating systems and browsers.  Anthropic claims&#xA;that mythos is able to reason through so much more context that any model ever&#xA;before.  This enables it to find bugs that are 25 years old in the BSD,&#xA;considered one of the most secure operating systems we have.  Once it finds&#xA;these zero day bugs never discovered before its able to use them together in&#xA;malicious ways never expected.  In ways the world is not ready for.  At the&#xA;time of writing these are claims without proof.  It remains scary to know the&#xA;potential this has and that there is only a few companies with this potential&#xA;that will gatekeep who gets access.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Ping 49</title>
    <id>https://waylonwalker.com/ping-49/</id>
    <updated>2026-04-13T16:12:04Z</updated>
    <published>2026-04-13T16:12:04Z</published>
    <link href="https://waylonwalker.com/ping-49/" rel="alternate" type="text/html"></link>
    <summary type="text">What&#39;s going to happen to all of our software when Anthropic Mythos finds all of the 0 day vulnerabilities? Will everything depending on the bugs break? Will...</summary>
    <content type="html">&lt;p&gt;What’s going to happen to all of our software when &lt;a href=&#34;/anthropic-mythos/&#34; class=&#34;glossary-term&#34; title=&#34;An ai model created by Anthropic was announced as a closed preview on April 7, 2026 for critical security research and evaluation with its close partners...&#34;&gt;Anthropic Mythos&lt;/a&gt; finds all&#xA;of the 0 day vulnerabilities?  Will everything depending on the bugs break?&#xA;Will it be possible to fix them cleanly?  Will we all get pwnd when the bad&#xA;actors get access to them before everything is patched?  Will LTS Operating&#xA;Systems Die?&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Ping 48</title>
    <id>https://waylonwalker.com/ping-48/</id>
    <updated>2026-04-08T16:12:32Z</updated>
    <published>2026-04-08T16:12:32Z</published>
    <link href="https://waylonwalker.com/ping-48/" rel="alternate" type="text/html"></link>
    <content type="text">&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Wonka Letters</title>
    <id>https://waylonwalker.com/shots/wonka-letters/</id>
    <updated>2026-04-04T10:16:30Z</updated>
    <published>2026-04-04T10:16:30Z</published>
    <link href="https://waylonwalker.com/shots/wonka-letters/" rel="alternate" type="text/html"></link>
    <summary type="text">Wonka letters all cut out ready to get some stiffeners and go off for paint.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/e7cfd915-1484-4a29-beb1-16063940bfd6.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/e7cfd915-1484-4a29-beb1-16063940bfd6.webp&#34; alt=&#34;Wonka Letters&#34;/ data-glightbox=&#34;description: Wonka Letters&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Wonka letters all cut out ready to get some stiffeners and go off for paint.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>What is this job anymore</title>
    <id>https://waylonwalker.com/ping-46/</id>
    <updated>2026-04-03T20:44:55Z</updated>
    <published>2026-04-03T20:44:55Z</published>
    <link href="https://waylonwalker.com/ping-46/" rel="alternate" type="text/html"></link>
    <summary type="text">The job of writing code is dying, models are getting better, the average person will have their average features implemented in average ways with no effort...</summary>
    <content type="html">&lt;p&gt;The job of writing code is dying, models are getting better, the average person&#xA;will have their average features implemented in average ways with no effort by&#xA;agents, the writing is on the wall.  We are still trying to review most of the&#xA;critical code, this is slowing us down, is it really stopping any bugs or&#xA;giving us any more familiarity with the product, marginally.&lt;/p&gt;&#xA;&lt;p&gt;The time is now to grease up your UAT, testing, deployment pipelines. Dont let&#xA;agents delete entire regions.  Review your backup and restore strategy, you do&#xA;have a DR plan right?&lt;/p&gt;&#xA;&lt;p&gt;Things are changing fast, the best of us are still better than the clankers.&#xA;Most of us have more context than the clankers.  Most of us have more intuition&#xA;of what and where to implement fixes.  Context windows and memory will be&#xA;solved problems.  Your DR plan, UAT, testinng and QA environments will not come&#xA;for free, you need to make them, and deeply integrate them into your processes.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Hair Whittling Sharp</title>
    <id>https://waylonwalker.com/shots/hair-whittling-sharp/</id>
    <updated>2026-04-03T20:43:11Z</updated>
    <published>2026-04-03T20:43:11Z</published>
    <link href="https://waylonwalker.com/shots/hair-whittling-sharp/" rel="alternate" type="text/html"></link>
    <summary type="text">Hair whittling sharp, Do I get my redneck nerd card yet?</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/29b8ae31-7c9b-45a7-b950-72bd2f3f6011.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/29b8ae31-7c9b-45a7-b950-72bd2f3f6011.webp&#34; alt=&#34;Hair Whittling Sharp&#34;/ data-glightbox=&#34;description: Hair Whittling Sharp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Hair whittling sharp, Do I get my redneck nerd card yet?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Llama In Pi Thinks Its Claude</title>
    <id>https://waylonwalker.com/shots/llama-in-pi-thinks-its-claude/</id>
    <updated>2026-04-03T08:37:18Z</updated>
    <published>2026-04-03T08:37:18Z</published>
    <link href="https://waylonwalker.com/shots/llama-in-pi-thinks-its-claude/" rel="alternate" type="text/html"></link>
    <summary type="text">I just launched ollama picked pi as it asked what harness I wanted to run, and it responded telling me it was claude.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/00d19487-c8c2-490c-84cb-c64e33149be2.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/00d19487-c8c2-490c-84cb-c64e33149be2.webp&#34; alt=&#34;llama in pi thinks its claude&#34;/ data-glightbox=&#34;description: llama in pi thinks its claude&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I just launched ollama picked pi as it asked what harness I wanted to run, and it responded telling me it was claude.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Ping 47</title>
    <id>https://waylonwalker.com/ping-47/</id>
    <updated>2026-04-02T21:33:20Z</updated>
    <published>2026-04-02T21:33:20Z</published>
    <link href="https://waylonwalker.com/ping-47/" rel="alternate" type="text/html"></link>
    <content type="text">&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Ty 0.0.26</title>
    <id>https://waylonwalker.com/shots/ty-0.0.26/</id>
    <updated>2026-04-02T21:18:12Z</updated>
    <published>2026-04-02T21:18:12Z</published>
    <link href="https://waylonwalker.com/shots/ty-0.0.26/" rel="alternate" type="text/html"></link>
    <summary type="text">ty 0.0.26 was released on 3/26/26, nice work planning.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/26f075a3-4941-4ac8-877e-7dda777579db.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/26f075a3-4941-4ac8-877e-7dda777579db.webp&#34; alt=&#34;ty 0.0.26&#34;/ data-glightbox=&#34;description: ty 0.0.26&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;ty 0.0.26 was released on 3/26/26, nice work planning.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Smassh Monkeytype Clone In The Terminal</title>
    <id>https://waylonwalker.com/shots/smassh-monkeytype-clone-in-the-terminal/</id>
    <updated>2026-04-02T21:17:09Z</updated>
    <published>2026-04-02T21:17:09Z</published>
    <link href="https://waylonwalker.com/shots/smassh-monkeytype-clone-in-the-terminal/" rel="alternate" type="text/html"></link>
    <summary type="text">What a banger of a tui, fantastic job cloning monkeytype. Looks so good. The toast messages are a tell tale built with textual.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/35102587-dffe-48ec-920a-a037917e7776.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/35102587-dffe-48ec-920a-a037917e7776.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/35102587-dffe-48ec-920a-a037917e7776.mp4&#34; type=&#34;video/mp4&#34;&gt;smassh monkeytype clone in the terminal&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What a banger of a tui, fantastic job cloning monkeytype.  Looks so good.  The toast messages are a tell tale built with textual.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Sparklines On The Feeds Header</title>
    <id>https://waylonwalker.com/shots/sparklines-on-the-feeds-header/</id>
    <updated>2026-04-02T21:15:21Z</updated>
    <published>2026-04-02T21:15:21Z</published>
    <link href="https://waylonwalker.com/shots/sparklines-on-the-feeds-header/" rel="alternate" type="text/html"></link>
    <summary type="text">View of the new markata-go feeds header with the banger of a sparkline.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/7d35b9ae-3e63-42f1-90c6-4cc0db518212.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/7d35b9ae-3e63-42f1-90c6-4cc0db518212.webp&#34; alt=&#34;sparklines on the feeds header&#34;/ data-glightbox=&#34;description: sparklines on the feeds header&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;View of the new markata-go feeds header with the banger of a sparkline.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Getting Excited For This New Feeds Page</title>
    <id>https://waylonwalker.com/shots/getting-excited-for-this-new-feeds-page/</id>
    <updated>2026-04-02T21:14:01Z</updated>
    <published>2026-04-02T21:14:01Z</published>
    <link href="https://waylonwalker.com/shots/getting-excited-for-this-new-feeds-page/" rel="alternate" type="text/html"></link>
    <summary type="text">This sparklines on this new feeds page are chefs kiss.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/b1579888-4b8d-4adc-9404-a0dfd97a7acf.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/b1579888-4b8d-4adc-9404-a0dfd97a7acf.webp&#34; alt=&#34;Getting excited for this new feeds page&#34;/ data-glightbox=&#34;description: Getting excited for this new feeds page&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This sparklines on this new feeds page are chefs kiss.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>The year of the supply chain attacks</title>
    <id>https://waylonwalker.com/ping-45/</id>
    <updated>2026-04-02T20:26:33Z</updated>
    <published>2026-04-02T20:26:33Z</published>
    <link href="https://waylonwalker.com/ping-45/" rel="alternate" type="text/html"></link>
    <summary type="text">I think I&#39;m starting to understand my role as a platform developer in 2026.</summary>
    <content type="html">&lt;p&gt;I think I’m starting to understand my role as a platform developer in 2026.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;least priveleged access&lt;/li&gt;&#xA;&lt;li&gt;default deny + explicit allow&lt;/li&gt;&#xA;&lt;li&gt;understand your blast radius&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;GREASED&lt;/strong&gt; creds rotate process&lt;/li&gt;&#xA;&lt;li&gt;PIN EVERYTHING&lt;/li&gt;&#xA;&lt;li&gt;keep packages up to date&lt;/li&gt;&#xA;&lt;li&gt;but not too up to date, use dependency cooldowns&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>The final nail for Windows?</title>
    <id>https://waylonwalker.com/ping-44/</id>
    <updated>2026-04-01T20:23:53Z</updated>
    <published>2026-04-01T20:23:53Z</published>
    <link href="https://waylonwalker.com/ping-44/" rel="alternate" type="text/html"></link>
    <summary type="text">Easy anticheat for linux is out.</summary>
    <content type="html">&lt;p&gt;Easy anticheat for linux is out.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition tip&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Tip&lt;/p&gt;&#xA;&lt;p&gt;look at the date&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;If this were real what would you play first?  For me it’s &lt;code&gt;skate .&lt;/code&gt; is really&#xA;the only thing I care about and I’m fine without it.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Ping 43</title>
    <id>https://waylonwalker.com/ping-43/</id>
    <updated>2026-03-31T18:33:05Z</updated>
    <published>2026-03-31T18:33:05Z</published>
    <link href="https://waylonwalker.com/ping-43/" rel="alternate" type="text/html"></link>
    <summary type="text">Okay so I logged into twitter today, and we are back.... probably not for long, but we are for now. Claude Code source leaked, the tweets are great....</summary>
    <content type="html">&lt;p&gt;Okay so I logged into twitter today, and we are back…. probably not for long,&#xA;but we are for now.  Claude Code source leaked, the tweets are great. [[&#xA;thoughts-956 ]], [[ thoughts-958 ]], [[ thoughts-959 ]], Some typescript css&#xA;text layout with bouncing balls, bubbles, strings, and webcam video to text is&#xA;blowing up [[ thoughts-957 ]].  This is the tech twitter I remember no sad news&#xA;how the world is corrupt by the other side.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Wyatt&#39;s First Printed Cosplay Scales</title>
    <id>https://waylonwalker.com/shots/wyatts-first-printed-cosplay-scales/</id>
    <updated>2026-03-30T10:22:31Z</updated>
    <published>2026-03-30T10:22:31Z</published>
    <link href="https://waylonwalker.com/shots/wyatts-first-printed-cosplay-scales/" rel="alternate" type="text/html"></link>
    <summary type="text">Wyatt printed these sick scales today and they came out so good on first try, luckily Rhiannon already had the fabric for him and he was able to follow his passion on this project while the spark was lit.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/aaaf7c08-b59b-48ff-bc16-287f40a207da.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/aaaf7c08-b59b-48ff-bc16-287f40a207da.webp&#34; alt=&#34;Wyatt’s first printed cosplay scales&#34;/ data-glightbox=&#34;description: Wyatt’s first printed cosplay scales&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Wyatt printed these sick scales today and they came out so good on first try, luckily Rhiannon already had the fabric for him and he was able to follow his passion on this project while the spark was lit.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Updating The Arch Iso</title>
    <id>https://waylonwalker.com/shots/updating-the-arch-iso/</id>
    <updated>2026-03-28T18:24:50Z</updated>
    <published>2026-03-28T18:24:50Z</published>
    <link href="https://waylonwalker.com/shots/updating-the-arch-iso/" rel="alternate" type="text/html"></link>
    <summary type="text">Wyatt is working on a new arch install and it blew up, time to update the live image.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/31a456ec-37e2-4feb-a250-96e23d670aee.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/31a456ec-37e2-4feb-a250-96e23d670aee.webp&#34; alt=&#34;Updating the arch iso&#34;/ data-glightbox=&#34;description: Updating the arch iso&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Wyatt is working on a new arch install and it blew up, time to update the live image.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Social Media is dead</title>
    <id>https://waylonwalker.com/ping-42/</id>
    <updated>2026-03-28T12:17:44Z</updated>
    <published>2026-03-28T12:17:44Z</published>
    <link href="https://waylonwalker.com/ping-42/" rel="alternate" type="text/html"></link>
    <summary type="text">Social Media is dead, interest media killed it long ago. I no longer feel like I&#39;m connecting to people, creating community, having fun, learning. I feel...</summary>
    <content type="html">&lt;p&gt;Social Media is dead, interest media killed it long ago.  I no longer feel like&#xA;I’m connecting to people, creating community, having fun, learning.  I feel&#xA;like I’m being shoveled slop from the slop machine, I’m sure mostly create by&#xA;well intentioned people just trying to make it in the world, trying to make&#xA;their mark, trying to make something of themselves.  The algos long lost the&#xA;idea of subs and likes, and transitioned to how long you will pause on a topic.&#xA;What used to be a series of recognizable faces, names, avatars, each with their&#xA;own personality that I could come to learn and know who was just trollin, who&#xA;was serious, is now mostly unrecognizable.  Platforms have changed and&#xA;fractured communities people went separate ways, not all the same ways.  No one&#xA;community is like it used to be, and its hard to find.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>/carry/</title>
    <id>https://waylonwalker.com/carry/</id>
    <updated>2026-03-27T16:35:40Z</updated>
    <published>2026-03-27T16:35:40Z</published>
    <link href="https://waylonwalker.com/carry/" rel="alternate" type="text/html"></link>
    <summary type="text">I try to keep a pretty light every day carry, but it never works out, keyfobs and headphone cases end up causing more bulk than I&#39;d like, but My EDC is no...</summary>
    <content type="html">&lt;h2 id=&#34;edc&#34;&gt;EDC &lt;a href=&#34;#edc&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I try to keep a pretty light every day carry, but it never works out, keyfobs&#xA;and headphone cases end up causing more bulk than I’d like, but My EDC is no&#xA;where near the bulk I had as a kid with my cargo pants decked out with&#xA;everything I could possibly need.&lt;/p&gt;&#xA;&lt;p&gt;I hold no attachment to anything in my EDC.  Nothing on my person has&#xA;sentimental value.  Anything I carry can be lost, stolen, or destroyed at any&#xA;point in time.  I pick things of sufficient usable, utilitarian, quality&#xA;sufficient to work.  No extra fluff.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Google Pixel 6&lt;/li&gt;&#xA;&lt;li&gt;Ridge Wallet&lt;/li&gt;&#xA;&lt;li&gt;Olight Perun - Since April 2022&lt;/li&gt;&#xA;&lt;li&gt;Civivi Qubit - Since March 2024 after my last one was donated to the Indianapolis Stadium&lt;/li&gt;&#xA;&lt;li&gt;OpenFit Shokz&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;rules&#34;&gt;Rules &lt;a href=&#34;#rules&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;lightweight&lt;/li&gt;&#xA;&lt;li&gt;replacable&lt;/li&gt;&#xA;&lt;li&gt;no emotional attachments&lt;/li&gt;&#xA;&lt;li&gt;utilitarian&lt;/li&gt;&#xA;&lt;li&gt;everything serves a purpose&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;my-kit&#34;&gt;My kit &lt;a href=&#34;#my-kit&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/606e48d7-bf14-42b9-a96e-87b676556ff8.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/606e48d7-bf14-42b9-a96e-87b676556ff8.webp&#34; alt=&#34;My EDC layout&#34;/ data-glightbox=&#34;description: My EDC layout&#34;&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;Photo taken March 2023&lt;/p&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;phone&#34;&gt;Phone &lt;a href=&#34;#phone&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Google Pixel 6&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I will not get finance a new phone for the foreseeable future again.  The last&#xA;time I feel like I got a phone that felt like an upgrade was 2018 when I went&#xA;to the Pixel 3.  The pixel 6 and pixel 8 my wife has feel no different&#xA;whatsoever to me.  It’s become more of a tool that does its job, there’s no&#xA;major upgrades really driving me to create more ewaste with new devices.&lt;/p&gt;&#xA;&lt;h2 id=&#34;wallet&#34;&gt;Wallet &lt;a href=&#34;#wallet&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Ridge Wallet&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;A necessary evil that I still need.  I keep as few of cards as necessary in it.&#xA;This would be the worst thing in my kit to loose.  Only because the time it&#xA;would take to replace all of them.  This one was a gift to replace my last&#xA;leather wallet, and I see no reason for this one to ever need replaced.  It’s&#xA;much lighter and smaller, would not change that aspect.&lt;/p&gt;&#xA;&lt;h2 id=&#34;flashlight&#34;&gt;Flashlight &lt;a href=&#34;#flashlight&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Olight Perun&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;When I became a homeowner I added a dedicated flashlight to my EDC.  Its light&#xA;and out of the way.  It’s the only thing I’ve ever found useful to fit in the&#xA;coin pocket of jeans, so I don’t even notice it.  Compared to using a phone,&#xA;its more powerful, easier to position on me with the clip on my shirt/pants, or&#xA;magnetically to a metal surface for inspections/house work.&lt;/p&gt;&#xA;&lt;h2 id=&#34;knife&#34;&gt;Knife &lt;a href=&#34;#knife&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Civivi Qubit&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I’ve carried a knife since as long as I can remember, feels like 10 but&#xA;probably more like 14 years old.  Never anything fancy, a few knock off&#xA;leathermans, a few Buck, Case, KaBar that I found on a bridge, and now 3&#xA;Civivis.  I use them till they break or more commonly they get lent and not&#xA;returned, or lost.  This is the most utilitarian thing I keep, almost always&#xA;kept razor sharp, used, abused, and put away dirty.  Never used for prying, but&#xA;used to cut anything it will cut no matter how &lt;em&gt;hard&lt;/em&gt; it is on it.  Its not to&#xA;look pretty, show off, its purely a tool that I hold no attachment to.&lt;/p&gt;&#xA;&lt;h2 id=&#34;headphones&#34;&gt;Headphones &lt;a href=&#34;#headphones&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;OpenFit Shokz&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Not my first choice in headphones, but they work.  Headphones are probably the&#xA;item of biggest churn and ewaste for me.  Eventually I might pony up for&#xA;something that is more durable and repairable, but headphones just don’t last&#xA;forever before they stop working for me.  This latest pair was a pair my wife&#xA;chose to try and did not like.  They sat in a drawer for a year or so until I&#xA;started carrying them.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Where Is The Tech Industry Going</title>
    <id>https://waylonwalker.com/ping-37/</id>
    <updated>2026-03-27T14:11:49Z</updated>
    <published>2026-03-27T14:11:49Z</published>
    <link href="https://waylonwalker.com/ping-37/" rel="alternate" type="text/html"></link>
    <summary type="text">Agents suck</summary>
    <content type="html">&lt;p&gt;Agents suck&lt;/p&gt;&#xA;&lt;p&gt;Get left behind if you don’t use them&lt;/p&gt;&#xA;&lt;p&gt;Burn out if you use them too much&lt;/p&gt;&#xA;&lt;p&gt;The software world has been flipped upside down seemingly overnight.  Slow at&#xA;first, then all at once.  It started with auto complete, to chat, to, ide&#xA;integrations, to agents that would f&amp;amp;!^ over your repo more than it would help.&#xA;Up till this point we are just  little bit better and more specific than copy&#xA;paste from Stack Overflow. Then in Nov 2025 models learned how to effectively&#xA;use tools and do what you ask of them, sometimes more, sometimes less, but&#xA;generally for the basic shit most of us make its a net positive with each&#xA;iteration.&lt;/p&gt;&#xA;&lt;p&gt;Our techniques for managing work need to change.&lt;/p&gt;&#xA;&lt;p&gt;Our expectations need to change.&lt;/p&gt;&#xA;&lt;p&gt;Burnout for a lot of folks is coming.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Is Compaction The Issue</title>
    <id>https://waylonwalker.com/is-compaction-the-issue/</id>
    <updated>2026-03-26T09:37:47Z</updated>
    <published>2026-03-26T09:37:47Z</published>
    <link href="https://waylonwalker.com/is-compaction-the-issue/" rel="alternate" type="text/html"></link>
    <summary type="text">I saw today in work chat something along the lines of &#34;we need bigger context windows&#34; &#34;compaction times are holding us back&#34;. Maybe I&#39;m just blessed with...</summary>
    <content type="html">&lt;p&gt;I saw today in work chat something along the lines of “we need bigger context&#xA;windows” “compaction times are holding us back”.  Maybe I’m just blessed with&#xA;the lack of lord jira, maybe juggle too many projects at once and they are all&#xA;pretty much done when I get back.  Maybe I do more long running specs and spend&#xA;time making good plans that it does not matter.&lt;/p&gt;&#xA;&lt;p&gt;Anyways the point I’m getting to is that if you think that compaction is your&#xA;main issue slowing you down, and 10x this if you are a manager thinking this is&#xA;what is slowing down your team you &lt;strong&gt;need&lt;/strong&gt; to look at your workflow.  Not&#xA;because it sucks.  Not only because it could be better.  Because you are&#xA;signing yourself and your team up for burnout if you are sitting there watching&#xA;these things run like waiting for paint to dry and firing more prompts at them&#xA;as soon as they are done.  It feels easy.  It feels like you are going fast.&#xA;Its eating more brainpower than you think, and its not getting you to your&#xA;destination any faster.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Lets Land The Plane</title>
    <id>https://waylonwalker.com/lets-land-the-plane/</id>
    <updated>2026-03-25T08:41:15Z</updated>
    <published>2026-03-25T08:41:15Z</published>
    <link href="https://waylonwalker.com/lets-land-the-plane/" rel="alternate" type="text/html"></link>
    <summary type="text">Part of @steveyegge &#39;s gastown/beads is a prompt &#34;Lets land the plane&#34;. It&#39;s very straightforward forward and what any sane human would probably do before...</summary>
    <content type="html">&lt;p&gt;Part of @steveyegge ’s gastown/beads is a prompt “Lets land the plane”.  It’s very straightforward forward and what any sane human would probably do before finishing work, except the last part.  The “generate a handoff prompt for the next session” was not something I’ve put much thought into.  But now that I juggle 6 sessions at a time and often end up with 20 sessions open because I don’t want to close them and loose the last bit of context.  This is what I need to keep from crippling my laptop memory from all of these stale sessions hanging around.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/b75a3a4d-679c-415d-9d14-231b0f75e0ff.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/b75a3a4d-679c-415d-9d14-231b0f75e0ff.webp&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;Taken from &lt;a href=&#34;https://ianbull.com/posts/beads&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/ianbull.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/ianbull.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://ianbull.com/posts/beads&lt;/a&gt;&lt;/p&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>move zmk keyboard to new bluetooth adapter</title>
    <id>https://waylonwalker.com/move-zmk-keyboard-to-new-bluetooth-adapter/</id>
    <updated>2026-03-23T17:59:59Z</updated>
    <published>2026-03-23T17:59:59Z</published>
    <link href="https://waylonwalker.com/move-zmk-keyboard-to-new-bluetooth-adapter/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been having issue with my keyboard disconnecting to my main desktop for awhile. Today I got a cheap bluetooh dongle in and am giving it a run this week...</summary>
    <content type="html">&lt;p&gt;I’ve been having issue with my keyboard disconnecting to my main desktop for&#xA;awhile.  Today I got a cheap bluetooh dongle in and am giving it a run this&#xA;week to see how things go.  The first step was to move it to the new adapter.&#xA;I’ve never had multiple adapters installed so this was a new to me process.&lt;/p&gt;&#xA;&lt;p&gt;I was able to do it all with the same keyboard, It did require some juggling&#xA;between usb and bluetooth modes plugigng and unplugging, two keyboards would be&#xA;simpler to reason about.&lt;/p&gt;&#xA;&lt;p&gt;I can’t be bothered to change my brain to think about this machine on a&#xA;different zmk profile it is of absolute importance for it to remain on the same&#xA;profile, otherwise this would be a simple bind to another empty profile.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Why not use a cable on desktop?&lt;/p&gt;&#xA;&lt;p&gt;I dont mind cable, and have used one on this setup for years, but I have&#xA;actually been picking up and moving this keyboard and using it with&#xA;different devices.&lt;/p&gt;&#xA;&lt;p&gt;I’ve got a big battery and performace cranked up, unless my machine is&#xA;under load I do not notice any key lag.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;I did it with bluetoothctl, I’m sure it could have been done with a gui like&#xA;&lt;code&gt;blueberry&lt;/code&gt; or &lt;code&gt;blueman&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bluetoothctl&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# list adapters&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;list&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt; &amp;lt;old-adapter&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;devices&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# fin the MAC address of the device 42BLOCK&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;remove &amp;lt;42BLOCK_MAC&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now I plugged into usb. And &lt;strong&gt;importantly&lt;/strong&gt; cleared out the zmk profile.  If&#xA;you do not clear the profile your board does not go into pairing mode.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bluetoothctl&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# switch adapters&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt; &amp;lt;new-adapter&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;power on&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;agent on&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;default-agent&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;scan on&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Put 42Block in pairing mode, &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pair &amp;lt;42BLOCK_MAC&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;trust &amp;lt;42BLOCK_MAC&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;At this pint I saw this show up in the logs, I think there was some masking&#xA;issues or something in zmk, output kept going out usb no matter what so I&#xA;disconnected the keyboard and typed the passkey in, and it worked.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;agent&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; Passkey: &lt;span class=&#34;m&#34;&gt;540044&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Boom, it just started working right away.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bluetoothctl&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;connect &amp;lt;42BLOCK_MAC&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;info &amp;lt;42BLOCK_MAC&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;scan off&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ mohebifar tooscut</title>
    <id>https://waylonwalker.com/mohebifar-tooscut/</id>
    <updated>2026-03-22T22:18:23Z</updated>
    <published>2026-03-22T22:18:23Z</published>
    <link href="https://waylonwalker.com/mohebifar-tooscut/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? tooscut by mohebifar.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/mohebifar/tooscut&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tooscut&lt;/a&gt; by &lt;a href=&#34;https://github.com/mohebifar&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mohebifar&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Professional video editing, right in your browser. Made with Rust, WebGPU, WASM, and Tanstack Start.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Ping 38</title>
    <id>https://waylonwalker.com/ping-38/</id>
    <updated>2026-03-22T09:56:48Z</updated>
    <published>2026-03-22T09:56:48Z</published>
    <link href="https://waylonwalker.com/ping-38/" rel="alternate" type="text/html"></link>
    <summary type="text">When agents do the work its harder to recognize a dead end.</summary>
    <content type="html">&lt;p&gt;When agents do the work its harder to recognize a dead end.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ kraanzu smassh</title>
    <id>https://waylonwalker.com/kraanzu-smassh/</id>
    <updated>2026-03-21T16:56:20Z</updated>
    <published>2026-03-21T16:56:20Z</published>
    <link href="https://waylonwalker.com/kraanzu-smassh/" rel="alternate" type="text/html"></link>
    <summary type="text">I like kraanzu&#39;s project smassh.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/kraanzu&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kraanzu’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/kraanzu/smassh&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;smassh&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Smassh your Keyboard, TUI Edition&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ KittenML KittenTTS</title>
    <id>https://waylonwalker.com/kittenml-kittentts/</id>
    <updated>2026-03-20T03:37:04Z</updated>
    <published>2026-03-20T03:37:04Z</published>
    <link href="https://waylonwalker.com/kittenml-kittentts/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about KittenTTS, an amazing project by KittenML. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/KittenML/KittenTTS&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;KittenTTS&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/KittenML&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;KittenML&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;State-of-the-art TTS model under 25MB 😻&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Learning to agent</title>
    <id>https://waylonwalker.com/ping-35b/</id>
    <updated>2026-03-19T20:53:08Z</updated>
    <published>2026-03-19T20:53:08Z</published>
    <link href="https://waylonwalker.com/ping-35b/" rel="alternate" type="text/html"></link>
    <summary type="text">All we are hearing lately is Agents are the future, something flipped around NOV 2025 with opus 4.5. It turned snake oil into action. It changed programmers...</summary>
    <content type="html">&lt;p&gt;All we are hearing lately is Agents are the future, something flipped around&#xA;NOV 2025 with opus 4.5.  It turned snake oil into action.  It changed&#xA;programmers will be replaced in 6 months to now.  Not all of them, but probably&#xA;most of us who are not extraordinary.  If you fall into the camp of folks not&#xA;adopting, I got no issues with that.  No one is twisting your arm, well maybe&#xA;your boss or cto is, thats on them.  I don’t mean to say this is the future as&#xA;in, get in or get left behind.  I mean it as this is where your other engineers&#xA;probably are, the junior to mid level engineers are here.  If you are not&#xA;trying to meet them where they are how are you going to lead them.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Studio Ghibli Images in the Wild</title>
    <id>https://waylonwalker.com/ping-35/</id>
    <updated>2026-03-19T20:49:26Z</updated>
    <published>2026-03-19T20:49:26Z</published>
    <link href="https://waylonwalker.com/ping-35/" rel="alternate" type="text/html"></link>
    <summary type="text">I just stumbled into an image in my org chart of someone who clearly turned themself into a Studio Ghibli character in chatgpt during the small window of...</summary>
    <content type="html">&lt;p&gt;I just stumbled into an image in my org chart of someone who clearly turned&#xA;themself into a Studio Ghibli character in chatgpt during the small window of&#xA;time that it seemed to do this for everything.  Its clearly the aesthetic that&#xA;It would do by default for that week, then would not do it whatsoever.  I’d&#xA;link it, but its from an org chart.  I mostly found it interesting how we now&#xA;have these recognizable artifacts from specific moments in time.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Ping 36</title>
    <id>https://waylonwalker.com/ping-36/</id>
    <updated>2026-03-19T17:42:56Z</updated>
    <published>2026-03-19T17:42:56Z</published>
    <link href="https://waylonwalker.com/ping-36/" rel="alternate" type="text/html"></link>
    <summary type="text">I feel like there&#39;s an inevitable phase to every ai/agentic worked feature/epic where you have to get in and chat with it 2025 style (except it actually...</summary>
    <content type="html">&lt;p&gt;I feel like there’s an inevitable phase to every ai/agentic worked feature/epic&#xA;where you have to get in and chat with it 2025 style (except it actually works&#xA;and doesn’t turn your project to shit).  Planning is great, planning out epics&#xA;for full orchestrator’s to churn for hours on is amazing, but it always leaves&#xA;me with a handful of thorns multiplied by complexity level of things that I&#xA;can shout a list of 6 items at a time that it can one shot.  I haven’t seen&#xA;anyone put a name to this phase yet, so I’m going to call it the UAT phase&#xA;for now and it seems like a very necessary part of the SDLC.  It was&#xA;important before, but feels more so now as engineers distance themselves&#xA;from the implementation.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Research, Plan, Implement</title>
    <id>https://waylonwalker.com/ping-34/</id>
    <updated>2026-03-18T20:49:26Z</updated>
    <published>2026-03-18T20:49:26Z</published>
    <link href="https://waylonwalker.com/ping-34/" rel="alternate" type="text/html"></link>
    <summary type="text">I heard this term yesterday, and I think a lot of people are missing out on step 1. It&#39;s important to experiment with agents and learn what they can do well...</summary>
    <content type="html">&lt;p&gt;I heard this term yesterday, and I think a lot of people are missing out on&#xA;step 1.  It’s important to experiment with agents and learn what they can do&#xA;well and what they cant, this changes every couple of weeks at this point.  You&#xA;might be spending hours planning something that could have been implemented&#xA;right away, or maybe wasted time planning something that needed more research,&#xA;more context engineering.  Agents start fresh every session, they cant remember&#xA;what you asked them to do 5 minutes ago in the other session, getting the right&#xA;tokens in session is critical.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>dot dockerenv</title>
    <id>https://waylonwalker.com/dot-dockerenv/</id>
    <updated>2026-03-18T10:07:16Z</updated>
    <published>2026-03-18T10:07:16Z</published>
    <link href="https://waylonwalker.com/dot-dockerenv/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I learned that docker creates an empty file to indicate that you are running in a docker container. Other runtimes like podman commonly use ....</summary>
    <content type="html">&lt;p&gt;Today I learned that docker creates an empty &lt;code&gt;/.dockerenv&lt;/code&gt; file to indicate that&#xA;you are running in a docker container.  Other runtimes like podman commonly use&#xA;&lt;code&gt;/run/.containerenv&lt;/code&gt;.  kubernetes uses neither of these, the most common way to&#xA;detect if you are running in kubernetes is to check for the presence of the&#xA;&lt;code&gt;KUBERNETES_SERVICE_HOST&lt;/code&gt; environment variable.  There will also be a directory&#xA;at &lt;code&gt;/var/run/secrets/kubernetes.io/serviceaccount&lt;/code&gt; that contains the service&#xA;account credentials if you are running in kubernetes.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Context Poisoning Was There All Along</title>
    <id>https://waylonwalker.com/ping-32/</id>
    <updated>2026-03-17T21:10:38Z</updated>
    <published>2026-03-17T21:10:38Z</published>
    <link href="https://waylonwalker.com/ping-32/" rel="alternate" type="text/html"></link>
    <summary type="text">I wrote some code by hand on Sunday. Sat down with my son and started building out a game in pygame from scratch. We went to google, we searched how to do...</summary>
    <content type="html">&lt;p&gt;I wrote some code by hand on Sunday.  Sat down with my son and started building&#xA;out a game in pygame from scratch.  We went to google, we searched how to do&#xA;something, we copy and pasted from the docs.  Not because we are dumb, but&#xA;because we cant remember some aspects of the pygame api.  Now that these&#xA;patterns are established we no longer have to google them, we simply grep our&#xA;codebase and replicate the pattern.  Easy right?  It’s funny that it took ai to&#xA;coin the term &lt;code&gt;context poisoning&lt;/code&gt; even though it was there all along.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tobi qmd</title>
    <id>https://waylonwalker.com/tobi-qmd/</id>
    <updated>2026-03-17T20:39:09Z</updated>
    <published>2026-03-17T20:39:09Z</published>
    <link href="https://waylonwalker.com/tobi-qmd/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on qmd, created by tobi.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/tobi/qmd&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;qmd&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/tobi&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tobi&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;mini cli search engine for your docs, knowledge bases, meeting notes, whatever. Tracking current sota approaches while being all local&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ratdoux OrcaSlicer-FullSpectrum</title>
    <id>https://waylonwalker.com/ratdoux-orcaslicer-fullspectrum/</id>
    <updated>2026-03-17T20:33:28Z</updated>
    <published>2026-03-17T20:33:28Z</published>
    <link href="https://waylonwalker.com/ratdoux-orcaslicer-fullspectrum/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? OrcaSlicer-FullSpectrum by ratdoux.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/ratdoux/OrcaSlicer-FullSpectrum&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;OrcaSlicer-FullSpectrum&lt;/a&gt; by &lt;a href=&#34;https://github.com/ratdoux&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ratdoux&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;G-code generator for Snapmaker U1 with Full Spectrum layer blending&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Agents cannot replace the thinking, they only amplify it</title>
    <id>https://waylonwalker.com/ping-33/</id>
    <updated>2026-03-17T20:32:16Z</updated>
    <published>2026-03-17T20:32:16Z</published>
    <link href="https://waylonwalker.com/ping-33/" rel="alternate" type="text/html"></link>
    <summary type="text">Agents cannot replace the thinking, they only amplify it. If you set the agents off in the wrong direction that&#39;s where they will go. They will sprint there...</summary>
    <content type="html">&lt;p&gt;Agents cannot replace the thinking, they only amplify it.  If you set the&#xA;agents off in the wrong direction that’s where they will go.  They will sprint&#xA;there faster than you can go.  This is ok, its one of their advantages, they&#xA;can give you signal quick.  Remember if they are off in the wrong direction&#xA;more research and planning is needed, and maybe a little bit more thinking on&#xA;your end to steer them in the right direction.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>trailmakers pioneers second run - Almost Cheesed It To Port Aquelite</title>
    <id>https://waylonwalker.com/shots/almost-cheesed-it-to-port-aquelite/</id>
    <updated>2026-03-17T20:22:52Z</updated>
    <published>2026-03-17T20:22:52Z</published>
    <link href="https://waylonwalker.com/shots/almost-cheesed-it-to-port-aquelite/" rel="alternate" type="text/html"></link>
    <summary type="text">Almost Cheesed It To Port Aquelite</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/b0adaf31-0a54-4289-a129-0656cd830c62.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/b0adaf31-0a54-4289-a129-0656cd830c62.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/b0adaf31-0a54-4289-a129-0656cd830c62.mp4&#34; type=&#34;video/mp4&#34;&gt;Almost Cheesed It To Port Aquelite&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I almost Cheesed It To Port Aquelite by spamming repawn, During my second trailmakers pioneers run.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>trailmakers pioneers second run - Its A Trap</title>
    <id>https://waylonwalker.com/shots/its-a-trap/</id>
    <updated>2026-03-17T20:22:07Z</updated>
    <published>2026-03-17T20:22:07Z</published>
    <link href="https://waylonwalker.com/shots/its-a-trap/" rel="alternate" type="text/html"></link>
    <summary type="text">Its A Trap</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/144212e0-1ed6-4c1a-9630-70ad545145c9.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/144212e0-1ed6-4c1a-9630-70ad545145c9.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/144212e0-1ed6-4c1a-9630-70ad545145c9.mp4&#34; type=&#34;video/mp4&#34;&gt;Its A Trap&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Its A Trap, abmush with Adiral Leadhead, During my second trailmakers pioneers run.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>trailmakers pioneers second run - Collection Party Balloon</title>
    <id>https://waylonwalker.com/shots/collection-party-balloon/</id>
    <updated>2026-03-17T20:21:30Z</updated>
    <published>2026-03-17T20:21:30Z</published>
    <link href="https://waylonwalker.com/shots/collection-party-balloon/" rel="alternate" type="text/html"></link>
    <summary type="text">Collection Party Balloon</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/e3bc3df8-7ad5-4e29-9878-d71603f3b208.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/e3bc3df8-7ad5-4e29-9878-d71603f3b208.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/e3bc3df8-7ad5-4e29-9878-d71603f3b208.mp4&#34; type=&#34;video/mp4&#34;&gt;Collection Party Balloon&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Collecting Party Balloon, During my second trailmakers pioneers run.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>trailmakers pioneers second run - Collection L Bracket</title>
    <id>https://waylonwalker.com/shots/collection-l-bracket/</id>
    <updated>2026-03-17T20:20:14Z</updated>
    <published>2026-03-17T20:20:14Z</published>
    <link href="https://waylonwalker.com/shots/collection-l-bracket/" rel="alternate" type="text/html"></link>
    <summary type="text">Collection L Bracket</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/00069fdd-0baf-44d0-9102-cfc80f273327.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/00069fdd-0baf-44d0-9102-cfc80f273327.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/00069fdd-0baf-44d0-9102-cfc80f273327.mp4&#34; type=&#34;video/mp4&#34;&gt;Collection L Bracket&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Collecting the L Bracket, During my second trailmakers pioneers run.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>trailmakers pioneers second run - Wyatt Hits The Gap</title>
    <id>https://waylonwalker.com/shots/wyatt-hits-the-gap/</id>
    <updated>2026-03-17T20:19:24Z</updated>
    <published>2026-03-17T20:19:24Z</published>
    <link href="https://waylonwalker.com/shots/wyatt-hits-the-gap/" rel="alternate" type="text/html"></link>
    <summary type="text">Wyatt Hits The Gap</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/69869e1e-7aea-42c7-9d99-321aac67324a.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/69869e1e-7aea-42c7-9d99-321aac67324a.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/69869e1e-7aea-42c7-9d99-321aac67324a.mp4&#34; type=&#34;video/mp4&#34;&gt;Wyatt Hits The Gap&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Wyatt Hits The Gap, During my second trailmakers pioneers run.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Thinking about ai productivity again</title>
    <id>https://waylonwalker.com/ping-31/</id>
    <updated>2026-03-16T21:01:44Z</updated>
    <published>2026-03-16T21:01:44Z</published>
    <link href="https://waylonwalker.com/ping-31/" rel="alternate" type="text/html"></link>
    <summary type="text">Thinking about AI productivity again. It&#39;s allowing massive amounts of work to get done, to levels that humans cannot physically type out in some cases. But...</summary>
    <content type="html">&lt;p&gt;Thinking about AI productivity again.  It’s allowing massive amounts of work to&#xA;get done, to levels that humans cannot physically type out in some cases.  But&#xA;not all of this work is necessarily high value work.  Right now I’m working on&#xA;one of the biggest PRs to an internal cli library.  Probably the largest PR&#xA;I’ve ever done professionally.  It touches all of the cli, refactors every&#xA;command, reaches into the business logic layers to drive deeper separation.  I&#xA;reaches into the common layers to drive consistency.  It ensures that every&#xA;command (50 or so) has similar flags, supports –plain, –no-color.  It specs&#xA;out contracts to ensure that data goes out stdout, any extra goes out stderr.&#xA;This makes everything unix pipe friendly. There was quite a bit of research and&#xA;prep that went in, that turns out to already be distilled down into clig.dev.&#xA;The point is that this is all good work.  It will make the product consistent,&#xA;repeatable, expected, and most of all boring.  Most of the time, it will just&#xA;work.  Since we did it ahead of a lot of other agentic work on the product its&#xA;establishing good patterns for the product moving forward.  But its low value&#xA;work.  We wouldn’t have likely put humans on this work wholesale and fixed&#xA;critical paths as they came up.  Its not cutting cost, selling more product, or&#xA;driving critical business decisions.  Yes it’s worth it now, but it would not&#xA;have bee in the past.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Dummy13 On A Skateboard</title>
    <id>https://waylonwalker.com/shots/dummy13-on-a-skateboard/</id>
    <updated>2026-03-16T20:53:56Z</updated>
    <published>2026-03-16T20:53:56Z</published>
    <link href="https://waylonwalker.com/shots/dummy13-on-a-skateboard/" rel="alternate" type="text/html"></link>
    <summary type="text">Tonight Wyatt gave me a dummy13 that he printed, assembled, and posed all on his own. He&#39;s printed quite a few of these in the past, and none came to this level of completion. I&#39;m so proud of him. This one was a near flawless build with only a few mistakes, that I&#39;d argue were poor design, small vertical pins. More importantly he was able to problem solve and use resin to fix these mistakes.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/beb54917-9ffa-458f-aaef-8d0a4b56566f.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/beb54917-9ffa-458f-aaef-8d0a4b56566f.webp&#34; alt=&#34;dummy13 on a skateboard&#34;/ data-glightbox=&#34;description: dummy13 on a skateboard&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Tonight Wyatt gave me a dummy13 that he printed, assembled, and posed all on his own.  He’s printed quite a few of these in the past, and none came to this level of completion.  I’m so proud of him.  This one was a near flawless build with only a few mistakes, that I’d argue were poor design, small vertical pins.  More importantly he was able to problem solve and use resin to fix these mistakes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Groal The Great Fail 1</title>
    <id>https://waylonwalker.com/shots/goal-the-great-fail-1/</id>
    <updated>2026-03-15T20:33:06Z</updated>
    <published>2026-03-15T20:33:06Z</published>
    <link href="https://waylonwalker.com/shots/goal-the-great-fail-1/" rel="alternate" type="text/html"></link>
    <summary type="text">Groal The Great Fail 1</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/7722f9c4-8910-4811-a5b7-86ae7051ca0a.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/7722f9c4-8910-4811-a5b7-86ae7051ca0a.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/7722f9c4-8910-4811-a5b7-86ae7051ca0a.mp4&#34; type=&#34;video/mp4&#34;&gt;Groal The Great Fail 1&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Groal The Great Fail 1&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Groal The Great Fail 2</title>
    <id>https://waylonwalker.com/shots/goal-the-great-fail-2/</id>
    <updated>2026-03-15T20:31:49Z</updated>
    <published>2026-03-15T20:31:49Z</published>
    <link href="https://waylonwalker.com/shots/goal-the-great-fail-2/" rel="alternate" type="text/html"></link>
    <summary type="text">Groal The Great Fail 2</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/73bf21e9-bb8f-48f0-b2b5-840a1beec270.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/73bf21e9-bb8f-48f0-b2b5-840a1beec270.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/73bf21e9-bb8f-48f0-b2b5-840a1beec270.mp4&#34; type=&#34;video/mp4&#34;&gt;Groal The Great Fail 2&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Groal The Great Fail 2&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ cyxzdev Uncodixfy</title>
    <id>https://waylonwalker.com/cyxzdev-uncodixfy/</id>
    <updated>2026-03-13T01:26:23Z</updated>
    <published>2026-03-13T01:26:23Z</published>
    <link href="https://waylonwalker.com/cyxzdev-uncodixfy/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered Uncodixfy by cyxzdev, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/cyxzdev/Uncodixfy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Uncodixfy&lt;/a&gt; by &lt;a href=&#34;https://github.com/cyxzdev&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cyxzdev&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;the holly uncodexify instructions - letting GPT create uncodexified UI&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Did you even like to code?</title>
    <id>https://waylonwalker.com/ping-29/</id>
    <updated>2026-03-07T20:59:39Z</updated>
    <published>2026-03-07T20:59:39Z</published>
    <link href="https://waylonwalker.com/ping-29/" rel="alternate" type="text/html"></link>
    <summary type="text">Here&#39;s something I&#39;ve been wrestling with lately. I keep hearing people come to the realization that they never liked coding, they thought they did, but...</summary>
    <content type="html">&lt;p&gt;Here’s something I’ve been wrestling with lately.  I keep hearing people come&#xA;to the realization that they never liked coding, they thought they did, but&#xA;secretly hated it the whole time.  I dont think I’ve ever kidded myself about&#xA;this.  I like building things.  I like having an idea and see it come to life.&#xA;Just because I like the end product more, and that coding really was a means to&#xA;an end, something I will never do again in the same capacity that I have in the&#xA;past, does not mean I did not enjoy the art of solving problems by typing&#xA;syntax into a file to tell a computer how to solve a problem.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Silksong Credits</title>
    <id>https://waylonwalker.com/shots/credits/</id>
    <updated>2026-03-07T09:19:27Z</updated>
    <published>2026-03-07T09:19:27Z</published>
    <link href="https://waylonwalker.com/shots/credits/" rel="alternate" type="text/html"></link>
    <summary type="text">Credits</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/251a07be-eb46-4a27-9317-1c7a673ba2b4.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/251a07be-eb46-4a27-9317-1c7a673ba2b4.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/251a07be-eb46-4a27-9317-1c7a673ba2b4.mp4&#34; type=&#34;video/mp4&#34;&gt;Credits&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Today I rolled the credits to Silksong, far from the end, still finishing the&#xA;playthrough.  also I walked away and let it sit idle and it ate my play&#xA;buffer so I lost the full boss fight.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>The only thing that seems interesting is AI right now</title>
    <id>https://waylonwalker.com/ping-28/</id>
    <updated>2026-03-06T20:55:26Z</updated>
    <published>2026-03-06T20:55:26Z</published>
    <link href="https://waylonwalker.com/ping-28/" rel="alternate" type="text/html"></link>
    <summary type="text">The only thing that seems interesting is AI right now, I&#39;m writing less code, and I kinda just don&#39;t care as much about the small open source stuff as I used...</summary>
    <content type="html">&lt;p&gt;The only thing that seems interesting is AI right now, I’m writing less code,&#xA;and I kinda just don’t care as much about the small open source stuff as I used&#xA;to.  I enjoy reading about what other people are thinking, doing, creating.&#xA;But when I go to grab a podcast while I wait on my clankers its one talking&#xA;about how other people are using them, how to make them more secure, more&#xA;effective, how the new models change things, what models are good at what.&#xA;It’s all so new and changes so fast.  Any sort of new open source project&#xA;starts out sus that it was just vibe coded anyways, So at the moment it feels&#xA;like ooh how did you get that, how do I make mine, and that the thing itself&#xA;has less value.  I hate that its this way, but it is.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Tmk 3x6+3 Gaming Keeb Sliced</title>
    <id>https://waylonwalker.com/shots/tmk-3x6+3-gaming-keeb-sliced/</id>
    <updated>2026-03-06T17:56:38Z</updated>
    <published>2026-03-06T17:56:38Z</published>
    <link href="https://waylonwalker.com/shots/tmk-3x6+3-gaming-keeb-sliced/" rel="alternate" type="text/html"></link>
    <summary type="text">Running through the layers of the tmx 3x6+s. gaming keeb.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/0c4daa3e-8097-4e91-b54a-a3a84e1e0a48.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/0c4daa3e-8097-4e91-b54a-a3a84e1e0a48.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/0c4daa3e-8097-4e91-b54a-a3a84e1e0a48.mp4&#34; type=&#34;video/mp4&#34;&gt;tmk 3x6+3 gaming keeb sliced&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Running through the layers of the tmx 3x6+s. gaming keeb.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Tmk 3x6+3 Gaming Promo</title>
    <id>https://waylonwalker.com/shots/tmk-3x6+3-gaming-promo/</id>
    <updated>2026-03-06T17:48:47Z</updated>
    <published>2026-03-06T17:48:47Z</published>
    <link href="https://waylonwalker.com/shots/tmk-3x6+3-gaming-promo/" rel="alternate" type="text/html"></link>
    <summary type="text">Promo video for the tmk 3x5+3 gaming keyboard.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/f5769ee4-7094-4527-a27c-c4b9f3d58bc2.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/f5769ee4-7094-4527-a27c-c4b9f3d58bc2.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/f5769ee4-7094-4527-a27c-c4b9f3d58bc2.mp4&#34; type=&#34;video/mp4&#34;&gt;tmk 3x6+3 gaming promo&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Promo video for the tmk 3x5+3 gaming keyboard.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>It&#39;s all moving so fast</title>
    <id>https://waylonwalker.com/ping-27/</id>
    <updated>2026-03-05T20:53:59Z</updated>
    <published>2026-03-05T20:53:59Z</published>
    <link href="https://waylonwalker.com/ping-27/" rel="alternate" type="text/html"></link>
    <summary type="text">AI is moving so fast this year its hard to keep up, I&#39;ve written 3 or 4 versions of one blog post to replace im-out-on-agents, but it feels like everything...</summary>
    <content type="html">&lt;p&gt;AI is moving so fast this year its hard to keep up, I’ve written 3 or 4&#xA;versions of one blog post to replace &lt;a href=&#34;/im-out-on-agents/&#34; class=&#34;wikilink&#34; data-title=&#34;I&amp;#39;m Out On Agents&#34; data-description=&#34;Its the year 2025 and we are only a few years into having 6 months to live before ai takes our jobs, and the big push right now is agents, managing agents. I...&#34; data-date=&#34;2025-08-27&#34; data-preview=&#34;Its the year 2025 and we are only a few years into having 6 months to live before ai takes our jobs, and the big push right now is agents, managing agents. I...&#34;&gt;I&amp;#39;m Out On Agents&lt;/a&gt;, but it feels like&#xA;everything changes before I can get it out.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Tgo V0.1.0</title>
    <id>https://waylonwalker.com/shots/tgo-v0.1.0/</id>
    <updated>2026-03-04T21:19:47Z</updated>
    <published>2026-03-04T21:19:47Z</published>
    <link href="https://waylonwalker.com/shots/tgo-v0.1.0/" rel="alternate" type="text/html"></link>
    <summary type="text">tgo v0.1.0, tmux session switcher written in go</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/7c5765a0-126d-430a-ad86-eb83eb440e1b.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/7c5765a0-126d-430a-ad86-eb83eb440e1b.webp&#34; alt=&#34;tgo v0.1.0&#34;/ data-glightbox=&#34;description: tgo v0.1.0&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;tgo v0.1.0, tmux session switcher written in go&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>I Built A Tmux Session Switcher</title>
    <id>https://waylonwalker.com/i-built-a-tmux-session-switcher/</id>
    <updated>2026-03-04T20:47:37Z</updated>
    <published>2026-03-04T20:47:37Z</published>
    <link href="https://waylonwalker.com/i-built-a-tmux-session-switcher/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been thinking about this for awhile now. For years now, fuzzy pickers and last session have been my go to. They have served me well. I can typically...</summary>
    <content type="html">&lt;p&gt;I’ve been thinking about this for awhile now.  For years now, fuzzy pickers and&#xA;last session have been my go to.  They have served me well.  I can typically&#xA;only keep so much in my head anyways.  I’m often doing a hub and spoke pattern&#xA;between main project, notes, and infra repo, maybe two projects.  Don’t get me&#xA;wrong, I regularly run with a dozen or more sessions running at a time, but&#xA;only two to three are in my immediate context at any point anyways.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-design&#34;&gt;The Design &lt;a href=&#34;#the-design&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;harpoon for tmux&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;SIMPLE, FAST, thats of upmost importance, what I want are sessions that I can&#xA;press a hotkey followed by one more keystroke, currently any left hand letter&#xA;can be assigned in order of importance from middle row, top row, bottom row.&lt;/p&gt;&#xA;&lt;p&gt;I added this binding to my tmux config.  Now I can press &lt;code&gt;c-a a&lt;/code&gt; to go to the&#xA;first session, &lt;code&gt;c-a s&lt;/code&gt; to go to the second session. &lt;code&gt;c-a&lt;/code&gt; and pause to think&#xA;j/k to navigate, space to pick up a session and move it, x to kill it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key -n c-a popup -E &lt;span class=&#34;s1&#34;&gt;&amp;#39;~/go/bin/tgo&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;enter-the-agents&#34;&gt;Enter the agents &lt;a href=&#34;#enter-the-agents&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now with agents doing more and more work, and cooking for longer periods this&#xA;is not cutting it, I’m often swapping through a lot more sessions, I’ve got&#xA;more projects sitting in more phases between research, implementation, fully&#xA;orchestrated agents, and sessions that need their hand held to get things&#xA;right.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/7c5765a0-126d-430a-ad86-eb83eb440e1b.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/7c5765a0-126d-430a-ad86-eb83eb440e1b.webp&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;Image of the &lt;code&gt;tgo&lt;/code&gt; tool in action, I’d show you a video, but its not really&#xA;that interesting, it just flashes up and goes to the next session as fast as&#xA;you can press the key.&lt;/p&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;made-with-gpt-53-codex-and-gpt-51-codex-mini&#34;&gt;Made with gpt-5.3-codex and gpt-5.1-codex-mini &lt;a href=&#34;#made-with-gpt-53-codex-and-gpt-51-codex-mini&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Idk how much it cost, it barely touched my $20/month weekly token allowance.&#xA;I’ve been thinking about it for awhile and decided today was the day to pull&#xA;the trigger on something and get it started, worst case I throw it away.  It&#xA;took the agents about 7 minutes to implement a working version with broken ci&#xA;that it later fixed.&lt;/p&gt;&#xA;&lt;p&gt;I’ve typed far more characters and put more thought into this post than the&#xA;tool itself, that where we are these days I guess.&lt;/p&gt;&#xA;&lt;p&gt;See the session that made &lt;code&gt;tgo&lt;/code&gt; &lt;a href=&#34;/ses-3444b09b1ffexter3elfg5qqtg/&#34; class=&#34;wikilink&#34; data-title=&#34;Ses_3444b09b1ffexter3elfg5qqtg&#34; data-description=&#34;** ses***** 3/4/2026, 8:52:32 PM&#34; data-date=&#34;2026-03-04&#34; data-preview=&#34;** ses***** 3/4/2026, 8:52:32 PM&#34;&gt;Ses_3444b09b1ffexter3elfg5qqtg&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;should-you-use-it&#34;&gt;Should you use it? &lt;a href=&#34;#should-you-use-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can its there for anyone to use, go for it, there’s an easy to download&#xA;binary.&lt;/p&gt;&#xA;&lt;p&gt;It’s all vibe coded slop that you could probably do a better job doing in a&#xA;cave with scraps anyways.  Take inspiration and make one that works for you.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Is gpt-5.4 slow?</title>
    <id>https://waylonwalker.com/ping-30/</id>
    <updated>2026-03-04T20:47:00Z</updated>
    <published>2026-03-04T20:47:00Z</published>
    <link href="https://waylonwalker.com/ping-30/" rel="alternate" type="text/html"></link>
    <summary type="text">What you don&#39;t have six agents orchestrating the work of 6 subagents yet. I saw in a work chat that people were complaining about 5.4 being too slow and they...</summary>
    <content type="html">&lt;p&gt;What you don’t have six agents orchestrating the work of 6 subagents yet.  I&#xA;saw in a work chat that people were complaining about 5.4 being too slow and&#xA;they keep going back to opus.  For me its been working great, I have it working&#xA;on critical infrastructure work, that I will need to maintain.  I appreciate&#xA;its accuracy and completeness.  And honestly I’m &lt;strong&gt;rarely&lt;/strong&gt; watching agents&#xA;run.  Its like watching paint dry at this point.  Its interesting to read their&#xA;thinking prompts, but not productive work.  While its running I’m teeing up the&#xA;net prompt.  Working with another set of agents to write a set of issues for&#xA;the next epic.  I might be too privileged though.  I own a whole platform and&#xA;have plenty of autonomy to work on what I see fit for the day.  I don’t have a&#xA;boss breathing down my neck waiting for a single ticket to be complete.  I’m&#xA;working on 6 projects at a time.  I’m taking walks to avoid becoming a burnt&#xA;out zombie.  I’m definitely not complaining about it kicking out massive&#xA;amounts of code too slow though.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>We are the Grey Beards</title>
    <id>https://waylonwalker.com/ping-26/</id>
    <updated>2026-03-04T20:44:12Z</updated>
    <published>2026-03-04T20:44:12Z</published>
    <link href="https://waylonwalker.com/ping-26/" rel="alternate" type="text/html"></link>
    <summary type="text">In November 2025 everyones beard lost its color, we aged into the next generation without realizing it. If you were getting paid to write code at this point...</summary>
    <content type="html">&lt;p&gt;In November 2025 everyones beard lost its color, we aged into the next&#xA;generation without realizing it.  If you were getting paid to write code at&#xA;this point in time, you are part of a special point in history where we used to&#xA;write code by hand.  There will be systems air gapped systems somewhere devs&#xA;will continue to do it how we’ve always done it, some day they will peek out of&#xA;this cave and realize that they are the only ones left, no one else remembers&#xA;what its like.  Writing code will quickly become a hobby that people do, in a&#xA;weird niche way.  Not because you want to build something, but like the guy&#xA;with a mainframe in his garage that likes to watch the lights blink.  Because&#xA;its nostalgic, it’s a very cool skill, its fun and rewarding, but it won’t be&#xA;to get something done.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Clankers got me tired</title>
    <id>https://waylonwalker.com/ping-25/</id>
    <updated>2026-03-03T20:42:25Z</updated>
    <published>2026-03-03T20:42:25Z</published>
    <link href="https://waylonwalker.com/ping-25/" rel="alternate" type="text/html"></link>
    <summary type="text">I spent all day grinding on a 20 minute fix. I want the agents to do it. They can do it, but they are missing the harnesses they need to replicate my...</summary>
    <content type="html">&lt;p&gt;I spent all day grinding on a 20 minute fix.  I want the agents to do it. They&#xA;can do it, but they are missing the harnesses they need to replicate my&#xA;workflows of old.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>One Shot Markata Searchcraft</title>
    <id>https://waylonwalker.com/shots/one-shot-markata-searchcraft/</id>
    <updated>2026-03-02T19:20:17Z</updated>
    <published>2026-03-02T19:20:17Z</published>
    <link href="https://waylonwalker.com/shots/one-shot-markata-searchcraft/" rel="alternate" type="text/html"></link>
    <summary type="text">This is the results of a one shot markata-go searchcraft integration</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/d406663b-a255-4025-b4ee-e40d1e483783.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/d406663b-a255-4025-b4ee-e40d1e483783.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/d406663b-a255-4025-b4ee-e40d1e483783.mp4&#34; type=&#34;video/mp4&#34;&gt;One Shot markata searchcraft&lt;/video&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;This is the results of a one shot markata-go searchcraft integration&lt;/p&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;The prompt was so rambly, I wrote it in about 2 minutes on the way out the door&#xA;to a kids practice.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;I am going to leave for awhile and I want you to prototype a markata-go&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;integration with searchcraft.  use /home/waylon/git/waylonwalker.com-go as the&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;site to test, stand up a new searchcraft database with podman. use a worktree&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;in ./worktree to write the integration, I want fast semantic search accross all&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;of my documents, I want them ingested/upserted/update on build, I want an index&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;per sitename, I might have multiple sites per database, I want you to make a&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/search page to test out what the seasrch looks like.  heavily delegate to&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;ni&#34;&gt;@builder&lt;/span&gt; to research and fully understand https://www.searchcraft.io/ before&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;starting, properly ingest all of the site and make the search page, I don&amp;#39;t&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;want you to stop or ask questions until it works, use &lt;span class=&#34;sb&#34;&gt;`agent-browser`&lt;/span&gt; for&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;testing, use &lt;span class=&#34;ni&#34;&gt;@builder&lt;/span&gt; for all changes writing editing and testing.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>gh do I have a pr</title>
    <id>https://waylonwalker.com/gh-do-i-have-a-pr/</id>
    <updated>2026-03-02T08:47:44Z</updated>
    <published>2026-03-02T08:47:44Z</published>
    <link href="https://waylonwalker.com/gh-do-i-have-a-pr/" rel="alternate" type="text/html"></link>
    <content type="text">&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ version-fox vfox</title>
    <id>https://waylonwalker.com/version-fox-vfox/</id>
    <updated>2026-03-02T02:57:32Z</updated>
    <published>2026-03-02T02:57:32Z</published>
    <link href="https://waylonwalker.com/version-fox-vfox/" rel="alternate" type="text/html"></link>
    <summary type="text">I like version-fox&#39;s project vfox.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/version-fox&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;version-fox’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/version-fox/vfox&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vfox&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A cross-platform and extendable version manager with support for Java, Node.js, Golang, Python, Flutter, .NET &amp;amp; more&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>TIL</title>
    <id>https://waylonwalker.com/til/</id>
    <updated>2026-03-01T00:00:00Z</updated>
    <published>2026-03-01T00:00:00Z</published>
    <link href="https://waylonwalker.com/til/" rel="alternate" type="text/html"></link>
    <summary type="text">Here are the latest snippets from the /til directory:</summary>
    <content type="html">&lt;h2 id=&#34;til-feed&#34;&gt;TIL feed &lt;a href=&#34;#til-feed&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here are the latest snippets from the /til directory:&lt;/p&gt;&#xA;&lt;div class=&#34;feed h-feed&#34;&gt;&#xA;&lt;div class=&#34;posts posts-list&#34;&gt;&#xA;&lt;article class=&#34;card card-link h-entry&#34;&gt;&#xA;&lt;header class=&#34;card-header&#34;&gt;&#xA;&lt;div class=&#34;card-link-wrapper&#34;&gt;&#xA;&lt;div class=&#34;card-link-content&#34;&gt;&#xA;&lt;a href=&#34;/anthropic-mythos/&#34; class=&#34;card-title p-name u-url&#34;&gt;Anthropic Mythos&lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/header&gt;&#xA;&lt;div class=&#34;card-body&#34;&gt;&#xA;&lt;div class=&#34;card-excerpt p-summary&#34;&gt;&lt;p&gt;An ai model created by Anthropic was announced as a closed preview on April 7, 2026 for critical security research and evaluation with its close partners with critical software such as operating systems and browsers. Anthropic claims that mythos is able to reason through so much more context that any model ever before. This enables it to find bugs that are 25 years old in the BSD, considered one of the most secure operating systems we have. Once it finds these zero day bugs never discovered before its able to use them together in malicious ways never expected. In ways the world is not ready for. At the time of writing these are claims without proof. It remains scary to know the potential this has and that there is only a few companies with this potential that will gatekeep who gets access.&lt;/p&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;footer class=&#34;card-meta&#34;&gt;&#xA;&lt;p&gt;&lt;time class=&#34;dt-published&#34; datetime=&#34;2026-04-13T16:18:15Z&#34;&gt;April 13, 2026&lt;/time&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;card-tags&#34;&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/ai/&#34; class=&#34;tag p-category&#34;&gt;ai&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/llm/&#34; class=&#34;tag p-category&#34;&gt;llm&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/model/&#34; class=&#34;tag p-category&#34;&gt;model&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;/footer&gt;&#xA;&lt;/article&gt;&#xA;&lt;article class=&#34;card card-link h-entry&#34;&gt;&#xA;&lt;header class=&#34;card-header&#34;&gt;&#xA;&lt;div class=&#34;card-link-wrapper&#34;&gt;&#xA;&lt;div class=&#34;card-link-content&#34;&gt;&#xA;&lt;a href=&#34;/move-zmk-keyboard-to-new-bluetooth-adapter/&#34; class=&#34;card-title p-name u-url&#34;&gt;move zmk keyboard to new bluetooth adapter&lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/header&gt;&#xA;&lt;div class=&#34;card-body&#34;&gt;&#xA;&lt;div class=&#34;card-excerpt p-summary&#34;&gt;&lt;p&gt;I’ve been having issue with my keyboard disconnecting to my main desktop for awhile. Today I got a cheap bluetooh dongle in and am giving it a run this week to see how things go. The first step was to move it to the new adapter. I’ve never had multiple adapters installed so this was a new to me process.&lt;/p&gt;&#xA;&lt;p&gt;I was able to do it all with the same keyboard, It did require some juggling between usb and bluetooth modes plugigng and unplugging, two keyboards would be simpler to reason about.&lt;/p&gt;&#xA;&lt;p&gt;I can’t be bothered to change my brain to think about this machine on a different zmk profile it is of absolute importance for it to remain on the same profile, otherwise this would be a simple bind to another empty profile.&lt;/p&gt;&#xA;&lt;p&gt;I did it with bluetoothctl, I’m sure it could have been done with a gui like &lt;code&gt;blueberry&lt;/code&gt; or &lt;code&gt;blueman&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;...&lt;/p&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;footer class=&#34;card-meta&#34;&gt;&#xA;&lt;p&gt;&lt;time class=&#34;dt-published&#34; datetime=&#34;2026-03-23T17:59:59Z&#34;&gt;March 23, 2026&lt;/time&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;card-tags&#34;&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/keeb/&#34; class=&#34;tag p-category&#34;&gt;keeb&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/zmk/&#34; class=&#34;tag p-category&#34;&gt;zmk&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;/footer&gt;&#xA;&lt;/article&gt;&#xA;&lt;article class=&#34;card card-link h-entry&#34;&gt;&#xA;&lt;header class=&#34;card-header&#34;&gt;&#xA;&lt;div class=&#34;card-link-wrapper&#34;&gt;&#xA;&lt;div class=&#34;card-link-content&#34;&gt;&#xA;&lt;a href=&#34;/dot-dockerenv/&#34; class=&#34;card-title p-name u-url&#34;&gt;dot dockerenv&lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/header&gt;&#xA;&lt;div class=&#34;card-body&#34;&gt;&#xA;&lt;div class=&#34;card-excerpt p-summary&#34;&gt;&lt;p&gt;Today I learned that docker creates an empty &lt;code&gt;/.dockerenv&lt;/code&gt; file to indicate that you are running in a docker container. Other runtimes like podman commonly use &lt;code&gt;/run/.containerenv&lt;/code&gt;. kubernetes uses neither of these, the most common way to detect if you are running in kubernetes is to check for the presence of the &lt;code&gt;KUBERNETES_SERVICE_HOST&lt;/code&gt; environment variable. There will also be a directory at &lt;code&gt;/var/run/secrets/kubernetes.io/serviceaccount&lt;/code&gt; that contains the service account credentials if you are running in kubernetes.&lt;/p&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;footer class=&#34;card-meta&#34;&gt;&#xA;&lt;p&gt;&lt;time class=&#34;dt-published&#34; datetime=&#34;2026-03-18T10:07:16Z&#34;&gt;March 18, 2026&lt;/time&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;card-tags&#34;&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/containers/&#34; class=&#34;tag p-category&#34;&gt;containers&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/docker/&#34; class=&#34;tag p-category&#34;&gt;docker&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/kubernetes/&#34; class=&#34;tag p-category&#34;&gt;kubernetes&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;/footer&gt;&#xA;&lt;/article&gt;&#xA;&lt;article class=&#34;card card-link h-entry&#34;&gt;&#xA;&lt;header class=&#34;card-header&#34;&gt;&#xA;&lt;div class=&#34;card-link-wrapper&#34;&gt;&#xA;&lt;div class=&#34;card-link-content&#34;&gt;&#xA;&lt;a href=&#34;/gh-do-i-have-a-pr/&#34; class=&#34;card-title p-name u-url&#34;&gt;gh do I have a pr&lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/header&gt;&#xA;&lt;div class=&#34;card-body&#34;&gt;&#xA;&lt;div class=&#34;card-excerpt p-summary&#34;&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;footer class=&#34;card-meta&#34;&gt;&#xA;&lt;p&gt;&lt;time class=&#34;dt-published&#34; datetime=&#34;2026-03-02T08:47:44Z&#34;&gt;March 2, 2026&lt;/time&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;card-tags&#34;&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/cli/&#34; class=&#34;tag p-category&#34;&gt;cli&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;/footer&gt;&#xA;&lt;/article&gt;&#xA;&lt;article class=&#34;card card-link h-entry&#34;&gt;&#xA;&lt;header class=&#34;card-header&#34;&gt;&#xA;&lt;div class=&#34;card-link-wrapper&#34;&gt;&#xA;&lt;div class=&#34;card-link-content&#34;&gt;&#xA;&lt;a href=&#34;/double-gutter/&#34; class=&#34;card-title p-name u-url&#34;&gt;double gutter&lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/header&gt;&#xA;&lt;div class=&#34;card-body&#34;&gt;&#xA;&lt;div class=&#34;card-excerpt p-summary&#34;&gt;&lt;p&gt;I keep forgetting about the double gutter problem with nested containers. When you put padding on a parent and the child also has padding, you get twice the spacing you wanted.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;.container { padding: 2rem; } .child { padding: 2rem; } &lt;/code&gt;&lt;/p&gt;&lt;p&gt;Now your content is 4rem from the edge. Not what I meant at all.&lt;/p&gt;&#xA;&lt;p&gt;Either remove padding from the parent or use &lt;code&gt;box-sizing: border-box&lt;/code&gt; and plan for it. I usually just drop the parent padding when I realize what I have done.&lt;/p&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;footer class=&#34;card-meta&#34;&gt;&#xA;&lt;p&gt;&lt;time class=&#34;dt-published&#34; datetime=&#34;2026-02-14T09:12:42Z&#34;&gt;February 14, 2026&lt;/time&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;card-tags&#34;&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/webdev/&#34; class=&#34;tag p-category&#34;&gt;webdev&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;/footer&gt;&#xA;&lt;/article&gt;&#xA;&lt;article class=&#34;card card-link h-entry&#34;&gt;&#xA;&lt;header class=&#34;card-header&#34;&gt;&#xA;&lt;div class=&#34;card-link-wrapper&#34;&gt;&#xA;&lt;div class=&#34;card-link-content&#34;&gt;&#xA;&lt;a href=&#34;/diff-kubernetes-manifest-with-cluster/&#34; class=&#34;card-title p-name u-url&#34;&gt;diff kubernetes manifest with cluster&lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/header&gt;&#xA;&lt;div class=&#34;card-body&#34;&gt;&#xA;&lt;div class=&#34;card-excerpt p-summary&#34;&gt;&lt;p&gt;Like a dufus this morning I did a hard reset on a &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; repo for getting I was working on a manifest for. You see I generally use argo, but occasionally I have no idea what I am doing or want yet and I start raw doggin it, fully aware that I’m going to just nuke this namespace before getting it into a proper argocd.&lt;/p&gt;&#xA;&lt;p&gt;I was overjoyed when I found out that you can diff your manifests with live production using the &lt;code&gt;kubectl diff&lt;/code&gt; command. It uses standard diff so you can bring all your fancy diff viewers you like.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;# regular manifest kubectl diff -f k8s/shots -n shot # kustomize kubectl diff -k k8s -n go-waylonwalker-com # using a fancy diff viewer kubectl diff -f k8s/shots -n shot | delta # using an even fancier diff viewer # pinkies out for this one kubectl diff -f k8s/shots -n shot | delta --diff-so-fancy &lt;/code&gt;&lt;/p&gt;&lt;p&gt;Now I can get those changes back that I thought I lost, and apply updates with confidence knowing what is about to change.&lt;/p&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;footer class=&#34;card-meta&#34;&gt;&#xA;&lt;p&gt;&lt;time class=&#34;dt-published&#34; datetime=&#34;2026-02-05T09:37:39Z&#34;&gt;February 5, 2026&lt;/time&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;card-tags&#34;&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/kubernetes/&#34; class=&#34;tag p-category&#34;&gt;kubernetes&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;/footer&gt;&#xA;&lt;/article&gt;&#xA;&lt;article class=&#34;card card-link h-entry&#34;&gt;&#xA;&lt;header class=&#34;card-header&#34;&gt;&#xA;&lt;div class=&#34;card-link-wrapper&#34;&gt;&#xA;&lt;div class=&#34;card-link-content&#34;&gt;&#xA;&lt;a href=&#34;/format-markdown-with-mdformat/&#34; class=&#34;card-title p-name u-url&#34;&gt;format markdown with mdformat&lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/header&gt;&#xA;&lt;div class=&#34;card-body&#34;&gt;&#xA;&lt;div class=&#34;card-excerpt p-summary&#34;&gt;&lt;p&gt;I really wish I would have got this right a few years ago. Theres a couple of flags I had to use to get mdformat to do hard wraps at 80 characters and not wreck tables. This mix of flags and plugins is workign really well for me so far.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;mdfmt() { uvx \ --with &amp;#34;mdformat-ruff&amp;#34; \ --with &amp;#34;mdformat-beautysh&amp;#34; \ --with &amp;#34;mdformat-web&amp;#34; \ --with &amp;#34;mdformat-config&amp;#34; \ --with &amp;#34;mdformat-gfm&amp;#34; \ --with &amp;#34;mdformat-front-matters&amp;#34; \ --with &amp;#34;mdformat-wikilink&amp;#34; \ --with &amp;#34;mdformat-simple-breaks&amp;#34; \ mdformat \ --wrap 80 \ --end-of-line lf \ --codeformatters python \ --codeformatters bash \ &amp;#34;$@&amp;#34; } &lt;/code&gt;&lt;/p&gt;&lt;p&gt;And as pre-commmit.&lt;/p&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;footer class=&#34;card-meta&#34;&gt;&#xA;&lt;p&gt;&lt;time class=&#34;dt-published&#34; datetime=&#34;2026-01-19T20:41:14Z&#34;&gt;January 19, 2026&lt;/time&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;card-tags&#34;&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/python/&#34; class=&#34;tag p-category&#34;&gt;python&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;/footer&gt;&#xA;&lt;/article&gt;&#xA;&lt;article class=&#34;card card-link h-entry&#34;&gt;&#xA;&lt;header class=&#34;card-header&#34;&gt;&#xA;&lt;div class=&#34;card-link-wrapper&#34;&gt;&#xA;&lt;div class=&#34;card-link-content&#34;&gt;&#xA;&lt;a href=&#34;/opencode-variants/&#34; class=&#34;card-title p-name u-url&#34;&gt;opencode variants&lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/header&gt;&#xA;&lt;div class=&#34;card-body&#34;&gt;&#xA;&lt;div class=&#34;card-excerpt p-summary&#34;&gt;&lt;p&gt;Opencode is changing on the daily right now, today I noticed the word &lt;code&gt;low&lt;/code&gt; pop up in Orange text in my opencode window. Looking into this they are exposing &lt;a href=&#34;https://opencode.ai/docs/models/#variants&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/opencode.ai.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/opencode.ai.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;variants&lt;/a&gt; to the user. This allows you to change between fast or slow and thinking, the later taking more time to prepare before doing an action.&lt;/p&gt;&#xA;&lt;p&gt;It looks like this toggle may have been here for awhile and I’m just now discovering it. Potentially because its a new feature of the free Zen provider.&lt;/p&gt;&#xA;&lt;p&gt;Variants Many models support multiple variants with different configurations. OpenCode ships with built-in default variants for popular providers.&lt;/p&gt;&#xA;&lt;p&gt;Built-in variants OpenCode ships with default variants for many providers:&lt;/p&gt;&#xA;&lt;p&gt;...&lt;/p&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;footer class=&#34;card-meta&#34;&gt;&#xA;&lt;p&gt;&lt;time class=&#34;dt-published&#34; datetime=&#34;2026-01-13T08:53:36Z&#34;&gt;January 13, 2026&lt;/time&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;card-tags&#34;&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/ai/&#34; class=&#34;tag p-category&#34;&gt;ai&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/llm/&#34; class=&#34;tag p-category&#34;&gt;llm&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/opencode/&#34; class=&#34;tag p-category&#34;&gt;opencode&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;/footer&gt;&#xA;&lt;/article&gt;&#xA;&lt;article class=&#34;card card-link h-entry&#34;&gt;&#xA;&lt;header class=&#34;card-header&#34;&gt;&#xA;&lt;div class=&#34;card-link-wrapper&#34;&gt;&#xA;&lt;div class=&#34;card-link-content&#34;&gt;&#xA;&lt;a href=&#34;/opencode-init-prompt/&#34; class=&#34;card-title p-name u-url&#34;&gt;opencode init prompt&lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/header&gt;&#xA;&lt;div class=&#34;card-body&#34;&gt;&#xA;&lt;div class=&#34;card-excerpt p-summary&#34;&gt;&lt;p&gt;This is opencode’s init prompt.&lt;/p&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;footer class=&#34;card-meta&#34;&gt;&#xA;&lt;p&gt;&lt;time class=&#34;dt-published&#34; datetime=&#34;2026-01-09T13:32:12Z&#34;&gt;January 9, 2026&lt;/time&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;card-tags&#34;&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/llm/&#34; class=&#34;tag p-category&#34;&gt;llm&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;/footer&gt;&#xA;&lt;/article&gt;&#xA;&lt;article class=&#34;card card-link h-entry&#34;&gt;&#xA;&lt;header class=&#34;card-header&#34;&gt;&#xA;&lt;div class=&#34;card-link-wrapper&#34;&gt;&#xA;&lt;div class=&#34;card-link-content&#34;&gt;&#xA;&lt;a href=&#34;/pog/&#34; class=&#34;card-title p-name u-url&#34;&gt;POG&lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/header&gt;&#xA;&lt;div class=&#34;card-body&#34;&gt;&#xA;&lt;div class=&#34;card-excerpt p-summary&#34;&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;/pog/&#34; class=&#34;glossary-term&#34; title=&#34;**: **lay **f the **ame - used to express shock or excitement after a noteworthy moment.&#34;&gt;POG&lt;/a&gt;&lt;/strong&gt;: &lt;strong&gt;P&lt;/strong&gt;lay &lt;strong&gt;O&lt;/strong&gt;f the &lt;strong&gt;G&lt;/strong&gt;ame - used to express shock or excitement after a noteworthy moment.&lt;/p&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;footer class=&#34;card-meta&#34;&gt;&#xA;&lt;p&gt;&lt;time class=&#34;dt-published&#34; datetime=&#34;2026-01-08T20:17:27Z&#34;&gt;January 8, 2026&lt;/time&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;card-tags&#34;&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/glossary/&#34; class=&#34;tag p-category&#34;&gt;glossary&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;/footer&gt;&#xA;&lt;/article&gt;&#xA;&lt;article class=&#34;card card-link h-entry&#34;&gt;&#xA;&lt;header class=&#34;card-header&#34;&gt;&#xA;&lt;div class=&#34;card-link-wrapper&#34;&gt;&#xA;&lt;div class=&#34;card-link-content&#34;&gt;&#xA;&lt;a href=&#34;/til/tpope-vim-speeddating/&#34; class=&#34;card-title p-name u-url&#34;&gt;tpope vim-speeddating&lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/header&gt;&#xA;&lt;div class=&#34;card-body&#34;&gt;&#xA;&lt;div class=&#34;card-excerpt p-summary&#34;&gt;&lt;p&gt;Today I discovered &lt;a href=&#34;https://github.com/tpope/vim-speeddating&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vim-speeddating&lt;/a&gt; by tpope. I’m sure I’ve seen years ago but it did not click for my workflow until today. I often go through pictures from my phone for the past few days and make &lt;a href=&#34;/tags/shots/&#34; class=&#34;wikilink&#34; data-title=&#34;Posts tagged: shots&#34; data-description=&#34;All posts with the tag &amp;#34;shots&amp;#34;&#34; data-preview=&#34;All posts with the tag &amp;#34;shots&amp;#34;&#34;&gt;Posts tagged: shots&lt;/a&gt; posts, but I want to date them to about when the image was taken most of the time. This allows me to quickly bump days up and down using &lt;code&gt;c-a&lt;/code&gt; and &lt;code&gt;c-x&lt;/code&gt; even around the new year.&lt;/p&gt;&#xA;&lt;p&gt;Sound on, listen to those new switches.&lt;/p&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;footer class=&#34;card-meta&#34;&gt;&#xA;&lt;p&gt;&lt;time class=&#34;dt-published&#34; datetime=&#34;2026-01-04T16:59:33Z&#34;&gt;January 4, 2026&lt;/time&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;card-tags&#34;&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/vim/&#34; class=&#34;tag p-category&#34;&gt;vim&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;/footer&gt;&#xA;&lt;/article&gt;&#xA;&lt;article class=&#34;card card-link h-entry&#34;&gt;&#xA;&lt;header class=&#34;card-header&#34;&gt;&#xA;&lt;div class=&#34;card-link-wrapper&#34;&gt;&#xA;&lt;div class=&#34;card-link-content&#34;&gt;&#xA;&lt;a href=&#34;/light-mode-screen-recording-css/&#34; class=&#34;card-title p-name u-url&#34;&gt;light mode screen recording css&lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/header&gt;&#xA;&lt;div class=&#34;card-body&#34;&gt;&#xA;&lt;div class=&#34;card-excerpt p-summary&#34;&gt;&lt;p&gt;Yesterday I wrote about a way to do &lt;a href=&#34;/light-mode-screen-recording/&#34; class=&#34;wikilink&#34; data-title=&#34;light mode screen recording&#34; data-description=&#34;I saw this tip from Cassidoo and had to try it out for myself. I kicked on a screen recording right from where my terminal was, converted it, and it actually...&#34; data-date=&#34;2026-01-01&#34; data-preview=&#34;I saw this tip from Cassidoo and had to try it out for myself. I kicked on a screen recording right from where my terminal was, converted it, and it actually...&#34;&gt;light mode screen recording&lt;/a&gt; to convert to light mode from dark mode with ffmpeg. I was wondering if it could be done entirely on the front end for web applications. Turns out you can. I’m sure there are limited wikis and site builders that don’t allow adding style like this, but it works if you can.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;&amp;lt;video src=&amp;#34;https://dropper.waylonwalker.com/file/1c53dbcb-4b84-4e94-9f04-a42986ab3fa1.mp4?width=800&amp;#34; controls style=&amp;#34;filter: invert(1) hue-rotate(180deg) contrast(1.2) saturate(1.1);&amp;#34; &amp;gt; &amp;lt;/video&amp;gt; &lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;video src=&#34;https://dropper.waylonwalker.com/file/1c53dbcb-4b84-4e94-9f04-a42986ab3fa1.mp4?width=800&#34; controls=&#34;&#34; style=&#34;filter: invert(1) hue-rotate(0deg) contrast(1.2) saturate(1.1);&#34;&gt;&lt;/video&gt;&lt;/p&gt;&#xA;&lt;p&gt;0 deg hue rotate&lt;/p&gt;&#xA;&lt;p&gt;&lt;video src=&#34;https://dropper.waylonwalker.com/file/1c53dbcb-4b84-4e94-9f04-a42986ab3fa1.mp4?width=800&#34; controls=&#34;&#34; style=&#34;filter: invert(1) hue-rotate(90deg) contrast(1.2) saturate(1.1);&#34;&gt;&lt;/video&gt;&lt;/p&gt;&#xA;&lt;p&gt;...&lt;/p&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;footer class=&#34;card-meta&#34;&gt;&#xA;&lt;p&gt;&lt;time class=&#34;dt-published&#34; datetime=&#34;2026-01-02T10:29:10Z&#34;&gt;January 2, 2026&lt;/time&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;card-tags&#34;&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/webdev/&#34; class=&#34;tag p-category&#34;&gt;webdev&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;/footer&gt;&#xA;&lt;/article&gt;&#xA;&lt;article class=&#34;card card-link h-entry&#34;&gt;&#xA;&lt;header class=&#34;card-header&#34;&gt;&#xA;&lt;div class=&#34;card-link-wrapper&#34;&gt;&#xA;&lt;div class=&#34;card-link-content&#34;&gt;&#xA;&lt;a href=&#34;/light-mode-screen-recording/&#34; class=&#34;card-title p-name u-url&#34;&gt;light mode screen recording&lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/header&gt;&#xA;&lt;div class=&#34;card-body&#34;&gt;&#xA;&lt;div class=&#34;card-excerpt p-summary&#34;&gt;&lt;p&gt;I saw this tip from &lt;a href=&#34;https://cassidoo.co/post/ffmpeg-dark-light/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/cassidoo.co.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/cassidoo.co.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Cassidoo&lt;/a&gt; and had to try it out for myself. I kicked on a screen recording right from where my terminal was, converted it, and it actually looks pretty good.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;ffmpeg \ -i screenrecording-2026-01-01_10-10-49.mp4 \ -vf &amp;#34;negate,hue=h=180,eq=contrast=1.2:saturation=1.1&amp;#34; \ screenrecording-2026-01-01_10-10-49-light.mp4 &lt;/code&gt;&lt;/p&gt;&lt;figure&gt; &lt;a href=&#34;https://dropper.waylonwalker.com/file/1c53dbcb-4b84-4e94-9f04-a42986ab3fa1.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/1c53dbcb-4b84-4e94-9f04-a42986ab3fa1.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/1c53dbcb-4b84-4e94-9f04-a42986ab3fa1.mp4&#34; type=&#34;video/mp4&#34;&gt;Your browser does not support the video tag.&lt;/video&gt;&lt;/a&gt; &lt;/figure&gt; &lt;blockquote&gt; &lt;p&gt;Dark Mode&lt;/p&gt;&#xA;&lt;p&gt;Light Mode&lt;/p&gt;&#xA;&lt;p&gt;There are a few unsettling things about it, but overall I feel like it was a success.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;footer class=&#34;card-meta&#34;&gt;&#xA;&lt;p&gt;&lt;time class=&#34;dt-published&#34; datetime=&#34;2026-01-01T10:14:17Z&#34;&gt;January 1, 2026&lt;/time&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;card-tags&#34;&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/ffmpeg/&#34; class=&#34;tag p-category&#34;&gt;ffmpeg&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/dev/&#34; class=&#34;tag p-category&#34;&gt;dev&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;/footer&gt;&#xA;&lt;/article&gt;&#xA;&lt;article class=&#34;card card-link h-entry&#34;&gt;&#xA;&lt;header class=&#34;card-header&#34;&gt;&#xA;&lt;div class=&#34;card-link-wrapper&#34;&gt;&#xA;&lt;div class=&#34;card-link-content&#34;&gt;&#xA;&lt;a href=&#34;/youtube-gemini-is-actually-useful/&#34; class=&#34;card-title p-name u-url&#34;&gt;YouTube Gemini is Actually Useful&lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/header&gt;&#xA;&lt;div class=&#34;card-body&#34;&gt;&#xA;&lt;div class=&#34;card-excerpt p-summary&#34;&gt;&lt;p&gt;I’ve found Gemini to be very useful lately, especially for finding information within long form content.&lt;/p&gt;&#xA;&lt;p&gt;When writing &lt;a href=&#34;https://thoughts.waylonwalker.com/post/896&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/thoughts.waylonwalker.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/thoughts.waylonwalker.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;thought-896&lt;/a&gt;, I wanted to use a direct quote from Jeff Dickey, Gemini popped it out very quickly.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;give me a quote from jeff just before the timestamp I&amp;#39;m at the interviewer asked what makes a good cli and he started talking about stdout/stderr &lt;/code&gt;&lt;/p&gt;&lt;p&gt;In another case, my wife and I are huge Good Eats fans. Alton Brown taught us how to cook during college and on. We watched every single good eats episode nearly 10 years after they aired. He is back with some updates to those those shows on his Youtube. Gemini gives very good detailed responses with timestamps.&lt;/p&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;footer class=&#34;card-meta&#34;&gt;&#xA;&lt;p&gt;&lt;time class=&#34;dt-published&#34; datetime=&#34;2025-12-22T10:09:55Z&#34;&gt;December 22, 2025&lt;/time&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;card-tags&#34;&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/ai/&#34; class=&#34;tag p-category&#34;&gt;ai&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;/footer&gt;&#xA;&lt;/article&gt;&#xA;&lt;article class=&#34;card card-link h-entry&#34;&gt;&#xA;&lt;header class=&#34;card-header&#34;&gt;&#xA;&lt;div class=&#34;card-link-wrapper&#34;&gt;&#xA;&lt;div class=&#34;card-link-content&#34;&gt;&#xA;&lt;a href=&#34;/numbered-posts-in-obsidian/&#34; class=&#34;card-title p-name u-url&#34;&gt;numbered posts in obsidian&lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/header&gt;&#xA;&lt;div class=&#34;card-body&#34;&gt;&#xA;&lt;div class=&#34;card-excerpt p-summary&#34;&gt;&lt;p&gt;I’ve been using this one for awhile now, I have a post type that I only edit from my phone, but I have all the post numbered. I set up a template in obsidian for using templater, the template goes right in the static site repo, I point templater to the templates directory and this has been working pretty seamlessly for awhile.&lt;/p&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;footer class=&#34;card-meta&#34;&gt;&#xA;&lt;p&gt;&lt;time class=&#34;dt-published&#34; datetime=&#34;2025-12-13T22:28:28Z&#34;&gt;December 13, 2025&lt;/time&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;card-tags&#34;&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/obsidian/&#34; class=&#34;tag p-category&#34;&gt;obsidian&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;/footer&gt;&#xA;&lt;/article&gt;&#xA;&lt;article class=&#34;card card-link h-entry&#34;&gt;&#xA;&lt;header class=&#34;card-header&#34;&gt;&#xA;&lt;div class=&#34;card-link-wrapper&#34;&gt;&#xA;&lt;div class=&#34;card-link-content&#34;&gt;&#xA;&lt;a href=&#34;/git-name-status/&#34; class=&#34;card-title p-name u-url&#34;&gt;git name status&lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/header&gt;&#xA;&lt;div class=&#34;card-body&#34;&gt;&#xA;&lt;div class=&#34;card-excerpt p-summary&#34;&gt;&lt;p&gt;&lt;code&gt;--name-status&lt;/code&gt; is a great way to see what files have changed in a git diff alongside the status code. I recently used this in a script to create a report of new and modified files during a build.&lt;/p&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;footer class=&#34;card-meta&#34;&gt;&#xA;&lt;p&gt;&lt;time class=&#34;dt-published&#34; datetime=&#34;2025-12-12T07:53:57Z&#34;&gt;December 12, 2025&lt;/time&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;card-tags&#34;&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/git/&#34; class=&#34;tag p-category&#34;&gt;git&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;/footer&gt;&#xA;&lt;/article&gt;&#xA;&lt;article class=&#34;card card-link h-entry&#34;&gt;&#xA;&lt;header class=&#34;card-header&#34;&gt;&#xA;&lt;div class=&#34;card-link-wrapper&#34;&gt;&#xA;&lt;div class=&#34;card-link-content&#34;&gt;&#xA;&lt;a href=&#34;/minecraft-server-memory/&#34; class=&#34;card-title p-name u-url&#34;&gt;minecraft server memory&lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/header&gt;&#xA;&lt;div class=&#34;card-body&#34;&gt;&#xA;&lt;div class=&#34;card-excerpt p-summary&#34;&gt;&lt;p&gt;I learned to today that setting &lt;code&gt;MEMORY&lt;/code&gt; on your minecraft server causes the JVM to egregiously allocate all of that memory. Not setting it causes slow downs and potential crashes, but setting &lt;code&gt;INIT_MEMORY&lt;/code&gt; and &lt;code&gt;MAX_MEMORY&lt;/code&gt; gives us the best of both worlds. It is allowed to use more, but does not gobble it all up on startup.&lt;/p&gt;&#xA;&lt;p&gt;In this economy we need to save all the memory we can!&lt;/p&gt;&#xA;&lt;p&gt;Here is a non-working snippet for a minecraft server deployment in kubernetes.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt; containers: - name: dungeon image: itzg/minecraft-server env: - name: EULA value: &amp;#34;true&amp;#34; - name: INIT_MEMORY value: &amp;#34;512M&amp;#34; - name: MAX_MEMORY value: &amp;#34;3G&amp;#34; &lt;/code&gt;&lt;/p&gt;&lt;p&gt;and in docker compose&lt;/p&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;footer class=&#34;card-meta&#34;&gt;&#xA;&lt;p&gt;&lt;time class=&#34;dt-published&#34; datetime=&#34;2025-12-10T08:46:36Z&#34;&gt;December 10, 2025&lt;/time&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;card-tags&#34;&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/kubernetes/&#34; class=&#34;tag p-category&#34;&gt;kubernetes&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/compose/&#34; class=&#34;tag p-category&#34;&gt;compose&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/docker/&#34; class=&#34;tag p-category&#34;&gt;docker&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/homelab/&#34; class=&#34;tag p-category&#34;&gt;homelab&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/minecraft/&#34; class=&#34;tag p-category&#34;&gt;minecraft&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;/footer&gt;&#xA;&lt;/article&gt;&#xA;&lt;article class=&#34;card card-link h-entry&#34;&gt;&#xA;&lt;header class=&#34;card-header&#34;&gt;&#xA;&lt;div class=&#34;card-link-wrapper&#34;&gt;&#xA;&lt;div class=&#34;card-link-content&#34;&gt;&#xA;&lt;a href=&#34;/og/&#34; class=&#34;card-title p-name u-url&#34;&gt;og&lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/header&gt;&#xA;&lt;div class=&#34;card-body&#34;&gt;&#xA;&lt;div class=&#34;card-excerpt p-summary&#34;&gt;&lt;p&gt;&lt;a href=&#34;/og/&#34; class=&#34;glossary-term&#34; title=&#34;OG is short for open graph, a set of standard meta tags that are used for social media sharing. This is what tells other websites how to describe and display...&#34;&gt;OG&lt;/a&gt; is short for open graph, a set of standard meta tags that are used for social media sharing. This is what tells other websites how to describe and display your site when shared on social media, text messages, or discord.&lt;/p&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;footer class=&#34;card-meta&#34;&gt;&#xA;&lt;p&gt;&lt;time class=&#34;dt-published&#34; datetime=&#34;2025-12-09T12:49:21Z&#34;&gt;December 9, 2025&lt;/time&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;card-tags&#34;&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/blog/&#34; class=&#34;tag p-category&#34;&gt;blog&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;/footer&gt;&#xA;&lt;/article&gt;&#xA;&lt;article class=&#34;card card-link h-entry&#34;&gt;&#xA;&lt;header class=&#34;card-header&#34;&gt;&#xA;&lt;div class=&#34;card-link-wrapper&#34;&gt;&#xA;&lt;div class=&#34;card-link-content&#34;&gt;&#xA;&lt;a href=&#34;/web-snow-fall/&#34; class=&#34;card-title p-name u-url&#34;&gt;web snow fall&lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/header&gt;&#xA;&lt;div class=&#34;card-body&#34;&gt;&#xA;&lt;div class=&#34;card-excerpt p-summary&#34;&gt;&lt;p&gt;I found snow-fall component from &lt;a href=&#34;https://www.zachleat.com/web/snow-fall/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.zachleat.com.jpg&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.zachleat.com.jpg&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;zachleat&lt;/a&gt;, and its beautiful… to me. I like the way it looks, its simple and whimsical.&lt;/p&gt;&#xA;&lt;p&gt;There is an npm package &lt;code&gt;&lt;a href=&#34;https://zachleat.com&#34; class=&#34;mention  has-avatar has-avatar-before&#34; data-name=&#34;Zach Leatherman&#34; data-bio=&#34;A post by Zach Leatherman (zachleat)&#34; data-avatar=&#34;https://screenshot.11ty.app/https%3A%2F%2Fwww.zachleat.com%2F%3Fcache%3D_20251031/opengraph/&#34; data-handle=&#34;@zachleat&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/zachleat.com.jpg&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/zachleat.com.jpg&#34;&gt;@zachleat&lt;/a&gt;/snow-fall&lt;/code&gt; if that’s your thing. I like vendoring in small things like this.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;curl -o static/snow-fall.js https://raw.githubusercontent.com/zachleat/snow-fall/refs/heads/main/snow-fall.js &lt;/code&gt;&lt;/p&gt;&lt;p&gt;I generally save it in my justfile so that I remember how I got it and how to update…. yaya I could use npm, but I don’t for no build sites.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;get-snowfall: curl -o static/snow-fall.js https://raw.githubusercontent.com/zachleat/snow-fall/refs/heads/main/snow-fall.js &lt;/code&gt;&lt;/p&gt;&lt;h2 id=&#34;usage&#34;&gt;Usage &lt;a href=&#34;#usage&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Now add the component to your page.&lt;/p&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;footer class=&#34;card-meta&#34;&gt;&#xA;&lt;p&gt;&lt;time class=&#34;dt-published&#34; datetime=&#34;2025-12-09T10:21:17Z&#34;&gt;December 9, 2025&lt;/time&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;card-tags&#34;&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/webdev/&#34; class=&#34;tag p-category&#34;&gt;webdev&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;/footer&gt;&#xA;&lt;/article&gt;&#xA;&lt;article class=&#34;card card-link h-entry&#34;&gt;&#xA;&lt;header class=&#34;card-header&#34;&gt;&#xA;&lt;div class=&#34;card-link-wrapper&#34;&gt;&#xA;&lt;div class=&#34;card-link-content&#34;&gt;&#xA;&lt;a href=&#34;/check-your-kubeconfig-expire-time/&#34; class=&#34;card-title p-name u-url&#34;&gt;check your kubeconfig expire time&lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/header&gt;&#xA;&lt;div class=&#34;card-body&#34;&gt;&#xA;&lt;div class=&#34;card-excerpt p-summary&#34;&gt;&lt;p&gt;Today I learned an important lesson that you should periodically check on your kubeconfigs expiration date. It’s easy to do. You can ask for the client-certificate-data from your kubeconfig, decode it, and use openssl to get the expiration date.&lt;/p&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;footer class=&#34;card-meta&#34;&gt;&#xA;&lt;p&gt;&lt;time class=&#34;dt-published&#34; datetime=&#34;2025-12-08T20:59:27Z&#34;&gt;December 8, 2025&lt;/time&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;card-tags&#34;&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tags/kubenetes/&#34; class=&#34;tag p-category&#34;&gt;kubenetes&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;/footer&gt;&#xA;&lt;/article&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Waiting For My Weekly Token Allowance</title>
    <id>https://waylonwalker.com/shots/waiting-for-my-weekly-token-allowance/</id>
    <updated>2026-02-28T11:28:24Z</updated>
    <published>2026-02-28T11:28:24Z</published>
    <link href="https://waylonwalker.com/shots/waiting-for-my-weekly-token-allowance/" rel="alternate" type="text/html"></link>
    <summary type="text">Openai gives me a token allowance for my $20 tier subscription, if I&#39;m careful it lasts a few days of heavy side project work.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.wayl.one/file/818c2d71-521a-4286-a831-cccec1f9b82b.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.wayl.one/file/818c2d71-521a-4286-a831-cccec1f9b82b.webp&#34; alt=&#34;Waiting for my weekly token allowance&#34;/ data-glightbox=&#34;description: Waiting for my weekly token allowance&#34;&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;Openai gives me a token allowance for my $20 tier subscription, if I’m careful it lasts a few days of heavy side project work.&lt;/p&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.wayl.one/file/59a85775-c597-42f9-95be-28f250d4e72b.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.wayl.one/file/59a85775-c597-42f9-95be-28f250d4e72b.webp&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;Opencode Zen out of tokens&lt;/p&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.wayl.one/file/35052eef-9b3d-41ab-8d99-ed30f5015442.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.wayl.one/file/35052eef-9b3d-41ab-8d99-ed30f5015442.webp&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;Openai out of tokens&lt;/p&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Kohei-Wada taskdog</title>
    <id>https://waylonwalker.com/kohei-wada-taskdog/</id>
    <updated>2026-02-27T21:08:43Z</updated>
    <published>2026-02-27T21:08:43Z</published>
    <link href="https://waylonwalker.com/kohei-wada-taskdog/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred taskdog by Kohei-Wada. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/Kohei-Wada/taskdog&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;taskdog&lt;/a&gt; by &lt;a href=&#34;https://github.com/Kohei-Wada&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Kohei-Wada&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;Terminal task manager with intelligent schedule optimization.Keyboard-only. No dragging, no micromanagement.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>The Ghostty Guy</title>
    <id>https://waylonwalker.com/ping-24/</id>
    <updated>2026-02-26T18:49:39Z</updated>
    <published>2026-02-26T18:49:39Z</published>
    <link href="https://waylonwalker.com/ping-24/" rel="alternate" type="text/html"></link>
    <summary type="text">I was today years old when I realized that the ghostty guy is the Hashicorp guy.</summary>
    <content type="html">&lt;p&gt;I was today years old when I realized that the ghostty guy is the Hashicorp guy.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ torvalds linux</title>
    <id>https://waylonwalker.com/torvalds-linux/</id>
    <updated>2026-02-25T16:09:09Z</updated>
    <published>2026-02-25T16:09:09Z</published>
    <link href="https://waylonwalker.com/torvalds-linux/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred linux by torvalds. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/torvalds/linux&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;linux&lt;/a&gt; by &lt;a href=&#34;https://github.com/torvalds&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;torvalds&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;Linux kernel source tree&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Dropper Just Got The Clip Editor I&#39;ve Dreamed Of</title>
    <id>https://waylonwalker.com/shots/dropper-just-got-the-clip-editor-i&#39;ve-dreamed-of/</id>
    <updated>2026-02-24T21:33:37Z</updated>
    <published>2026-02-24T21:33:37Z</published>
    <link href="https://waylonwalker.com/shots/dropper-just-got-the-clip-editor-i&#39;ve-dreamed-of/" rel="alternate" type="text/html"></link>
    <summary type="text">Editing a Session Skate Sim clip inside of dropper with trim, scrub, and crop.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.wayl.one/file/63be6ed0-3265-4d6a-b5c7-7aa61838b3ba.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.wayl.one/file/63be6ed0-3265-4d6a-b5c7-7aa61838b3ba.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.wayl.one/file/63be6ed0-3265-4d6a-b5c7-7aa61838b3ba.mp4&#34; type=&#34;video/mp4&#34;&gt;dropper just got the clip editor I’ve dreamed of&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Editing a Session Skate Sim clip inside of dropper with trim, scrub, and crop.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Dropper Gets Video Thumbnail Upgrade</title>
    <id>https://waylonwalker.com/shots/dropper-gets-video-thumbnail-upgrade/</id>
    <updated>2026-02-24T21:16:54Z</updated>
    <published>2026-02-24T21:16:54Z</published>
    <link href="https://waylonwalker.com/shots/dropper-gets-video-thumbnail-upgrade/" rel="alternate" type="text/html"></link>
    <summary type="text">In the video clip you can see me reload into the latest version of dropper that supports video thumbnails, turning those unknown clips into a collection I can recognize.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.wayl.one/file/3c8ef069-be64-4e80-b386-c9463830a0d6.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.wayl.one/file/3c8ef069-be64-4e80-b386-c9463830a0d6.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.wayl.one/file/3c8ef069-be64-4e80-b386-c9463830a0d6.mp4&#34; type=&#34;video/mp4&#34;&gt;Dropper gets video thumbnail upgrade&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In the video clip you can see me reload into the latest version of dropper that supports video thumbnails, turning those unknown clips into a collection I can recognize.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>/verify</title>
    <id>https://waylonwalker.com/verify/</id>
    <updated>2026-02-24T10:36:57Z</updated>
    <published>2026-02-24T10:36:57Z</published>
    <link href="https://waylonwalker.com/verify/" rel="alternate" type="text/html"></link>
    <summary type="text">Inspired by @mollywhite&#39;s verify slashpage. This page serves as the system of record for my online identity. The best places to follow me are:</summary>
    <content type="html">&lt;p&gt;Inspired by @mollywhite’s&#xA;&lt;a href=&#34;https://mollywhite.net/verify/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/mollywhite.net.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/mollywhite.net.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;verify&lt;/a&gt; &lt;a href=&#34;https://slashpages.net&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/slashpages.net.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/slashpages.net.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;slashpage&lt;/a&gt;.&#xA;This page serves as the system of record for my online identity. The best&#xA;places to follow me are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;My Website: &lt;a href=&#34;https://waylonwalker.com&#34;&gt;waylonwalker.com&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;YouTube: &lt;a href=&#34;https://youtube.com/waylonwalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Waylon Walker&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;YouTube Gaming: &lt;a href=&#34;https://www.youtube.com/channel/UCHuxc1HRsd3aRjvL6C817tQ&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Waylon Walker Gaming&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Twitch: &lt;a href=&#34;https://www.twitch.tv/waylonwalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.twitch.tv.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.twitch.tv.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Waylon Walker&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Twitter: &lt;a href=&#34;https://twitter.com/_WaylonWalker&#34;&gt;@_WaylonWalker&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;LinkedIn: &lt;a href=&#34;https://www.linkedin.com/in/waylonwalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.linkedin.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.linkedin.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Waylon Walker&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;GitHub: &lt;a href=&#34;https://github.com/WaylonWalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;WaylonWalker&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Dev.to: &lt;a href=&#34;https://dev.to/waylonwalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/dev.to.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/dev.to.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Waylon Walker&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Bluesky: &lt;a href=&#34;https://bsky.app/profile/waylonwalker.com&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/bsky.app.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/bsky.app.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;@waylonwalker.com&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Gma Silk Fail1</title>
    <id>https://waylonwalker.com/shots/gma-silk-fail1/</id>
    <updated>2026-02-23T17:52:50Z</updated>
    <published>2026-02-23T17:52:50Z</published>
    <link href="https://waylonwalker.com/shots/gma-silk-fail1/" rel="alternate" type="text/html"></link>
    <summary type="text">Gma Silk Fail1</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/21e82f95-c53b-449b-858d-c66c375b38e8.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/21e82f95-c53b-449b-858d-c66c375b38e8.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/21e82f95-c53b-449b-858d-c66c375b38e8.mp4&#34; type=&#34;video/mp4&#34;&gt;Gma Silk Fail1&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Gma Silk Fail1&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Post Lace2 Dream</title>
    <id>https://waylonwalker.com/shots/post-lace2-dream/</id>
    <updated>2026-02-23T17:51:06Z</updated>
    <published>2026-02-23T17:51:06Z</published>
    <link href="https://waylonwalker.com/shots/post-lace2-dream/" rel="alternate" type="text/html"></link>
    <summary type="text">Post Lace2 Dream</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/03cd8071-33ee-4280-a4e4-4a5df382d627.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/03cd8071-33ee-4280-a4e4-4a5df382d627.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/03cd8071-33ee-4280-a4e4-4a5df382d627.mp4&#34; type=&#34;video/mp4&#34;&gt;Post Lace2 Dream&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Post Lace2 Dream&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Lace2</title>
    <id>https://waylonwalker.com/shots/lace2/</id>
    <updated>2026-02-23T17:48:56Z</updated>
    <published>2026-02-23T17:48:56Z</published>
    <link href="https://waylonwalker.com/shots/lace2/" rel="alternate" type="text/html"></link>
    <summary type="text">Lace2</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/e325282a-d50a-4f85-9e08-634bc0faca74.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/e325282a-d50a-4f85-9e08-634bc0faca74.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/e325282a-d50a-4f85-9e08-634bc0faca74.mp4&#34; type=&#34;video/mp4&#34;&gt;Lace2&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Lace2&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Thoughts Cluster Looks Like A Flower</title>
    <id>https://waylonwalker.com/shots/thoughts-cluster-looks-like-a-flower/</id>
    <updated>2026-02-21T15:49:25Z</updated>
    <published>2026-02-21T15:49:25Z</published>
    <link href="https://waylonwalker.com/shots/thoughts-cluster-looks-like-a-flower/" rel="alternate" type="text/html"></link>
    <summary type="text">My thoughts connections made an interesting flower layout.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/5e7ccf2b-bf88-4e1e-ae39-e4a9fc718083.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/5e7ccf2b-bf88-4e1e-ae39-e4a9fc718083.webp&#34; alt=&#34;Thoughts cluster looks like a flower&#34;/ data-glightbox=&#34;description: Thoughts cluster looks like a flower&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;My thoughts connections made an interesting flower layout.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Happy Valentines Breakfast 2026</title>
    <id>https://waylonwalker.com/shots/happy-valentines-breakfast-2026/</id>
    <updated>2026-02-14T19:26:30Z</updated>
    <published>2026-02-14T19:26:30Z</published>
    <link href="https://waylonwalker.com/shots/happy-valentines-breakfast-2026/" rel="alternate" type="text/html"></link>
    <summary type="text">A one eye&#39;d pirate (egg in toast) in the shape of a heart for Ayla.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/48c9dfa2-326c-42eb-ae17-78887fa0146c.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/48c9dfa2-326c-42eb-ae17-78887fa0146c.webp&#34; alt=&#34;Happy Valentines Breakfast 2026&#34;/ data-glightbox=&#34;description: Happy Valentines Breakfast 2026&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A one eye’d pirate (egg in toast) in the shape of a heart for Ayla.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/f0233aa3-175c-45e0-8e96-c2628ab55f1a.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/f0233aa3-175c-45e0-8e96-c2628ab55f1a.webp&#34; alt=&#34;Prepped bread for the heart shaped one eye’d pirate&#34;/ data-glightbox=&#34;description: Prepped bread for the heart shaped one eye’d pirate&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Ayla helped with the ideation and the Prep work.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>New Fast Mode In Markata-Go Is Fun</title>
    <id>https://waylonwalker.com/shots/new-fast-mode-in-markata-go-is-fun/</id>
    <updated>2026-02-14T19:25:04Z</updated>
    <published>2026-02-14T19:25:04Z</published>
    <link href="https://waylonwalker.com/shots/new-fast-mode-in-markata-go-is-fun/" rel="alternate" type="text/html"></link>
    <summary type="text">Swapping themes with the theme picker cli and watching the output change within about 1-2s live reloaded in the browser.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/6676ab86-02a2-4596-8ce9-9af34a98eda3.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/6676ab86-02a2-4596-8ce9-9af34a98eda3.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/6676ab86-02a2-4596-8ce9-9af34a98eda3.mp4&#34; type=&#34;video/mp4&#34;&gt;New fast mode in markata-go is fun&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Swapping themes with the theme picker cli and watching the output change within about 1-2s live reloaded in the browser.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>double gutter</title>
    <id>https://waylonwalker.com/double-gutter/</id>
    <updated>2026-02-14T09:12:42Z</updated>
    <published>2026-02-14T09:12:42Z</published>
    <link href="https://waylonwalker.com/double-gutter/" rel="alternate" type="text/html"></link>
    <summary type="text">I keep forgetting about the double gutter problem with nested containers. When you put padding on a parent and the child also has padding, you get twice the...</summary>
    <content type="html">&lt;p&gt;I keep forgetting about the double gutter problem with nested containers.  When&#xA;you put padding on a parent and the child also has padding, you get twice the&#xA;spacing you wanted.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-problem&#34;&gt;The Problem &lt;a href=&#34;#the-problem&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;container&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;padding&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;child&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;padding&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now your content is 4rem from the edge.  Not what I meant at all.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-fix&#34;&gt;The Fix &lt;a href=&#34;#the-fix&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Either remove padding from the parent or use &lt;code&gt;box-sizing: border-box&lt;/code&gt; and plan&#xA;for it.  I usually just drop the parent padding when I realize what I have done.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>First W In Brotato</title>
    <id>https://waylonwalker.com/first-w-in-brotato/</id>
    <updated>2026-02-11T20:48:08Z</updated>
    <published>2026-02-11T20:48:08Z</published>
    <link href="https://waylonwalker.com/first-w-in-brotato/" rel="alternate" type="text/html"></link>
    <summary type="text">After having brotato and doing a few runs every once in a while I ** beat the most basic balanced run in the game! Wyatt wanted to play tonight and its such...</summary>
    <content type="html">&lt;p&gt;After having brotato and doing a few runs every once in a while I &lt;strong&gt;finally&lt;/strong&gt;&#xA;beat the most basic balanced run in the game!  Wyatt wanted to play tonight and&#xA;its such an easy game to jump in do a few runs and move on without getting&#xA;overly invested.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/07c87b1d-60a0-4527-a045-d4203ca929db.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/07c87b1d-60a0-4527-a045-d4203ca929db.webp&#34; alt=&#34;I almost died&#34;/ data-glightbox=&#34;description: I almost died&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Watching back I cannot believe how lucky I got, barely scraping by with 1hp at this point&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/f1711b94-dad1-4f97-b6ac-1de34db4a779.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/f1711b94-dad1-4f97-b6ac-1de34db4a779.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/f1711b94-dad1-4f97-b6ac-1de34db4a779.mp4&#34; type=&#34;video/mp4&#34;&gt;Your browser does not support the video tag.&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;the last 80s of the game&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/9b108e98-1f43-4b94-8824-467abcbf9e54.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/9b108e98-1f43-4b94-8824-467abcbf9e54.webp&#34; alt=&#34;Winning Loadout&#34;/ data-glightbox=&#34;description: Winning Loadout&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Brotato Balanced Win</title>
    <id>https://waylonwalker.com/shots/brotato-balanced-win/</id>
    <updated>2026-02-11T20:47:48Z</updated>
    <published>2026-02-11T20:47:48Z</published>
    <link href="https://waylonwalker.com/shots/brotato-balanced-win/" rel="alternate" type="text/html"></link>
    <summary type="text">Taking the W in a brotato run</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/f1711b94-dad1-4f97-b6ac-1de34db4a779.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/f1711b94-dad1-4f97-b6ac-1de34db4a779.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/f1711b94-dad1-4f97-b6ac-1de34db4a779.mp4&#34; type=&#34;video/mp4&#34;&gt;Brotato Balanced Win&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Taking the W in a brotato run&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>/top4</title>
    <id>https://waylonwalker.com/top4/</id>
    <updated>2026-02-11T14:00:00Z</updated>
    <published>2026-02-11T14:00:00Z</published>
    <link href="https://waylonwalker.com/top4/" rel="alternate" type="text/html"></link>
    <summary type="text">Definitive ranked lists of my top 3 favorites plus an honorable mention.</summary>
    <content type="html">&lt;p&gt;Definitive ranked lists of my top 3 favorites plus an honorable mention.&lt;/p&gt;&#xA;&lt;h2 id=&#34;terminal-tools&#34;&gt;Terminal Tools &lt;a href=&#34;#terminal-tools&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://neovim.io/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/neovim.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/neovim.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;neovim&lt;/a&gt;&lt;/strong&gt; - modal editing changed how I think about text&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://tmux.github.io/&#34;&gt;tmux&lt;/a&gt;&lt;/strong&gt; - terminal sessions that survive disconnects and allow me to hop between projects at the speed of thought.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://k9scli.io/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/k9scli.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/k9scli.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;k9s&lt;/a&gt;&lt;/strong&gt; - S tier tui interface that all tuis should strive for&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;Honorable mention:&lt;/strong&gt; &lt;a href=&#34;https://ipython.org/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/ipython.org.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/ipython.org.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ipython&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;python-tools&#34;&gt;Python Tools &lt;a href=&#34;#python-tools&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://pandas.pydata.org/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/pandas.pydata.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/pandas.pydata.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pandas&lt;/a&gt;&lt;/strong&gt; - This is what got me out of corporate spreadsheets and back into code/software.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://kedro.org/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro&lt;/a&gt;&lt;/strong&gt; - data pipelines with opinions I agree with&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://fastapi.tiangolo.com/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/fastapi.tiangolo.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/fastapi.tiangolo.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fastapi&lt;/a&gt;&lt;/strong&gt; - my favorite python web framework&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;Honorable mention:&lt;/strong&gt; &lt;a href=&#34;https://typer.tiangolo.com/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/typer.tiangolo.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/typer.tiangolo.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;typer&lt;/a&gt; - fast cli apps&lt;/p&gt;&#xA;&lt;h2 id=&#34;games-to-play-with-kids&#34;&gt;Games to Play with Kids &lt;a href=&#34;#games-to-play-with-kids&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;multiplayer&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://minecraft.net/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/minecraft.net.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/minecraft.net.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Minecraft&lt;/a&gt;&lt;/strong&gt; - infinite creativity, modding potential&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://store.steampowered.com/app/1211020/Wobbly_Life/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/store.steampowered.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/store.steampowered.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Wobbly Life&lt;/a&gt;&lt;/strong&gt; - Open World Co-op&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://www.stardewvalley.net/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.stardewvalley.net.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.stardewvalley.net.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Stardew Valley&lt;/a&gt;&lt;/strong&gt; - cozy, collaborative farming&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;Honorable mention:&lt;/strong&gt; &lt;a href=&#34;https://www.terraria.org/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.terraria.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.terraria.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Terraria&lt;/a&gt; - 2d world builder&lt;/p&gt;&#xA;&lt;h2 id=&#34;games-to-play-alone&#34;&gt;Games to Play Alone &lt;a href=&#34;#games-to-play-alone&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;singleplayer&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://www.hollowknight.com/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.hollowknight.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.hollowknight.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Hollow Knight&lt;/a&gt;/&lt;a href=&#34;https://hollowknightsilksong.com/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/hollowknightsilksong.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/hollowknightsilksong.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Hollow Knight Silksong&lt;/a&gt;&lt;/strong&gt; - S tier 2d platformer with adventure, mystery, lore, boss fights.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://store.steampowered.com/app/861650/Session_Skate_Sim/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/store.steampowered.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/store.steampowered.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Session Skate Sim&lt;/a&gt;&lt;/strong&gt; - The best skate sim&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;a href=&#34;https://www.animalwell.net/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.animalwell.net.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.animalwell.net.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Animal Well&lt;/a&gt;&lt;/strong&gt; - epic 2d platformer with the most incredible graphics at 320p ever created and the deepest puzzles Ive seen&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;Honorable mention:&lt;/strong&gt; &lt;a href=&#34;https://store.steampowered.com/app/400/Portal/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/store.steampowered.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/store.steampowered.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Portal&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Inspired by &lt;a href=&#34;https://topfour.net&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/topfour.net.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/topfour.net.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;topfour.net&lt;/a&gt; and &lt;a href=&#34;https://slashpages.net&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/slashpages.net.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/slashpages.net.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;slashpages.net&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>/yep</title>
    <id>https://waylonwalker.com/yep/</id>
    <updated>2026-02-11T12:00:00Z</updated>
    <published>2026-02-11T12:00:00Z</published>
    <link href="https://waylonwalker.com/yep/" rel="alternate" type="text/html"></link>
    <summary type="text">Inspired by @fyrio&#39;s yep slashpage, a list of ** things I enjoy, use, recommend, want to know more about, or seek out in no particular order, updated as I...</summary>
    <content type="html">&lt;p&gt;Inspired by @fyrio’s &lt;a href=&#34;https://fyr.io/yep&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/fyr.io.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/fyr.io.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;yep&lt;/a&gt;&#xA;&lt;a href=&#34;https://slashpages.net/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/slashpages.net.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/slashpages.net.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;slashpage&lt;/a&gt;, a list of &lt;strong&gt;S tier&lt;/strong&gt; things I enjoy, use,&#xA;recommend, want to know more about, or seek out in no particular order, updated as I think about it.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition seealso&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Seealso&lt;/p&gt;&#xA;&lt;div class=&#34;embed-card&#34;&gt;&#xA;&lt;/div&gt;&#xA;  &lt;a href=&#34;/nope/&#34; class=&#34;embed-card-link&#34;&gt;&#xA;    &lt;/a&gt;&lt;div class=&#34;embed-card-content&#34;&gt;&lt;a href=&#34;/nope/&#34; class=&#34;embed-card-link&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;/nope&lt;/div&gt;&#xA;      &lt;/a&gt;&lt;div class=&#34;embed-card-description&#34;&gt;&lt;a href=&#34;/nope/&#34; class=&#34;embed-card-link&#34;&gt;Inspired by &lt;/a&gt;&lt;a href=&#34;https://baty.net/&#34; class=&#34;mention&#34; data-name=&#34;baty.net&#34; data-bio=&#34;Jack Baty&amp;amp;#39;s blog — posts, journal, notes.&#34; data-avatar=&#34;https://baty.net/img/opengraph.jpg&#34; data-handle=&#34;@baty&#34;&gt;@baty&lt;/a&gt;&amp;#39;s nope slashpage, a list of ** things I don&amp;#39;t like, don&amp;#39;t care, avoid, overhyped, or won&amp;#39;t do in no particular order, updated as I think...&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;Feb 11, 2026&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;yep&#34;&gt;/yep &lt;a href=&#34;#yep&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;coffee&lt;/li&gt;&#xA;&lt;li&gt;small web 1.0&lt;/li&gt;&#xA;&lt;li&gt;RSS&lt;/li&gt;&#xA;&lt;li&gt;minecraft&lt;/li&gt;&#xA;&lt;li&gt;Hollow Knight&lt;/li&gt;&#xA;&lt;li&gt;Silksong&lt;/li&gt;&#xA;&lt;li&gt;terminals&lt;/li&gt;&#xA;&lt;li&gt;python&lt;/li&gt;&#xA;&lt;li&gt;vim keybindings&lt;/li&gt;&#xA;&lt;li&gt;self-hosting&lt;/li&gt;&#xA;&lt;li&gt;open source&lt;/li&gt;&#xA;&lt;li&gt;running kubernetes in my basement&lt;/li&gt;&#xA;&lt;li&gt;mechanical keyboards&lt;/li&gt;&#xA;&lt;li&gt;markdown&lt;/li&gt;&#xA;&lt;li&gt;data engineering&lt;/li&gt;&#xA;&lt;li&gt;Woodworking&lt;/li&gt;&#xA;&lt;li&gt;Fingerboarding&lt;/li&gt;&#xA;&lt;li&gt;Darts&lt;/li&gt;&#xA;&lt;li&gt;Skateboarding&lt;/li&gt;&#xA;&lt;li&gt;Biking&lt;/li&gt;&#xA;&lt;li&gt;Trampoline&lt;/li&gt;&#xA;&lt;li&gt;3d printing&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>/nope</title>
    <id>https://waylonwalker.com/nope/</id>
    <updated>2026-02-11T12:00:00Z</updated>
    <published>2026-02-11T12:00:00Z</published>
    <link href="https://waylonwalker.com/nope/" rel="alternate" type="text/html"></link>
    <summary type="text">Inspired by @baty&#39;s nope slashpage, a list of ** things I don&#39;t like, don&#39;t care, avoid, overhyped, or won&#39;t do in no particular order, updated as I think...</summary>
    <content type="html">&lt;p&gt;Inspired by &lt;a href=&#34;https://baty.net/&#34; class=&#34;mention&#34; data-name=&#34;baty.net&#34; data-bio=&#34;Jack Baty&amp;amp;#39;s blog — posts, journal, notes.&#34; data-avatar=&#34;https://baty.net/img/opengraph.jpg&#34; data-handle=&#34;@baty&#34;&gt;@baty&lt;/a&gt;’s &lt;a href=&#34;https://baty.net/nope/&#34;&gt;nope&lt;/a&gt;&#xA;&lt;a href=&#34;https://slashpages.net/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/slashpages.net.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/slashpages.net.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;slashpage&lt;/a&gt;, a list of &lt;strong&gt;F tier&lt;/strong&gt; things I don’t like,&#xA;don’t care, avoid, overhyped, or won’t do in no particular order, updated as I&#xA;think about it.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition seealso&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Seealso&lt;/p&gt;&#xA;&lt;div class=&#34;embed-card&#34;&gt;&#xA;&lt;/div&gt;&#xA;  &lt;a href=&#34;/yep/&#34; class=&#34;embed-card-link&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;/yep&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;Inspired by @fyrio&amp;#39;s yep slashpage, a list of ** things I enjoy, use, recommend, want to know more about, or seek out in no particular order, updated as I...&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;Feb 11, 2026&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;nope&#34;&gt;/nope &lt;a href=&#34;#nope&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;roblox&lt;/li&gt;&#xA;&lt;li&gt;mobile games&lt;/li&gt;&#xA;&lt;li&gt;telemetry&lt;/li&gt;&#xA;&lt;li&gt;Windows&lt;/li&gt;&#xA;&lt;li&gt;VSCode&lt;/li&gt;&#xA;&lt;li&gt;allow notifications&lt;/li&gt;&#xA;&lt;li&gt;subscription hell&lt;/li&gt;&#xA;&lt;li&gt;ads&lt;/li&gt;&#xA;&lt;li&gt;social media&lt;/li&gt;&#xA;&lt;li&gt;clickbait&lt;/li&gt;&#xA;&lt;li&gt;WYSIWYG editors particularly ones that use proprietary non text formats&lt;/li&gt;&#xA;&lt;li&gt;politics&lt;/li&gt;&#xA;&lt;li&gt;short form video&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pydantic monty</title>
    <id>https://waylonwalker.com/pydantic-monty/</id>
    <updated>2026-02-09T03:53:14Z</updated>
    <published>2026-02-09T03:53:14Z</published>
    <link href="https://waylonwalker.com/pydantic-monty/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out monty by pydantic. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/pydantic/monty&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;monty&lt;/a&gt; by &lt;a href=&#34;https://github.com/pydantic&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pydantic&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;A minimal, secure Python interpreter written in Rust for use by AI&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Gradient Keycap Results</title>
    <id>https://waylonwalker.com/shots/gradient-keycap-results/</id>
    <updated>2026-02-07T19:55:55Z</updated>
    <published>2026-02-07T19:55:55Z</published>
    <link href="https://waylonwalker.com/shots/gradient-keycap-results/" rel="alternate" type="text/html"></link>
    <summary type="text">The gradient keycaps turned out pretty good, but I&#39;m not sure what I did wrong with the interface between the raft and the caps, that came out ** rough, but the effect works.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/42e82c07-5380-45a8-8cbd-a1b642dbfb3b.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/42e82c07-5380-45a8-8cbd-a1b642dbfb3b.webp&#34; alt=&#34;gradient keycap results&#34;/ data-glightbox=&#34;description: gradient keycap results&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The gradient keycaps turned out pretty good, but I’m not sure what I did wrong with the interface between the raft and the caps, that came out &lt;strong&gt;very&lt;/strong&gt; rough, but the effect works.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Camp Rock Sign</title>
    <id>https://waylonwalker.com/shots/camp-rock-sign/</id>
    <updated>2026-02-07T19:51:35Z</updated>
    <published>2026-02-07T19:51:35Z</published>
    <link href="https://waylonwalker.com/shots/camp-rock-sign/" rel="alternate" type="text/html"></link>
    <summary type="text">Camp Rock Sign all put together, by the fabulous Rhiannon, the letters came out great, her work on the built is amazing, cant wait to see it lit up.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/5d9ceac4-8f43-49bf-8bde-2a67dca7cc58.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/5d9ceac4-8f43-49bf-8bde-2a67dca7cc58.webp&#34; alt=&#34;Camp Rock Sign&#34;/ data-glightbox=&#34;description: Camp Rock Sign&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Camp Rock Sign all put together, by the fabulous Rhiannon, the letters came out great, her work on the built is amazing, cant wait to see it lit up.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nextlevelbuilder ui-ux-pro-max-skill</title>
    <id>https://waylonwalker.com/nextlevelbuilder-ui-ux-pro-max-skill/</id>
    <updated>2026-02-06T20:18:21Z</updated>
    <published>2026-02-06T20:18:21Z</published>
    <link href="https://waylonwalker.com/nextlevelbuilder-ui-ux-pro-max-skill/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out nextlevelbuilder and their project ui-ux-pro-max-skill.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/nextlevelbuilder&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nextlevelbuilder&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/nextlevelbuilder/ui-ux-pro-max-skill&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ui-ux-pro-max-skill&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;An AI SKILL that provide design intelligence for building professional UI/UX multiple platforms&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Gradient Keycaps In Bambu Studio</title>
    <id>https://waylonwalker.com/shots/gradient-keycaps-in-bambu-studio/</id>
    <updated>2026-02-06T19:53:05Z</updated>
    <published>2026-02-06T19:53:05Z</published>
    <link href="https://waylonwalker.com/shots/gradient-keycaps-in-bambu-studio/" rel="alternate" type="text/html"></link>
    <summary type="text">I have an idea for gradient keycaps using tri colored filliment, I&#39;m excited to see how it turns out.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/7fd8f2f8-a701-4be9-8289-8f9d3bb3c405.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/7fd8f2f8-a701-4be9-8289-8f9d3bb3c405.webp&#34; alt=&#34;gradient keycaps in bambu studio&#34;/ data-glightbox=&#34;description: gradient keycaps in bambu studio&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I have an idea for gradient keycaps using tri colored filliment, I’m excited to see how it turns out.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Pm Not Babysitter</title>
    <id>https://waylonwalker.com/pm-not-babysitter/</id>
    <updated>2026-02-06T14:04:25Z</updated>
    <published>2026-02-06T14:04:25Z</published>
    <link href="https://waylonwalker.com/pm-not-babysitter/" rel="alternate" type="text/html"></link>
    <summary type="text">Stop babysitting your agents, treat them like a real team and they will reward you.</summary>
    <content type="html">&lt;p&gt;Stop babysitting your agents, treat them like a real team and they will reward&#xA;you.&lt;/p&gt;&#xA;&lt;p&gt;Back in December I saw theo make a comment that code is now cheap, its the run&#xA;rate of models, He quoted a study, not sure that he fully even believed it, but&#xA;it claimed that the average developer after all meetings, training, emails,&#xA;planning and extra shit in their day averages out 10 well tested lines of code&#xA;per day.  Opus 3.5 made him 10k loc (lines of code) that day.&lt;/p&gt;&#xA;&lt;p&gt;We have all agreed for decades that lines of code is not a proxy to&#xA;productivity or quality.  Often more code means more risk, more review, more&#xA;infrastructure.  This has become MUCH different.  Lines of code are still far&#xA;from any sort of good metric.  That aside, your agents are not doing 10k lines&#xA;with you babysitting them, and in fact its very likely that the product quality&#xA;is MUCH worse as you babysit them.&lt;/p&gt;&#xA;&lt;p&gt;You need a tool for planning and tracking, otherwise you are playing babysitter&#xA;rather than Product Manager (PM).&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ vercel-labs agent-browser</title>
    <id>https://waylonwalker.com/vercel-labs-agent-browser/</id>
    <updated>2026-02-05T22:20:08Z</updated>
    <published>2026-02-05T22:20:08Z</published>
    <link href="https://waylonwalker.com/vercel-labs-agent-browser/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on agent-browser, created by vercel-labs.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/vercel-labs/agent-browser&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;agent-browser&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/vercel-labs&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vercel-labs&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Browser automation CLI for AI agents&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>diff kubernetes manifest with cluster</title>
    <id>https://waylonwalker.com/diff-kubernetes-manifest-with-cluster/</id>
    <updated>2026-02-05T09:37:39Z</updated>
    <published>2026-02-05T09:37:39Z</published>
    <link href="https://waylonwalker.com/diff-kubernetes-manifest-with-cluster/" rel="alternate" type="text/html"></link>
    <summary type="text">Like a dufus this morning I did a hard reset on a git repo for getting I was working on a manifest for. You see I generally use argo, but occasionally I have...</summary>
    <content type="html">&lt;p&gt;Like a dufus this morning I did a hard reset on a &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; repo for getting I was&#xA;working on a manifest for.  You see I generally use argo, but occasionally I&#xA;have no idea what I am doing or want yet and I start raw doggin it, fully aware&#xA;that I’m going to just nuke this namespace before getting it into a proper&#xA;argocd.&lt;/p&gt;&#xA;&lt;p&gt;I was overjoyed when I found out that you can diff your manifests with live&#xA;production using the &lt;code&gt;kubectl diff&lt;/code&gt; command.  It uses standard diff so you can&#xA;bring all your fancy diff viewers you like.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# regular manifest&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl diff -f k8s/shots -n shot&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# kustomize&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl diff -k k8s -n go-waylonwalker-com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# using a fancy diff viewer&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl diff -f k8s/shots -n shot &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; delta&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# using an even fancier diff viewer&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# pinkies out for this one&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl diff -f k8s/shots -n shot &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; delta --diff-so-fancy&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now I can get those changes back that I thought I lost, and apply updates with&#xA;confidence knowing what is about to change.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Camp Rock Letters</title>
    <id>https://waylonwalker.com/shots/camp-rock-letters/</id>
    <updated>2026-02-03T19:49:29Z</updated>
    <published>2026-02-03T19:49:29Z</published>
    <link href="https://waylonwalker.com/shots/camp-rock-letters/" rel="alternate" type="text/html"></link>
    <summary type="text">Camp Rock Letters going on the print bed for the show choir.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/70432c14-ce44-4848-8a27-e1e0db209c45.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/70432c14-ce44-4848-8a27-e1e0db209c45.webp&#34; alt=&#34;camp rock letters&#34;/ data-glightbox=&#34;description: camp rock letters&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Camp Rock Letters going on the print bed for the show choir.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Ping 23</title>
    <id>https://waylonwalker.com/ping-23/</id>
    <updated>2026-02-03T16:50:52Z</updated>
    <published>2026-02-03T16:50:52Z</published>
    <link href="https://waylonwalker.com/ping-23/" rel="alternate" type="text/html"></link>
    <summary type="text">I taught wyatt green, I apologize in advance, I underestimate the power of immature humor has on him.</summary>
    <content type="html">&lt;p&gt;I taught wyatt &lt;span style=&#34;display:inline-block;width:1em;height:1em;background:#bada55;border:1px&#xA;solid #000;&#34;&gt;&lt;/span&gt; &lt;code&gt;#bada55&lt;/code&gt; green, I apologize in advance, I underestimate&#xA;the power of immature humor has on him.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Ping 21</title>
    <id>https://waylonwalker.com/ping-21/</id>
    <updated>2026-01-29T07:30:59Z</updated>
    <published>2026-01-29T07:30:59Z</published>
    <link href="https://waylonwalker.com/ping-21/" rel="alternate" type="text/html"></link>
    <summary type="text">Agents right now</summary>
    <content type="html">&lt;p&gt;Agents right now&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;can I access the project you mentioned?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;yes&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Can i access /tmp&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;yes, just do it&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;While I’m I at it, &lt;code&gt;kubctl delete...&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;yanks plug front internet&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Agent Management Is Exhausting</title>
    <id>https://waylonwalker.com/agent-management-is-exhausting/</id>
    <updated>2026-01-26T14:38:35Z</updated>
    <published>2026-01-26T14:38:35Z</published>
    <link href="https://waylonwalker.com/agent-management-is-exhausting/" rel="alternate" type="text/html"></link>
    <summary type="text">The state of development in early 2026 is all wrapped around learning how to manage many agents running in parallel. Everyone&#39;s trying to figure out the...</summary>
    <content type="html">&lt;p&gt;The state of development in early 2026 is all wrapped around learning how to&#xA;manage many agents running in parallel. Everyone’s trying to figure out the&#xA;workflow.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-plan-is-everything&#34;&gt;The Plan Is Everything &lt;a href=&#34;#the-plan-is-everything&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The secret I’ve discovered is a good, well-defined plan. This could be a&#xA;markdown file or a GitHub issue. Agents are actually great at writing these for&#xA;you. They’ll include reproduction steps, outline changes needed, and structure&#xA;the work.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;This&lt;/strong&gt; is your opportunity to step in. Read the plan. Look for hallucinations.&#xA;Spot where it’s going off track. Edit the plan before the agent starts coding.&lt;/p&gt;&#xA;&lt;p&gt;I had one today where it laid out reproduction steps beautifully, but I could&#xA;add context about network requests that completely changed the approach. This&#xA;editing phase is what most people are missing right now. Skip it and you’ll&#xA;watch your agent solve the wrong problem with impressive efficiency.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-pace-problem&#34;&gt;The Pace Problem &lt;a href=&#34;#the-pace-problem&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here’s what nobody warned me about: managing these things is &lt;em&gt;exhausting&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Depending on the day, agents move so damn fast. I can barely research, find, and&#xA;raise issues as fast as Claude can implement features and fixes. It’s like&#xA;trying to speedrun a Minecraft seed when you just figured out how to craft a&#xA;pickaxe.&lt;/p&gt;&#xA;&lt;h2 id=&#34;a-different-kind-of-work&#34;&gt;A Different Kind of Work &lt;a href=&#34;#a-different-kind-of-work&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This stretches a different part of my brain than I’m used to using. I’m learning&#xA;new skills around:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Issue tracking and management at high velocity&lt;/li&gt;&#xA;&lt;li&gt;Knowing which models handle which tasks best&lt;/li&gt;&#xA;&lt;li&gt;Spotting when a session is about to go sideways from context bloat or bad&#xA;compaction&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I had a session yesterday where the context got poisoned with a wrong&#xA;assumption. The agent spent 20 minutes building on that false premise before I&#xA;caught it. That’s 20 minutes of perfectly executed code solving the wrong&#xA;problem entirely.&lt;/p&gt;&#xA;&lt;h2 id=&#34;worth-it-but-hard&#34;&gt;Worth It, But Hard &lt;a href=&#34;#worth-it-but-hard&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’m not going to hype-bro you and say this is easy or that you’re wrong to be&#xA;skeptical. If you have the opportunity to work with agents, it’s worth learning&#xA;proper techniques.&lt;/p&gt;&#xA;&lt;p&gt;It’s not easy. It requires actual management skills, not just&#xA;prompting skills. And yeah, I’m tired.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Stop Using Boomer Ai</title>
    <id>https://waylonwalker.com/stop-using-boomer-ai/</id>
    <updated>2026-01-26T13:12:29Z</updated>
    <published>2026-01-26T13:12:29Z</published>
    <link href="https://waylonwalker.com/stop-using-boomer-ai/" rel="alternate" type="text/html"></link>
    <summary type="text">I was listening to these guys talk about migrating off of boomer ai the other day. Introducing the term boomer ai to describe using chat, copy, paste instead...</summary>
    <content type="html">&lt;p&gt;I was listening to these guys talk about migrating off of boomer ai the other&#xA;day.  Introducing the term boomer ai to describe using chat, copy, paste&#xA;instead of agents.  Something magical happened to the tooling and models around&#xA;december, they got really good.  The chatgpt $20 plan hooked into opencode is&#xA;good, the Free models in Opencode Zen (Big Pickle and Kimi K2.5 Free) are&#xA;really good.  Neither of these quite match up to the speed and quality of the&#xA;larger plans, but they are good.  good enough to throw away your boomer ai&#xA;techniques and start using agents.  Agents are the future, and they are here&#xA;now.  If you are still using chat, copy, paste, you are doing it wrong.  Stop&#xA;using boomer ai and start using agents.  You will be amazed at how much better&#xA;your results will be.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=3dmPKuTWbsI&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://www.youtube.com/watch?v=3dmPKuTWbsI&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Mentions</title>
    <id>https://waylonwalker.com/mentions/</id>
    <updated>2026-01-24T19:11:15Z</updated>
    <published>2026-01-24T19:11:15Z</published>
    <link href="https://waylonwalker.com/mentions/" rel="alternate" type="text/html"></link>
    <summary type="text">I can now just mention people from my markata about blogroll like @simonwillison.net or @swyx.io</summary>
    <content type="html">&lt;p&gt;I can now just mention people from my &lt;a href=&#34;/markata/&#34; class=&#34;wikilink&#34; data-title=&#34;markata&#34; data-description=&#34;This post is a work in progress.&#34; data-date=&#34;2024-05-30&#34; data-preview=&#34;This post is a work in progress.&#34;&gt;markata&lt;/a&gt;  &lt;a href=&#34;/about/&#34; class=&#34;wikilink&#34; data-title=&#34;Waylon Walker&#34; data-description=&#34;👋 Hi, I am Waylon Walker. Husband, Father of two, and creator things on the web, learning, and teaching others. I play lots of Minecraft, make art, and...&#34; data-date=&#34;2021-11-20&#34; data-preview=&#34;👋 Hi, I am Waylon Walker. Husband, Father of two, and creator things on the web, learning, and teaching others. I play lots of Minecraft, make art, and...&#34;&gt;Waylon Walker&lt;/a&gt; &lt;a href=&#34;/blogroll/&#34; class=&#34;wikilink&#34; data-title=&#34;Blogroll&#34; data-description=&#34;Blogs and feeds I follow&#34; data-preview=&#34;Blogs and feeds I follow&#34;&gt;Blogroll&lt;/a&gt; like &lt;a href=&#34;https://simonwillison.net&#34; class=&#34;mention  has-avatar has-avatar-before&#34; data-name=&#34;Simon Willison’s Weblog&#34; data-handle=&#34;@simonwillison&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/simonwillison.net.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/simonwillison.net.ico&#34;&gt;@simonwillison&lt;/a&gt; or @swyx.io&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/now/&#34; class=&#34;wikilink&#34; data-title=&#34;/now&#34; data-description=&#34;This page is meant to be simple view into what is happening in my life right now. Inspired by @NowNowNow. and Derek Sivers.&#34; data-date=&#34;2025-01-12&#34; data-preview=&#34;This page is meant to be simple view into what is happening in my life right now. Inspired by @NowNowNow. and Derek Sivers.&#34;&gt;/now&lt;/a&gt;  [[ upto ]] [[ doing ]]&lt;/p&gt;&#xA;&lt;aside class=&#34;admonition aside aside-right&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Aside&lt;/p&gt;&#xA;&lt;p&gt;This is an aside!&lt;/p&gt;&#xA;&lt;/aside&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ wilsonzlin fastrender</title>
    <id>https://waylonwalker.com/wilsonzlin-fastrender/</id>
    <updated>2026-01-24T03:54:07Z</updated>
    <published>2026-01-24T03:54:07Z</published>
    <link href="https://waylonwalker.com/wilsonzlin-fastrender/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on fastrender by wilsonzlin.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/wilsonzlin/fastrender&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fastrender&lt;/a&gt; by &lt;a href=&#34;https://github.com/wilsonzlin&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;wilsonzlin&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Experimental new browser engine&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2026-01-23 Notes</title>
    <id>https://waylonwalker.com/2026-01-23-notes/</id>
    <updated>2026-01-23T22:28:38Z</updated>
    <published>2026-01-23T22:28:38Z</published>
    <link href="https://waylonwalker.com/2026-01-23-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">Next for markata go</summary>
    <content type="html">&lt;p&gt;Next for markata go&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Embed post, internal and external&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/og/&#34; class=&#34;glossary-term&#34; title=&#34;OG is short for open graph, a set of standard meta tags that are used for social media sharing. This is what tells other websites how to describe and display...&#34;&gt;Og&lt;/a&gt; images&lt;/li&gt;&#xA;&lt;li&gt;Post importer - thoughts&lt;/li&gt;&#xA;&lt;li&gt;Reader / blogroll plugin&lt;/li&gt;&#xA;&lt;li&gt;K9s inspired tui&lt;/li&gt;&#xA;&lt;li&gt;:files, :posts, :tags, :feeds,&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;Extra classes&lt;/p&gt;&#xA;&lt;p&gt;Wikilinks&lt;/p&gt;&#xA;&lt;p&gt;Lsp&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Complete wikilinks&lt;/li&gt;&#xA;&lt;li&gt;Complete mentions&lt;/li&gt;&#xA;&lt;li&gt;Document diagnostic&lt;/li&gt;&#xA;&lt;li&gt;Workspace diagnostics&lt;/li&gt;&#xA;&lt;li&gt;Config completions&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Jinja_md obsidian like support&lt;/p&gt;&#xA;&lt;p&gt;View as in footer&lt;/p&gt;&#xA;&lt;p&gt;Archive missing grid of pages&lt;/p&gt;&#xA;&lt;p&gt;Nav footer different on feeds than post&#xA;Sometimes the skip to content peeks into the top left corner of the page by a few pixels, it’s distracting&lt;/p&gt;&#xA;&lt;p&gt;Tap to zoom image&lt;/p&gt;&#xA;&lt;p&gt;Google font&lt;/p&gt;&#xA;&lt;p&gt;Sitemap&lt;/p&gt;&#xA;&lt;p&gt;Background image support&lt;/p&gt;&#xA;&lt;p&gt;Mouse support in tui works, not in tmux&lt;/p&gt;&#xA;&lt;p&gt;All optional plugins with config from user should raise warning configured not able&lt;/p&gt;&#xA;&lt;p&gt;Lines of code should be separate from word count&lt;/p&gt;&#xA;&lt;p&gt;Tui press enter, should see full post and scroll/read render markdown&lt;/p&gt;&#xA;&lt;p&gt;Update branding from fast to comprehensive&lt;/p&gt;&#xA;&lt;p&gt;Debug pages, show config&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Image gallery&lt;/li&gt;&#xA;&lt;li&gt;carousel&lt;/li&gt;&#xA;&lt;li&gt;Prev/next&lt;/li&gt;&#xA;&lt;li&gt;Embedfeed&lt;/li&gt;&#xA;&lt;li&gt;Fix aside&lt;/li&gt;&#xA;&lt;li&gt;Contrast / flashbang check on admonitions styles on all themes.&lt;/li&gt;&#xA;&lt;li&gt;Glossary&lt;/li&gt;&#xA;&lt;li&gt;Banner post&lt;/li&gt;&#xA;&lt;li&gt;Keys&lt;/li&gt;&#xA;&lt;li&gt;Containers&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr/&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Page 1 link is always highlighted&lt;/li&gt;&#xA;&lt;li&gt;Page 1 link is broken when coming from page 1&lt;/li&gt;&#xA;&lt;li&gt;On mobile search is too wide&lt;/li&gt;&#xA;&lt;li&gt;Shots needs warmed with a head request&lt;/li&gt;&#xA;&lt;li&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;Tags&lt;/p&gt;&#xA;&lt;p&gt;Contacts&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ flosch pongo2</title>
    <id>https://waylonwalker.com/flosch-pongo2/</id>
    <updated>2026-01-22T23:34:17Z</updated>
    <published>2026-01-22T23:34:17Z</published>
    <link href="https://waylonwalker.com/flosch-pongo2/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out flosch and their project pongo2.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/flosch&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;flosch&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/flosch/pongo2&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pongo2&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Django-syntax like template-engine for Go&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>What Your Coding Tool Says About You</title>
    <id>https://waylonwalker.com/what-your-coding-tool-says-about-you/</id>
    <updated>2026-01-21T16:25:41Z</updated>
    <published>2026-01-21T16:25:41Z</published>
    <link href="https://waylonwalker.com/what-your-coding-tool-says-about-you/" rel="alternate" type="text/html"></link>
    <summary type="text">Copilot - corporate 9-5er * Claude Code - Agentic Workflows or Bust * Vim/neovim - definite neck beard * VsCode - What else is there?</summary>
    <content type="html">&lt;ul&gt;&#xA;&lt;li&gt;open code - libre free as in beer and speech&lt;/li&gt;&#xA;&lt;li&gt;Copilot - corporate 9-5er&lt;/li&gt;&#xA;&lt;li&gt;Cursor - You sip on Philz coffee with your macbook&lt;/li&gt;&#xA;&lt;li&gt;Claude Code - Agentic Workflows or Bust&lt;/li&gt;&#xA;&lt;li&gt;Jetbrains - I didn’t know you wrote java&lt;/li&gt;&#xA;&lt;li&gt;Vim/neovim - definite neck beard&lt;/li&gt;&#xA;&lt;li&gt;VsCode - What else is there?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Quick Tip To Get Agents Running Longer</title>
    <id>https://waylonwalker.com/ping-22/</id>
    <updated>2026-01-21T16:22:26Z</updated>
    <published>2026-01-21T16:22:26Z</published>
    <link href="https://waylonwalker.com/ping-22/" rel="alternate" type="text/html"></link>
    <summary type="text">Here&#39;s a quick tip if you want to get your agents running longer, **.</summary>
    <content type="html">&lt;p&gt;Here’s a quick tip if you want to get your agents running longer, &lt;strong&gt;prompt better&lt;/strong&gt;.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>format markdown with mdformat</title>
    <id>https://waylonwalker.com/format-markdown-with-mdformat/</id>
    <updated>2026-01-19T20:41:14Z</updated>
    <published>2026-01-19T20:41:14Z</published>
    <link href="https://waylonwalker.com/format-markdown-with-mdformat/" rel="alternate" type="text/html"></link>
    <summary type="text">I really wish I would have got this right a few years ago. Theres a couple of flags I had to use to get mdformat to do hard wraps at 80 characters and not...</summary>
    <content type="html">&lt;p&gt;I really wish I would have got this right a few years ago. Theres a couple of&#xA;flags I had to use to get mdformat to do hard wraps at 80 characters and not&#xA;wreck tables. This mix of flags and plugins is workign really well for me so&#xA;far.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mdfmt&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    uvx &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;        --with &lt;span class=&#34;s2&#34;&gt;&amp;#34;mdformat-ruff&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;        --with &lt;span class=&#34;s2&#34;&gt;&amp;#34;mdformat-beautysh&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;        --with &lt;span class=&#34;s2&#34;&gt;&amp;#34;mdformat-web&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;        --with &lt;span class=&#34;s2&#34;&gt;&amp;#34;mdformat-config&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;        --with &lt;span class=&#34;s2&#34;&gt;&amp;#34;mdformat-gfm&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;        --with &lt;span class=&#34;s2&#34;&gt;&amp;#34;mdformat-front-matters&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;        --with &lt;span class=&#34;s2&#34;&gt;&amp;#34;mdformat-wikilink&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;        --with &lt;span class=&#34;s2&#34;&gt;&amp;#34;mdformat-simple-breaks&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;        mdformat &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;        --wrap &lt;span class=&#34;m&#34;&gt;80&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;        --end-of-line lf &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;        --codeformatters python &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;        --codeformatters bash &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And as pre-commmit.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;l&#34;&gt;repos&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;repo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://github.com/hukkin/mdformat&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;rev&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1.0.0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# pin to the version you want&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;hooks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;mdformat&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- --&lt;span class=&#34;l&#34;&gt;wrap&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;80&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- --&lt;span class=&#34;l&#34;&gt;end-of-line&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;lf&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- --&lt;span class=&#34;l&#34;&gt;codeformatters&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- --&lt;span class=&#34;l&#34;&gt;codeformatters&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;bash&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;additional_dependencies&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;mdformat-ruff&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;mdformat-beautysh&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;mdformat-web&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;mdformat-config&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;mdformat-gfm&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;mdformat-front-matters&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;mdformat-wikilink&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;mdformat-simple-breaks&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Ping 19</title>
    <id>https://waylonwalker.com/ping-19/</id>
    <updated>2026-01-18T14:07:57Z</updated>
    <published>2026-01-18T14:07:57Z</published>
    <link href="https://waylonwalker.com/ping-19/" rel="alternate" type="text/html"></link>
    <summary type="text">What no one is talking about is that Deegs doesn&#39;t get the red plate without Anstie on the ground.</summary>
    <content type="html">&lt;p&gt;What no one is talking about is that Deegs doesn’t get the red plate without&#xA;Anstie on the ground.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/6cf67bcf-5111-4ee0-892e-0407eb1acdbe.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/6cf67bcf-5111-4ee0-892e-0407eb1acdbe.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/6cf67bcf-5111-4ee0-892e-0407eb1acdbe.mp4&#34; type=&#34;video/mp4&#34;&gt;Your browser does not support the video tag.&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Trobio Full2</title>
    <id>https://waylonwalker.com/shots/trobio-full2/</id>
    <updated>2026-01-17T12:20:57Z</updated>
    <published>2026-01-17T12:20:57Z</published>
    <link href="https://waylonwalker.com/shots/trobio-full2/" rel="alternate" type="text/html"></link>
    <summary type="text">Trobio Full2</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/37a7b508-f5d5-49d7-a443-dc346fdae913.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/37a7b508-f5d5-49d7-a443-dc346fdae913.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/37a7b508-f5d5-49d7-a443-dc346fdae913.mp4&#34; type=&#34;video/mp4&#34;&gt;Trobio Full2&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Trobio Full2&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>What is that</title>
    <id>https://waylonwalker.com/ping-18/</id>
    <updated>2026-01-15T19:22:47Z</updated>
    <published>2026-01-15T19:22:47Z</published>
    <link href="https://waylonwalker.com/ping-18/" rel="alternate" type="text/html"></link>
    <summary type="text">I was unironically asked what is that about my keeb today. Followed by no way that works, how would you type a, s, y, u, after showing, I go the &#34;that&#39;s...</summary>
    <content type="html">&lt;p&gt;I was unironically asked what is that about my keeb today.  Followed by no way&#xA;that works, how would you type a, s, y, u, after showing, I go the “that’s&#xA;weird” walk away.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Hornet Sitting</title>
    <id>https://waylonwalker.com/shots/hornet-sitting/</id>
    <updated>2026-01-15T19:16:43Z</updated>
    <published>2026-01-15T19:16:43Z</published>
    <link href="https://waylonwalker.com/shots/hornet-sitting/" rel="alternate" type="text/html"></link>
    <summary type="text">Hornet Sitting</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/81553691-15f4-4b5e-9b4f-92fcbacf6838.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/81553691-15f4-4b5e-9b4f-92fcbacf6838.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/81553691-15f4-4b5e-9b4f-92fcbacf6838.mp4&#34; type=&#34;video/mp4&#34;&gt;Hornet Sitting&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Hornet Sitting&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Trobio Fight</title>
    <id>https://waylonwalker.com/shots/trobio-fight/</id>
    <updated>2026-01-15T19:12:25Z</updated>
    <published>2026-01-15T19:12:25Z</published>
    <link href="https://waylonwalker.com/shots/trobio-fight/" rel="alternate" type="text/html"></link>
    <summary type="text">Trobio Fight</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/ff44918f-3c72-4377-94d2-91021033e357.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/ff44918f-3c72-4377-94d2-91021033e357.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/ff44918f-3c72-4377-94d2-91021033e357.mp4&#34; type=&#34;video/mp4&#34;&gt;Trobio Fight&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Trobio Fight&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Trobio Full</title>
    <id>https://waylonwalker.com/shots/trobio-full/</id>
    <updated>2026-01-15T19:10:33Z</updated>
    <published>2026-01-15T19:10:33Z</published>
    <link href="https://waylonwalker.com/shots/trobio-full/" rel="alternate" type="text/html"></link>
    <summary type="text">Trobio Full</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/7cc6a28b-d471-4a15-8e12-c9d1b8152fa1.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/7cc6a28b-d471-4a15-8e12-c9d1b8152fa1.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/7cc6a28b-d471-4a15-8e12-c9d1b8152fa1.mp4&#34; type=&#34;video/mp4&#34;&gt;Trobio Full&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Trobio Full&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>📝 Git Notes</title>
    <id>https://waylonwalker.com/git/</id>
    <updated>2026-01-15T09:05:21Z</updated>
    <published>2026-01-15T09:05:21Z</published>
    <link href="https://waylonwalker.com/git/" rel="alternate" type="text/html"></link>
    <summary type="text">Waylon Walker&#39;s Git Notes</summary>
    <content type="html">&lt;h2 id=&#34;see-old-revisions-of-one-file&#34;&gt;See old revisions of one file &lt;a href=&#34;#see-old-revisions-of-one-file&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git log --oneline -- &amp;lt;file&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git log -n &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; --oneline -- &amp;lt;file&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;checkout-an-old-revision-of-a-file&#34;&gt;Checkout an old revision of a file &lt;a href=&#34;#checkout-an-old-revision-of-a-file&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout &amp;lt;commit&amp;gt; -- path/to/file&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;fuzzy-pick-a-file-and-check-out-an-old-revision&#34;&gt;fuzzy pick a file and check out an old revision &lt;a href=&#34;#fuzzy-pick-a-file-and-check-out-an-old-revision&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/usr/bin/env bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -euo pipefail&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;:-&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; -z &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;git ls-files &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fzf --prompt&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;select file &amp;gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; -z &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; ! git rev-parse --is-inside-work-tree &amp;gt;/dev/null 2&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;1&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Not a git repository.&amp;#34;&lt;/span&gt; &amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; ! git ls-files --error-unmatch -- &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt;/dev/null 2&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;1&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;File is not tracked by git: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;choice&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  git log --follow --pretty&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;format:&lt;span class=&#34;s1&#34;&gt;&amp;#39;%h %ad %s&amp;#39;&lt;/span&gt; --date&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;short -- &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    fzf --ansi --no-sort --reverse &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;        --preview-window&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;down:70% &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;        --prompt&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;checkout revision &amp;gt; &amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;        --preview &lt;span class=&#34;s2&#34;&gt;&amp;#34;git show --color=always {1}^..{1} -- &amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#39; 2&amp;gt;/dev/null || git show --color=always {1} -- &amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#39;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; -z &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;choice&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;commit&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $1}&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;choice&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;commit&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; -- &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Heringbone Fingerboard</title>
    <id>https://waylonwalker.com/shots/heringbone-fingerboard/</id>
    <updated>2026-01-14T19:55:10Z</updated>
    <published>2026-01-14T19:55:10Z</published>
    <link href="https://waylonwalker.com/shots/heringbone-fingerboard/" rel="alternate" type="text/html"></link>
    <summary type="text">I just finished up my latest 6 ply wood fingerboard. I used scraps of purple, blue, red, and gold from the first 5 boards I built to make this pattern.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/1b7f257c-5193-4b74-b768-2fa4a7ccdec8.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/1b7f257c-5193-4b74-b768-2fa4a7ccdec8.webp&#34; alt=&#34;Heringbone Fingerboard&#34;/ data-glightbox=&#34;description: Heringbone Fingerboard&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I just finished up my latest 6 ply wood fingerboard.  I used scraps of purple, blue, red, and gold from the first 5 boards I built to make this pattern.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Dont Trust Users Tokens</title>
    <id>https://waylonwalker.com/dont-trust-users-tokens/</id>
    <updated>2026-01-14T19:49:43Z</updated>
    <published>2026-01-14T19:49:43Z</published>
    <link href="https://waylonwalker.com/dont-trust-users-tokens/" rel="alternate" type="text/html"></link>
    <summary type="text">User states: Upon picking up an old project and trying to install pip says &#34;cannot find a version to satisfy&#34;</summary>
    <content type="html">&lt;p&gt;User states: Upon picking up an old project and trying to install pip says&#xA;“cannot find a version to satisfy”&lt;/p&gt;&#xA;&lt;p&gt;I’ve got this, I’ve had this a hundred times before it’s a python version, a&#xA;rogue package, maybe a yank from the pinned deps.  I pop open the project get&#xA;us on the same commit.  I get a different error, make a few updates and we are&#xA;good, except the user gets the same error from the start.&lt;/p&gt;&#xA;&lt;p&gt;They never saw the error I did, and my fix did not magically resolve their&#xA;error.  We circle all the things it could be for hours.  I consistently wipe my&#xA;venv, and recreate with ease, send them the commands I ran to no avail.&#xA;Something is up and I can’t put my finger on it.  We’ve checked all the things&#xA;and inched as close as we can to running everything exactly the same.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Os&lt;/li&gt;&#xA;&lt;li&gt;python version&lt;/li&gt;&#xA;&lt;li&gt;Network vpn&lt;/li&gt;&#xA;&lt;li&gt;uv version&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Nothing makes any sense.  Finally I throw in the towel, is it the artifact&#xA;server.  I forge a token and give him one to borrow.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;BAM&lt;/strong&gt; it works, like magic.  The first sign of progress.  Then he mentions.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Huh that’s odd cause I just got mine this morning&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Failing to mention this any earlier that getting a new token for a service and&#xA;it completely borked it!  I get it though, the error was very oddly presented&#xA;and not easy to see why&lt;/p&gt;&#xA;&lt;p&gt;There it was all along, looking back in the logs I see his redacted token going&#xA;to the wrong registry. One that does not include our packages, everything makes&#xA;sense now. The reason it couldn’t find a version to satisfy was not a python&#xA;version, os version, package conflict, it was that it couldn’t find a fucking&#xA;version of the thing to begin with.&lt;/p&gt;&#xA;&lt;p&gt;All this to say, don’t trust users tokens, save your time and just get fresh&#xA;ones with them.&lt;/p&gt;&#xA;&lt;p&gt;&lt;redacted&gt; if you read this it’s all cool, like I said it’s all part of the&#xA;job, no harsh feelings, at least we got a good story out of it right!&lt;/redacted&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ dbreunig whenwords</title>
    <id>https://waylonwalker.com/dbreunig-whenwords/</id>
    <updated>2026-01-14T17:08:20Z</updated>
    <published>2026-01-14T17:08:20Z</published>
    <link href="https://waylonwalker.com/dbreunig-whenwords/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out dbreunig and their project whenwords.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/dbreunig&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dbreunig&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/dbreunig/whenwords&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;whenwords&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A relative time formatting library, with no code.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>High Halls Gauntlet Ending</title>
    <id>https://waylonwalker.com/shots/high-halls-gauntlet-ending/</id>
    <updated>2026-01-13T18:49:59Z</updated>
    <published>2026-01-13T18:49:59Z</published>
    <link href="https://waylonwalker.com/shots/high-halls-gauntlet-ending/" rel="alternate" type="text/html"></link>
    <summary type="text">High Halls Gauntlet Ending</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/a74b0494-341b-4194-955c-be2a56931d77.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/a74b0494-341b-4194-955c-be2a56931d77.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/a74b0494-341b-4194-955c-be2a56931d77.mp4&#34; type=&#34;video/mp4&#34;&gt;High Halls Gauntlet Ending&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;High Halls Gauntlet Ending&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Conductors Melody</title>
    <id>https://waylonwalker.com/shots/conductors-melody/</id>
    <updated>2026-01-13T18:43:43Z</updated>
    <published>2026-01-13T18:43:43Z</published>
    <link href="https://waylonwalker.com/shots/conductors-melody/" rel="alternate" type="text/html"></link>
    <summary type="text">Conductors Melody</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/91c794cb-fd46-4354-aae9-a15ef2426ea0.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/91c794cb-fd46-4354-aae9-a15ef2426ea0.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/91c794cb-fd46-4354-aae9-a15ef2426ea0.mp4&#34; type=&#34;video/mp4&#34;&gt;Conductors Melody&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Conductors Melody&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Top Spool</title>
    <id>https://waylonwalker.com/shots/top-spool/</id>
    <updated>2026-01-13T18:42:48Z</updated>
    <published>2026-01-13T18:42:48Z</published>
    <link href="https://waylonwalker.com/shots/top-spool/" rel="alternate" type="text/html"></link>
    <summary type="text">Top Spool</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/ff9c858b-0829-4e50-a933-cdc971e601af.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/ff9c858b-0829-4e50-a933-cdc971e601af.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/ff9c858b-0829-4e50-a933-cdc971e601af.mp4&#34; type=&#34;video/mp4&#34;&gt;Top Spool&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Top Spool&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>opencode variants</title>
    <id>https://waylonwalker.com/opencode-variants/</id>
    <updated>2026-01-13T08:53:36Z</updated>
    <published>2026-01-13T08:53:36Z</published>
    <link href="https://waylonwalker.com/opencode-variants/" rel="alternate" type="text/html"></link>
    <summary type="text">Opencode is changing on the daily right now, today I noticed the word pop up in Orange text in my opencode window. Looking into this they are exposing...</summary>
    <content type="html">&lt;p&gt;Opencode is changing on the daily right now, today I noticed the word &lt;code&gt;low&lt;/code&gt; pop&#xA;up in Orange text in my opencode window.  Looking into this they are exposing&#xA;&lt;a href=&#34;https://opencode.ai/docs/models/#variants&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/opencode.ai.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/opencode.ai.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;variants&lt;/a&gt; to the user.  This allows&#xA;you to change between fast or slow and thinking, the later taking more time to&#xA;prepare before doing an action.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/0b6bfe5e-41b0-4e44-8c5a-ff88739a770e.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/0b6bfe5e-41b0-4e44-8c5a-ff88739a770e.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/0b6bfe5e-41b0-4e44-8c5a-ff88739a770e.mp4&#34; type=&#34;video/mp4&#34;&gt;Swapping Variants in opencode&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;It looks like this toggle may have been here for awhile and I’m just now&#xA;discovering it. Potentially because its a new feature of the free Zen provider.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Variants&#xA;Many models support multiple variants with different configurations. OpenCode ships with built-in default variants for popular providers.&lt;/p&gt;&#xA;&lt;p&gt;Built-in variants&#xA;OpenCode ships with default variants for many providers:&lt;/p&gt;&#xA;&lt;p&gt;Anthropic:&lt;/p&gt;&#xA;&lt;p&gt;high - High thinking budget (default)&#xA;max - Maximum thinking budget&#xA;OpenAI:&lt;/p&gt;&#xA;&lt;p&gt;Varies by model but roughly:&lt;/p&gt;&#xA;&lt;p&gt;none - No reasoning&#xA;minimal - Minimal reasoning effort&#xA;low - Low reasoning effort&#xA;medium - Medium reasoning effort&#xA;high - High reasoning effort&#xA;xhigh - Extra high reasoning effort&#xA;Google:&lt;/p&gt;&#xA;&lt;p&gt;low - Lower effort/token budget&#xA;high - Higher effort/token budget&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Ping 17</title>
    <id>https://waylonwalker.com/ping-17/</id>
    <updated>2026-01-12T12:01:16Z</updated>
    <published>2026-01-12T12:01:16Z</published>
    <link href="https://waylonwalker.com/ping-17/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m not sure if its good to keep issues and plans in the repo long term, but I&#39;m going to give it a shot.</summary>
    <content type="html">&lt;p&gt;I’m not sure if its good to keep issues and plans in the repo long term, but&#xA;I’m going to give it a shot.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;read @pages/issues/issue-1.md create a plan to fix the issue, then write your&#xA;plan to fix in @pages/plans/fix-issue-1.md&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Broodmother Eye</title>
    <id>https://waylonwalker.com/shots/broodmother-eye/</id>
    <updated>2026-01-11T18:03:37Z</updated>
    <published>2026-01-11T18:03:37Z</published>
    <link href="https://waylonwalker.com/shots/broodmother-eye/" rel="alternate" type="text/html"></link>
    <summary type="text">Broodmother Eye</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/89b14b31-6ae8-42c4-ab1b-fc1d354ee27c.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/89b14b31-6ae8-42c4-ab1b-fc1d354ee27c.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/89b14b31-6ae8-42c4-ab1b-fc1d354ee27c.mp4&#34; type=&#34;video/mp4&#34;&gt;Broodmother Eye&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Broodmother Eye&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Big Flea 1</title>
    <id>https://waylonwalker.com/shots/big-flea-1/</id>
    <updated>2026-01-11T18:01:55Z</updated>
    <published>2026-01-11T18:01:55Z</published>
    <link href="https://waylonwalker.com/shots/big-flea-1/" rel="alternate" type="text/html"></link>
    <summary type="text">Big Flea 1</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/d7578560-e7ae-4a0c-9896-a4db9d919b23.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/d7578560-e7ae-4a0c-9896-a4db9d919b23.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/d7578560-e7ae-4a0c-9896-a4db9d919b23.mp4&#34; type=&#34;video/mp4&#34;&gt;Big Flea 1&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Big Flea 1&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Cogfly</title>
    <id>https://waylonwalker.com/shots/cogfly/</id>
    <updated>2026-01-11T18:00:35Z</updated>
    <published>2026-01-11T18:00:35Z</published>
    <link href="https://waylonwalker.com/shots/cogfly/" rel="alternate" type="text/html"></link>
    <summary type="text">Cogfly</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/3fefcd31-128c-47bb-a8b1-b601cfd54536.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/3fefcd31-128c-47bb-a8b1-b601cfd54536.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/3fefcd31-128c-47bb-a8b1-b601cfd54536.mp4&#34; type=&#34;video/mp4&#34;&gt;Cogfly&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Cogfly&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Beast Crest</title>
    <id>https://waylonwalker.com/shots/beast-crest/</id>
    <updated>2026-01-11T17:59:06Z</updated>
    <published>2026-01-11T17:59:06Z</published>
    <link href="https://waylonwalker.com/shots/beast-crest/" rel="alternate" type="text/html"></link>
    <summary type="text">Beast Crest</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/9a406fa1-d69d-4fd9-9ff1-15c84661d97d.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/9a406fa1-d69d-4fd9-9ff1-15c84661d97d.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/9a406fa1-d69d-4fd9-9ff1-15c84661d97d.mp4&#34; type=&#34;video/mp4&#34;&gt;Beast Crest&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Beast Crest&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Clawline</title>
    <id>https://waylonwalker.com/shots/clawline/</id>
    <updated>2026-01-11T17:57:57Z</updated>
    <published>2026-01-11T17:57:57Z</published>
    <link href="https://waylonwalker.com/shots/clawline/" rel="alternate" type="text/html"></link>
    <summary type="text">Clawline</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/73e59874-cc30-4330-bb5a-c81a93310dcd.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/73e59874-cc30-4330-bb5a-c81a93310dcd.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/73e59874-cc30-4330-bb5a-c81a93310dcd.mp4&#34; type=&#34;video/mp4&#34;&gt;Clawline&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Clawline&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Ai</title>
    <id>https://waylonwalker.com/ai/</id>
    <updated>2026-01-11T13:48:43Z</updated>
    <published>2026-01-11T13:48:43Z</published>
    <link href="https://waylonwalker.com/ai/" rel="alternate" type="text/html"></link>
    <summary type="text">Last updated Jan 2026.</summary>
    <content type="html">&lt;p&gt;Last updated Jan 2026.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition seealso&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Seealso&lt;/p&gt;&#xA;&lt;p&gt;Looking for all posts tagged with ai see [[ tag/ai ]]&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Ai is a tool I use a lot for code generation, research, image generation, and&#xA;debugging.  The words I publish on this site are my own unless explicitly&#xA;stated from the top.  There’s only one or two posts in this category.&lt;/p&gt;&#xA;&lt;h2 id=&#34;words-are-mine&#34;&gt;Words are mine &lt;a href=&#34;#words-are-mine&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The core of what this blog is, is my thoughts ideas, sharing experiences.  The&#xA;words are the important part.  They are not perfect, I often do not spell or&#xA;grammer check, and what is here is from a flow state of writing and very often&#xA;not refactored.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;No AI unless explicitly stated&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;code-gen&#34;&gt;code gen &lt;a href=&#34;#code-gen&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Up till around 2023 all of the code to create the site was hand written by me.&#xA;I have my own site generator that I maintain &lt;a href=&#34;/markata/&#34; class=&#34;wikilink&#34; data-title=&#34;markata&#34; data-description=&#34;This post is a work in progress.&#34; data-date=&#34;2024-05-30&#34; data-preview=&#34;This post is a work in progress.&#34;&gt;markata&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;From 2023 through 2025 snippets of code, sometimes entire plugins or modules&#xA;were created in chat apps like chatgpt.  There was no agentic coding, windsurf,&#xA;cursor, claude code, opencode, none of it.  It was all integrated into the site&#xA;by hand.&lt;/p&gt;&#xA;&lt;p&gt;Starting around Dec 2025 I was finding freely available agents through tools&#xA;like opencode to be more and more useful, making less mistakes, doing better at&#xA;getting context and making changes.  The flow is relying on heavy planning and&#xA;issue reporting.&lt;/p&gt;&#xA;&lt;h2 id=&#34;image-gen&#34;&gt;image gen &lt;a href=&#34;#image-gen&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I really got into stable diffusion as it came out.  I thought it was&#xA;fascinating to generate different kinds of images of things that I would&#xA;otherwise have no ability to create, for a long time I was generating images&#xA;for every post.  I’ve moved on from doing it for every post, but still do it&#xA;occasionally.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I’m not an artist, sometimes I like to include art that I would not otherwise&#xA;be able to.  Most of the art you see on a post is AI generated, and may not&#xA;be called out.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;a-hreftechbrophobic-classwikilink-data-titletechbrophobic-data-descriptioni-just-heard-someone-drop-the-this-term-and-it-kinda-fits-a-lot-of-shit-on-the-internet-right-now-arguing-that-its-ok-to-question-ai-its-ok-to-like-it-its-data-date2025-11-09techbrophobica&#34;&gt;&lt;a href=&#34;/techbrophobic/&#34; class=&#34;wikilink&#34; data-title=&#34;Techbrophobic&#34; data-description=&#34;I just heard someone drop the this term and it kinda fits a lot of shit on the internet right now. Arguing that its OK to question AI, its OK to like it, its...&#34; data-date=&#34;2025-11-09&#34; data-preview=&#34;I just heard someone drop the this term and it kinda fits a lot of shit on the internet right now. Arguing that its OK to question AI, its OK to like it, its...&#34;&gt;Techbrophobic&lt;/a&gt; &lt;a href=&#34;#a-hreftechbrophobic-classwikilink-data-titletechbrophobic-data-descriptioni-just-heard-someone-drop-the-this-term-and-it-kinda-fits-a-lot-of-shit-on-the-internet-right-now-arguing-that-its-ok-to-question-ai-its-ok-to-like-it-its-data-date2025-11-09techbrophobica&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I feel this term strongly.  I find ai tooling useful, but the industry and hype bros bring a bad taste.&lt;/p&gt;&#xA;&lt;p&gt;The tools do not not do everything right, you still have to think, watch its output.  You have to put the work in to do proper software engineering.  Its not a magic pill, but it has the ability to implement ideas, plans, very quickly.&lt;/p&gt;&#xA;&lt;p&gt;Also the whole industry creeps me out.  The theft that happened to get here was wrong.  AI shovoled into everything as slop sucks.  The stock market pump is sus.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Portajohn Progress 01 10 2026</title>
    <id>https://waylonwalker.com/shots/portajohn-progress-01-10-2026/</id>
    <updated>2026-01-10T18:58:03Z</updated>
    <published>2026-01-10T18:58:03Z</published>
    <link href="https://waylonwalker.com/shots/portajohn-progress-01-10-2026/" rel="alternate" type="text/html"></link>
    <summary type="text">A cutaway of the portajohn keyboard progress, it shows the internal trace from the bottom along with built in supports, reset button, power button, microcontroller cutout. I&#39;m getting very happy with the progress. I really like the feel of the latest build, and can&#39;t wait to have this solid build out there.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/a6e31df0-b278-457c-9acd-f8ba81afc12b.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/a6e31df0-b278-457c-9acd-f8ba81afc12b.webp&#34; alt=&#34;portajohn progress 01 10 2026&#34;/ data-glightbox=&#34;description: portajohn progress 01 10 2026&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A cutaway of the portajohn keyboard progress, it shows the internal trace from the bottom along with built in supports, reset button, power button, microcontroller cutout.  I’m getting very happy with the progress.  I really like the feel of the latest build, and can’t wait to have this solid build out there.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>opencode init prompt</title>
    <id>https://waylonwalker.com/opencode-init-prompt/</id>
    <updated>2026-01-09T13:32:12Z</updated>
    <published>2026-01-09T13:32:12Z</published>
    <link href="https://waylonwalker.com/opencode-init-prompt/" rel="alternate" type="text/html"></link>
    <summary type="text">This is opencode&#39;s init prompt.</summary>
    <content type="html">&lt;p&gt;This is opencode’s init prompt.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Please analyze this codebase and create an AGENTS.md file containing:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;1.&lt;/span&gt; Build/lint/test commands - especially for running a single test&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;2.&lt;/span&gt; Code style guidelines including imports, formatting, types, naming conventions, error handling, etc.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;The file you create will be given to agentic coding agents (such as yourself) that operate in this repository. Make it about 150 lines long.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;If there are Cursor rules (in .cursor/rules/ or .cursorrules) or Copilot rules (in .github/copilot-instructions.md), make sure to include them.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;If there&amp;#39;s already an AGENTS.md, improve it if it&amp;#39;s located in &amp;lt;dir&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Og-Sample</title>
    <id>https://waylonwalker.com/og-sample/</id>
    <updated>2026-01-09T08:19:29Z</updated>
    <published>2026-01-09T08:19:29Z</published>
    <link href="https://waylonwalker.com/og-sample/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m making an effort to make my og images better yet again, I&#39;m going for that next 10% better. I really like my og images, but there are some title sizes...</summary>
    <content type="html">&lt;p&gt;I’m making an effort to make my &lt;a href=&#34;/og/&#34; class=&#34;glossary-term&#34; title=&#34;OG is short for open graph, a set of standard meta tags that are used for social media sharing. This is what tells other websites how to describe and display...&#34;&gt;og&lt;/a&gt; images better yet again, I’m going for that&#xA;next 10% better.  I really like my og images, but there are some title sizes&#xA;that overflow.  This page is a page to help debug.  How I make these og images&#xA;is for another day.&lt;/p&gt;&#xA;&lt;h2 id=&#34;script&#34;&gt;Script &lt;a href=&#34;#script&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I use my own static site generator &lt;a href=&#34;/markata/&#34; class=&#34;wikilink&#34; data-title=&#34;markata&#34; data-description=&#34;This post is a work in progress.&#34; data-date=&#34;2024-05-30&#34; data-preview=&#34;This post is a work in progress.&#34;&gt;markata&lt;/a&gt;.  I can use it to generate a&#xA;list of posts wrapped in their og image.  I use itertools to do a groupby so&#xA;that I can do roughly every 5 characters larger, and see a wide variety of&#xA;sizes.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;markata&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Markata&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;itertools&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;groupby&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;markata&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Markata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;lens&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;length&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;slug&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;slug&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;post&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;posts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;lens_sorted&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;sorted&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lens&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;lambda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;length&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;groups&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;g&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;groupby&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lens_sorted&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;lambda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;length&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;//&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;posts&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;g&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;groups&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;values&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ogs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;[![&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;title&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;](https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;slug&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4)](https://waylonwalker.com/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;slug&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;/og/)&amp;#39;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;post&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;posts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ogs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;og-sample&#34;&gt;OG-Sample &lt;a href=&#34;#og-sample&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/sample/og/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/sample/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4&#34; alt=&#34;sample&#34;/ data-glightbox=&#34;description: sample&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/kedro/og/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/kedro/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4&#34; alt=&#34;Kedro&#34;/ data-glightbox=&#34;description: Kedro&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/weeknote-0/og/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/weeknote-0/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4&#34; alt=&#34;Weeknote 0&#34;/ data-glightbox=&#34;description: Weeknote 0&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/upcoming-streams/og/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/upcoming-streams/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4&#34; alt=&#34;Upcoming Stream&#34;/ data-glightbox=&#34;description: Upcoming Stream&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/codeit-bro-interview/og/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/codeit-bro-interview/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4&#34; alt=&#34;Codeit Bro Interview&#34;/ data-glightbox=&#34;description: Codeit Bro Interview&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/doomlab7-homelab-argocd/og/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/doomlab7-homelab-argocd/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4&#34; alt=&#34;⭐ Doomlab7 homelab-argocd&#34;/ data-glightbox=&#34;description: ⭐ Doomlab7 homelab-argocd&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/heathdbrown-python-code-tips/og/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/heathdbrown-python-code-tips/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4&#34; alt=&#34;⭐ heathdbrown python_code_tips&#34;/ data-glightbox=&#34;description: ⭐ heathdbrown python_code_tips&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/making-good-documentation-in-python/og/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/making-good-documentation-in-python/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4&#34; alt=&#34;Making good documentation in python&#34;/ data-glightbox=&#34;description: Making good documentation in python&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/s3-datascience/og/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/s3-datascience/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4&#34; alt=&#34;What DataScientists Should Know About S3&#34;/ data-glightbox=&#34;description: What DataScientists Should Know About S3&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/nvim-treesitter-nvim-treesitter-textobjects/og/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/nvim-treesitter-nvim-treesitter-textobjects/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4&#34; alt=&#34;⭐ nvim-treesitter nvim-treesitter-textobjects&#34;/ data-glightbox=&#34;description: ⭐ nvim-treesitter nvim-treesitter-textobjects&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/dataengineerone-kedro-streaming-twitter-pipeline/og/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/dataengineerone-kedro-streaming-twitter-pipeline/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4&#34; alt=&#34;⭐ dataengineerone kedro-streaming-twitter-pipeline&#34;/ data-glightbox=&#34;description: ⭐ dataengineerone kedro-streaming-twitter-pipeline&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/screenshot-to-blog/og/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/screenshot-to-blog/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4&#34; alt=&#34;How I Quickly Capture Screenshots directly into My Blog&#34;/ data-glightbox=&#34;description: How I Quickly Capture Screenshots directly into My Blog&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/looking-for-a-heroku-replacement/og/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/looking-for-a-heroku-replacement/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4&#34; alt=&#34;Looking for a Heroku replacement, What I found was shocking!&#34;/ data-glightbox=&#34;description: Looking for a Heroku replacement, What I found was shocking!&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/thoughts-853/og/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/thoughts-853/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4&#34; alt=&#34;💭 My Bed Doesn’t Work Because of AWS Outage? TheStandup - YouTube&#34;/ data-glightbox=&#34;description: 💭 My Bed Doesn’t Work Because of AWS Outage? TheStandup - YouTube&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/shots/dont-starve-together-session-one---getting-into-it-with-a-clockwork-bishop/og/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/shots/dont-starve-together-session-one---getting-into-it-with-a-clockwork-bishop/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4&#34; alt=&#34;Dont Starve Together Session One - Getting Into It With A Clockwork Bishop&#34;/ data-glightbox=&#34;description: Dont Starve Together Session One - Getting Into It With A Clockwork Bishop&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;shots&#34;&gt;shots &lt;a href=&#34;#shots&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I also do &lt;a href=&#34;/tags/shots/&#34; class=&#34;wikilink&#34; data-title=&#34;Posts tagged: shots&#34; data-description=&#34;All posts with the tag &amp;#34;shots&amp;#34;&#34; data-preview=&#34;All posts with the tag &amp;#34;shots&amp;#34;&#34;&gt;Posts tagged: shots&lt;/a&gt; posts that change the og template quite a bit by adding&#xA;the image to the page.  I’ll do the same script, but add a filter to the&#xA;images.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;markata&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Markata&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;itertools&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;groupby&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;markata&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Markata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;lens&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;length&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;slug&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;slug&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;post&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;templateKey==&amp;#34;shots&amp;#34; and &amp;#34;family&amp;#34; not in tags&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;lens_sorted&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;sorted&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lens&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;lambda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;length&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;groups&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;g&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;groupby&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lens_sorted&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;lambda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;length&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;//&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;posts&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;g&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;groups&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;values&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ogs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;[![&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;title&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;](https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;slug&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4)](https://waylonwalker.com/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;slug&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;/og/)&amp;#39;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;post&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;posts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n\n&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ogs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/shots/funk-track-1/og/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/shots/funk-track-1/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4&#34; alt=&#34;Funk Track 1&#34;/ data-glightbox=&#34;description: Funk Track 1&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/shots/hornet-on-a-bench/og/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/shots/hornet-on-a-bench/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4&#34; alt=&#34;Hornet On A Bench&#34;/ data-glightbox=&#34;description: Hornet On A Bench&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/shots/apple-boxes-complete/og/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/shots/apple-boxes-complete/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4&#34; alt=&#34;Apple Boxes Complete&#34;/ data-glightbox=&#34;description: Apple Boxes Complete&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/shots/bambu-poop-flinger-jammed/og/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/shots/bambu-poop-flinger-jammed/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4&#34; alt=&#34;Bambu Poop Flinger Jammed&#34;/ data-glightbox=&#34;description: Bambu Poop Flinger Jammed&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/shots/first-fingerboard-in-the-press/og/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/shots/first-fingerboard-in-the-press/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4&#34; alt=&#34;First Fingerboard In The Press&#34;/ data-glightbox=&#34;description: First Fingerboard In The Press&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/shots/wyatt-drew-a-watertower-in-aesprite/og/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/shots/wyatt-drew-a-watertower-in-aesprite/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4&#34; alt=&#34;Wyatt Drew A Watertower In Aesprite&#34;/ data-glightbox=&#34;description: Wyatt Drew A Watertower In Aesprite&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/shots/design-for-bosch-colt-dust-collection-v1/og/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/shots/design-for-bosch-colt-dust-collection-v1/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4&#34; alt=&#34;Design For Bosch Colt Dust Collection V1&#34;/ data-glightbox=&#34;description: Design For Bosch Colt Dust Collection V1&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/shots/dont-starve-together-session-one---nooo-luuucy/og/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/shots/dont-starve-together-session-one---nooo-luuucy/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4&#34; alt=&#34;Dont Starve Together Session One - Nooo Luuucy&#34;/ data-glightbox=&#34;description: Dont Starve Together Session One - Nooo Luuucy&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/shots/dont-starve-together-session-one---setting-up-base/og/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/shots/dont-starve-together-session-one---setting-up-base/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4&#34; alt=&#34;Dont Starve Together Session One - Setting Up Base&#34;/ data-glightbox=&#34;description: Dont Starve Together Session One - Setting Up Base&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/shots/dont-starve-together-session-one---opening-up-the-garden/og/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/shots/dont-starve-together-session-one---opening-up-the-garden/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4&#34; alt=&#34;Dont Starve Together Session One - Opening Up The Garden&#34;/ data-glightbox=&#34;description: Dont Starve Together Session One - Opening Up The Garden&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/shots/first-encounter-with-a-tall-bird/og/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/shots/first-encounter-with-a-tall-bird/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4&#34; alt=&#34;Dont Starve Together Session One - First Encounter With A Tall Bird&#34;/ data-glightbox=&#34;description: Dont Starve Together Session One - First Encounter With A Tall Bird&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/shots/dont-starve-together-session-one---getting-into-it-with-a-clockwork-bishop/og/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://waylonwalker.com/shots/dont-starve-together-session-one---getting-into-it-with-a-clockwork-bishop/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;format=jpg&amp;amp;v=4&#34; alt=&#34;Dont Starve Together Session One - Getting Into It With A Clockwork Bishop&#34;/ data-glightbox=&#34;description: Dont Starve Together Session One - Getting Into It With A Clockwork Bishop&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>POG</title>
    <id>https://waylonwalker.com/pog/</id>
    <updated>2026-01-08T20:17:27Z</updated>
    <published>2026-01-08T20:17:27Z</published>
    <link href="https://waylonwalker.com/pog/" rel="alternate" type="text/html"></link>
    <summary type="text">**: **lay **f the **ame - used to express shock or excitement after a noteworthy moment.</summary>
    <content type="html">&lt;p&gt;&lt;strong&gt;POG&lt;/strong&gt;: &lt;strong&gt;P&lt;/strong&gt;lay &lt;strong&gt;O&lt;/strong&gt;f the &lt;strong&gt;G&lt;/strong&gt;ame - used to express shock or excitement&#xA;after a noteworthy moment.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Broodmother Ending</title>
    <id>https://waylonwalker.com/shots/broodmother-ending/</id>
    <updated>2026-01-08T17:31:33Z</updated>
    <published>2026-01-08T17:31:33Z</published>
    <link href="https://waylonwalker.com/shots/broodmother-ending/" rel="alternate" type="text/html"></link>
    <summary type="text">Broodmother Ending</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/c7d45133-c8c3-469f-9572-6036704309cb.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/c7d45133-c8c3-469f-9572-6036704309cb.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/c7d45133-c8c3-469f-9572-6036704309cb.mp4&#34; type=&#34;video/mp4&#34;&gt;Broodmother Ending&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Broodmother Ending&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Broodmother</title>
    <id>https://waylonwalker.com/shots/broodmother/</id>
    <updated>2026-01-08T17:29:43Z</updated>
    <published>2026-01-08T17:29:43Z</published>
    <link href="https://waylonwalker.com/shots/broodmother/" rel="alternate" type="text/html"></link>
    <summary type="text">Broodmother</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/33725801-44ae-45ef-85e8-a0dc802ab775.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/33725801-44ae-45ef-85e8-a0dc802ab775.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/33725801-44ae-45ef-85e8-a0dc802ab775.mp4&#34; type=&#34;video/mp4&#34;&gt;Broodmother&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Broodmother&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2026 Resolutions</title>
    <id>https://waylonwalker.com/2026-resolutions/</id>
    <updated>2026-01-08T10:48:12Z</updated>
    <published>2026-01-08T10:48:12Z</published>
    <link href="https://waylonwalker.com/2026-resolutions/" rel="alternate" type="text/html"></link>
    <summary type="text">It&#39;s that time of year, Coming back to work out of a big break and thinking about big changes.</summary>
    <content type="html">&lt;p&gt;It’s that time of year, Coming back to work out of a big break and thinking&#xA;about big changes.&lt;/p&gt;&#xA;&lt;h2 id=&#34;daily-notes&#34;&gt;Daily Notes &lt;a href=&#34;#daily-notes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Keep up with daily notes, maybe not here, I tend to have more targeted notes&#xA;here with full blog posts, but for work daily notes is &lt;a href=&#34;/pog/&#34; class=&#34;glossary-term&#34; title=&#34;**: **lay **f the **ame - used to express shock or excitement after a noteworthy moment.&#34;&gt;POG&lt;/a&gt; and needs to be&#xA;leaned on.  LLM’s do really good at ingesting markdown and reminding me of&#xA;things that I need to do, or did, or need to follow up on.&lt;/p&gt;&#xA;&lt;h2 id=&#34;reader&#34;&gt;Reader &lt;a href=&#34;#reader&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Social media is changing, quickly becoming enshitified, I enjoy interacting&#xA;with some of the people I’ve met online, reading their opinions, and learning&#xA;from their experiences.  I don’t need their hot takes, don’t care about their&#xA;political takes.  I like boring posts that typically fade out of whats picked&#xA;up on the algorithm.  I like a good 5-10 minute read or a long form podcast&#xA;talk.  I will be aggressively collecting more rss feeds to read and keep up&#xA;with.&lt;/p&gt;&#xA;&lt;h2 id=&#34;neovim&#34;&gt;(Neo)Vim &lt;a href=&#34;#neovim&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’ve had these bad habits in my config for years, from day one of using vim.&#xA;It’s time to kill these. &lt;code&gt;jjgww&lt;/code&gt;.  I killed them this morning, we will see how&#xA;long I keep typing out &lt;code&gt;jj&lt;/code&gt; all over my editor before I fix it mentally.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-- bad habits&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim.keymap.set&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;i&amp;#34;&lt;/span&gt;, &lt;span class=&#34;s2&#34;&gt;&amp;#34;jj&amp;#34;&lt;/span&gt;, &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;esc&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim.keymap.set&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;i&amp;#34;&lt;/span&gt;, &lt;span class=&#34;s2&#34;&gt;&amp;#34;jk&amp;#34;&lt;/span&gt;, &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;esc&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim.keymap.set&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;i&amp;#34;&lt;/span&gt;, &lt;span class=&#34;s2&#34;&gt;&amp;#34;JJ&amp;#34;&lt;/span&gt;, &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;esc&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim.keymap.set&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;i&amp;#34;&lt;/span&gt;, &lt;span class=&#34;s2&#34;&gt;&amp;#34;jJ&amp;#34;&lt;/span&gt;, &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;esc&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim.keymap.set&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;i&amp;#34;&lt;/span&gt;, &lt;span class=&#34;s2&#34;&gt;&amp;#34;Jj&amp;#34;&lt;/span&gt;, &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;esc&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition tip&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Tip&lt;/p&gt;&#xA;&lt;p&gt;I need to lean on &lt;code&gt;&amp;lt;C-o&amp;gt;&lt;/code&gt; a little more to run single commands in normal&#xA;mode from insert mode.  The pattern that is hitting me hard right now is&#xA;&lt;code&gt;jjgwwA&lt;/code&gt; insert mode, format, insert at end of line.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;distrobox&#34;&gt;Distrobox &lt;a href=&#34;#distrobox&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I was a heavy user of distrobox as my primary dev environment on Bazzite and I&#xA;need to get back there. I have a lot of stuff installed on this current system.&#xA;I’ve been sloppy.  I am not sure I was planning on staying on arch/hyprland&#xA;long, I did it to do it with my son, his got borked a month ago and he is back&#xA;to bazzite, I think I’ll be back there and want to be ready to float freely&#xA;between distros.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;clean dotfiles&lt;/li&gt;&#xA;&lt;li&gt;work from a distrobox image that I make&lt;/li&gt;&#xA;&lt;li&gt;keep working projects backed up&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;vibe-coding&#34;&gt;&lt;a href=&#34;/vibe-coding/&#34; class=&#34;glossary-term&#34; title=&#34;A coding style popularized in 2025. It is the act of using LLMs to generate code for an application, but the author never looks at the output. The author...&#34;&gt;Vibe Coding&lt;/a&gt; &lt;a href=&#34;#vibe-coding&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Agents are the future, people that I really trust are on both sides of the&#xA;argument.  Some saying they stopped coding months ago and claude does&#xA;everything for them.  Some in between, some are completely against.&lt;/p&gt;&#xA;&lt;p&gt;It feels like the tooling has really taken off over the past few months, the&#xA;models are getting better, but not at the same rate they were.  The tools are&#xA;really making this possible.&lt;/p&gt;&#xA;&lt;p&gt;My experience is quite mixed, I’m often impressed with what it does, and&#xA;appalled at how bad it does other things.  I just want it to do what I mean&#xA;with the fewest words possible.  I’ve been working on deeper plans more and&#xA;more, still with mixed results.  With larger plans the models seem to do more&#xA;work, but still not getting that great experience every time.&lt;/p&gt;&#xA;&lt;p&gt;I really need to get my workspaces workflow down, have models working in a&#xA;separate workspace, and be willing to throw away shit code quickly and try&#xA;again from another angle.&lt;/p&gt;&#xA;&lt;p&gt;The future is a deep understanding on what needs to be done, how do to it, and&#xA;not the syntax.  The tools are getting better.  You need to know less and less&#xA;about them, less and less about models as the auto routers get better.  The&#xA;core skills of architecture, design, and implementation are more important than&#xA;ever.&lt;/p&gt;&#xA;&lt;p&gt;Last year I was able to vibe out some POC work, but still not letting the&#xA;agents touch my production code.  It wasn’t there for me, I probably did not&#xA;have access to the really good stuff either.  Now I think what I have access to&#xA;is catching up to Claude.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;sandbox them&lt;/li&gt;&#xA;&lt;li&gt;quick to POC&lt;/li&gt;&#xA;&lt;li&gt;quick to move on from broken attempts&lt;/li&gt;&#xA;&lt;li&gt;learn to lead&lt;/li&gt;&#xA;&lt;li&gt;learn to let go of syntax opinions&lt;/li&gt;&#xA;&lt;li&gt;learn what makes good products/tools/apis hold the vibes to this.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;There’s something here, very respectable people are betting on this, but its&#xA;not working for me, I don’t think I have the right tools.  I already have it a&#xA;day, and got a few hundred LOC out while theo is claiming opus can do 10k.&lt;/p&gt;&#xA;&lt;h2 id=&#34;not-everything-will-be-a-side-hustle&#34;&gt;Not Everything will be a side hustle &lt;a href=&#34;#not-everything-will-be-a-side-hustle&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’ve tried to start too many side hustles, none of them work out.  Thinking of&#xA;them as a side hustle steals the joy of the hobby.  I have too much going on&#xA;outside of work for adding things like this not to add stress to already&#xA;stressful situations, I need to reduce stress and find the joy and happiness in&#xA;side projects and not turn everything into something more.&lt;/p&gt;&#xA;&lt;h2 id=&#34;keebs&#34;&gt;Keebs &lt;a href=&#34;#keebs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This one is fresh on the mind only because I just built out a new keyboard for&#xA;work.  I want to have a good robust build at home, work, and potentially have a&#xA;good backup.  I have a good design that is very cheap and fairly easy to build,&#xA;but is quite time consuming.  I am going to put some work in early this year to&#xA;get a couple of clones.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/9cf75771-e3a5-428f-a3a9-0e32fda0e037.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/9cf75771-e3a5-428f-a3a9-0e32fda0e037.webp&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;more-offline&#34;&gt;More Offline &lt;a href=&#34;#more-offline&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Looking back at 2025, I actually did fairly well of doing a bit more offline.&#xA;It’s been a hard transition out of pandemic times for our family, we had a lot&#xA;of extra health precautions that lasted longer than most other people.&lt;/p&gt;&#xA;&lt;p&gt;This year I should do more of this.  More bike rides, more skate, more basement&#xA;hangouts, more art.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/46091653-f759-4a53-b3b7-e9e6226a5a12.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/46091653-f759-4a53-b3b7-e9e6226a5a12.webp&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;New dart board in the basement&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;More creativity.  I designed and built fingerboard obstacles to work like legos with 3/4&amp;#34; plywood last November.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/fb569b3a-d91d-4ad4-92f8-12e83c39fbda.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/fb569b3a-d91d-4ad4-92f8-12e83c39fbda.webp&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;building a fingerboard park in the basement&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;More building&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/f34e94d4-c6d4-4a89-96f7-14f67c954307.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/f34e94d4-c6d4-4a89-96f7-14f67c954307.webp&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/48e6a2ef-a4db-462e-acda-16b270e7053d.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/48e6a2ef-a4db-462e-acda-16b270e7053d.webp&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;building set for Jolly Holiday with Rhiannon&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/44be3230-29cc-4a5b-a495-4dd7c4e11c2b.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/44be3230-29cc-4a5b-a495-4dd7c4e11c2b.webp&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;building boxes for Jolly Holiday with Wyatt&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;More bike rides, fewer nice days wasted, they are relaxing and get good energy out.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/f9199d9b-74dc-4650-b1cf-2ac1ffd50e02.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/f9199d9b-74dc-4650-b1cf-2ac1ffd50e02.webp&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Bike Rides&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Faydown Cloak</title>
    <id>https://waylonwalker.com/shots/faydown-cloak/</id>
    <updated>2026-01-08T07:43:46Z</updated>
    <published>2026-01-08T07:43:46Z</published>
    <link href="https://waylonwalker.com/shots/faydown-cloak/" rel="alternate" type="text/html"></link>
    <summary type="text">Faydown Cloak</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/2e0c80ed-f73a-4df5-855f-a0c320a415b3.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/2e0c80ed-f73a-4df5-855f-a0c320a415b3.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/2e0c80ed-f73a-4df5-855f-a0c320a415b3.mp4&#34; type=&#34;video/mp4&#34;&gt;Faydown Cloak&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Faydown Cloak&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Hornet On A Bench</title>
    <id>https://waylonwalker.com/shots/hornet-on-a-bench/</id>
    <updated>2026-01-05T20:41:33Z</updated>
    <published>2026-01-05T20:41:33Z</published>
    <link href="https://waylonwalker.com/shots/hornet-on-a-bench/" rel="alternate" type="text/html"></link>
    <summary type="text">Hornet sitting on a bench. I 3d printed, painted, and assembled this set. I really like how the bronze bench with gold highlights turned out. The distressing on her nail and dress look great in person, and don&#39;t come through the best the way the image is lit.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/5eb1c0c6-8f48-4b36-82ac-62a35b6063e4.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/5eb1c0c6-8f48-4b36-82ac-62a35b6063e4.webp&#34; alt=&#34;Hornet on a bench&#34;/ data-glightbox=&#34;description: Hornet on a bench&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Hornet sitting on a bench.  I 3d printed, painted, and assembled this set.  I really like how the bronze bench with gold highlights turned out.  The distressing on her nail and dress look great in person, and don’t come through the best the way the image is lit.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tpope vim-speeddating</title>
    <id>https://waylonwalker.com/tpope-vim-speeddating/</id>
    <updated>2026-01-04T23:10:42Z</updated>
    <published>2026-01-04T23:10:42Z</published>
    <link href="https://waylonwalker.com/tpope-vim-speeddating/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered vim-speeddating by tpope, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/tpope/vim-speeddating&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vim-speeddating&lt;/a&gt; by &lt;a href=&#34;https://github.com/tpope&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tpope&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;speeddating.vim: use CTRL-A/CTRL-X to increment dates, times, and more&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ JaKooLit Wallpaper-Bank</title>
    <id>https://waylonwalker.com/jakoolit-wallpaper-bank/</id>
    <updated>2026-01-04T21:41:57Z</updated>
    <published>2026-01-04T21:41:57Z</published>
    <link href="https://waylonwalker.com/jakoolit-wallpaper-bank/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out JaKooLit and their project Wallpaper-Bank.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/JaKooLit&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;JaKooLit&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/JaKooLit/Wallpaper-Bank&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Wallpaper-Bank&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Additional wallpapers which will be offered to users for my hyprland scripts&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Kickflip Down The 3 Stair - Fingerboarding</title>
    <id>https://waylonwalker.com/shots/kickflip-down-the-3-stair---fingerboarding/</id>
    <updated>2026-01-04T19:55:43Z</updated>
    <published>2026-01-04T19:55:43Z</published>
    <link href="https://waylonwalker.com/shots/kickflip-down-the-3-stair---fingerboarding/" rel="alternate" type="text/html"></link>
    <summary type="text">Kickflip down the 3 set using my new hand made 5 ply fingerboard.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/6f042a91-1e90-445d-b91d-8d4ee187af2c.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/6f042a91-1e90-445d-b91d-8d4ee187af2c.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/6f042a91-1e90-445d-b91d-8d4ee187af2c.mp4&#34; type=&#34;video/mp4&#34;&gt;kickflip down the 3 stair - fingerboarding&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Kickflip down the 3 set using my new hand made 5 ply fingerboard.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tpope vim-speeddating</title>
    <id>https://waylonwalker.com/til/tpope-vim-speeddating/</id>
    <updated>2026-01-04T16:59:33Z</updated>
    <published>2026-01-04T16:59:33Z</published>
    <link href="https://waylonwalker.com/til/tpope-vim-speeddating/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I discovered vim-speeddating by tpope. I&#39;m sure I&#39;ve seen years ago but it did not click for my workflow until today. I often go through pictures from...</summary>
    <content type="html">&lt;p&gt;Today I discovered &lt;a href=&#34;https://github.com/tpope/vim-speeddating&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vim-speeddating&lt;/a&gt;&#xA;by tpope.  I’m sure I’ve seen years ago but it did not click for my workflow&#xA;until today.  I often go through pictures from my phone for the past few days&#xA;and make &lt;a href=&#34;/tags/shots/&#34; class=&#34;wikilink&#34; data-title=&#34;Posts tagged: shots&#34; data-description=&#34;All posts with the tag &amp;#34;shots&amp;#34;&#34; data-preview=&#34;All posts with the tag &amp;#34;shots&amp;#34;&#34;&gt;Posts tagged: shots&lt;/a&gt; posts, but I want to date them to about when the image was&#xA;taken most of the time.  This allows me to quickly bump days up and down using&#xA;&lt;code&gt;c-a&lt;/code&gt; and &lt;code&gt;c-x&lt;/code&gt; even around the new year.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/18c876c3-02ea-4c77-9f62-cdbb1bb759a1.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/18c876c3-02ea-4c77-9f62-cdbb1bb759a1.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/18c876c3-02ea-4c77-9f62-cdbb1bb759a1.mp4&#34; type=&#34;video/mp4&#34;&gt;Your browser does not support the video tag.&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Sound on, listen to those new switches.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>I&#39;m Loving These Akko Creamy Yellow V3s</title>
    <id>https://waylonwalker.com/shots/i&#39;m-loving-these-akko-creamy-yellow-v3s/</id>
    <updated>2026-01-04T16:22:35Z</updated>
    <published>2026-01-04T16:22:35Z</published>
    <link href="https://waylonwalker.com/shots/i&#39;m-loving-these-akko-creamy-yellow-v3s/" rel="alternate" type="text/html"></link>
    <summary type="text">my latest porta john full mx build with Akko Creamy Yellow V3s installed on the right side and a hodge podge of Durock Lupine and kaihl browns on the left.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/cac00007-2c7a-415e-b19e-a327c04c7abd.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/cac00007-2c7a-415e-b19e-a327c04c7abd.webp&#34; alt=&#34;I’m loving these Akko Creamy Yellow V3s&#34;/ data-glightbox=&#34;description: I’m loving these Akko Creamy Yellow V3s&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;my latest porta john full mx build with Akko Creamy Yellow V3s installed on the right side and a hodge podge of Durock Lupine and kaihl browns on the left.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>new keeb so good</title>
    <id>https://waylonwalker.com/ping-16/</id>
    <updated>2026-01-03T21:03:13Z</updated>
    <published>2026-01-03T21:03:13Z</published>
    <link href="https://waylonwalker.com/ping-16/" rel="alternate" type="text/html"></link>
    <summary type="text">New keeb feeling so good I don&#39;t want to leave it. I&#39;m going to go from having my worse favorite at work, to having my new favorite at work.</summary>
    <content type="html">&lt;p&gt;New keeb feeling so good I don’t want to leave it.  I’m going to go from having&#xA;my worse favorite at work, to having my new favorite at work.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/9cf75771-e3a5-428f-a3a9-0e32fda0e037.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/9cf75771-e3a5-428f-a3a9-0e32fda0e037.webp&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ steveyegge gastown</title>
    <id>https://waylonwalker.com/steveyegge-gastown/</id>
    <updated>2026-01-02T18:43:02Z</updated>
    <published>2026-01-02T18:43:02Z</published>
    <link href="https://waylonwalker.com/steveyegge-gastown/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about gastown, an amazing project by steveyegge. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/steveyegge/gastown&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gastown&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/steveyegge&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;steveyegge&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Gas Town - multi-agent workspace manager&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>light mode screen recording css</title>
    <id>https://waylonwalker.com/light-mode-screen-recording-css/</id>
    <updated>2026-01-02T10:29:10Z</updated>
    <published>2026-01-02T10:29:10Z</published>
    <link href="https://waylonwalker.com/light-mode-screen-recording-css/" rel="alternate" type="text/html"></link>
    <summary type="text">Yesterday I wrote about a way to do light-mode-screen-recording to convert to light mode from dark mode with ffmpeg. I was wondering if it could be done...</summary>
    <content type="html">&lt;p&gt;Yesterday I wrote about a way to do &lt;a href=&#34;/light-mode-screen-recording/&#34; class=&#34;wikilink&#34; data-title=&#34;light mode screen recording&#34; data-description=&#34;I saw this tip from Cassidoo and had to try it out for myself. I kicked on a screen recording right from where my terminal was, converted it, and it actually...&#34; data-date=&#34;2026-01-01&#34; data-preview=&#34;I saw this tip from Cassidoo and had to try it out for myself. I kicked on a screen recording right from where my terminal was, converted it, and it actually...&#34;&gt;light mode screen recording&lt;/a&gt; to&#xA;convert to light mode from dark mode with ffmpeg.  I was wondering if it could&#xA;be done entirely on the front end for web applications.  Turns out you can.&#xA;I’m sure there are limited wikis and site builders that don’t allow adding&#xA;style like this, but it works if you can.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;video&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;https://dropper.waylonwalker.com/file/1c53dbcb-4b84-4e94-9f04-a42986ab3fa1.mp4?width=800&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;controls&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;filter: invert(1) hue-rotate(180deg) contrast(1.2) saturate(1.1);&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;video&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;video src=&#34;https://dropper.waylonwalker.com/file/1c53dbcb-4b84-4e94-9f04-a42986ab3fa1.mp4?width=800&#34; controls=&#34;&#34; style=&#34;filter: invert(1) hue-rotate(0deg) contrast(1.2) saturate(1.1);&#34;&gt;&lt;/video&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;0 deg hue rotate&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;video src=&#34;https://dropper.waylonwalker.com/file/1c53dbcb-4b84-4e94-9f04-a42986ab3fa1.mp4?width=800&#34; controls=&#34;&#34; style=&#34;filter: invert(1) hue-rotate(90deg) contrast(1.2) saturate(1.1);&#34;&gt;&lt;/video&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;90 deg hue rotate&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;video src=&#34;https://dropper.waylonwalker.com/file/1c53dbcb-4b84-4e94-9f04-a42986ab3fa1.mp4?width=800&#34; controls=&#34;&#34; style=&#34;filter: invert(1) hue-rotate(180deg) contrast(1.2) saturate(1.1);&#34;&gt;&lt;/video&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;180 deg hue rotate&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;video src=&#34;https://dropper.waylonwalker.com/file/1c53dbcb-4b84-4e94-9f04-a42986ab3fa1.mp4?width=800&#34; controls=&#34;&#34; style=&#34;filter: invert(1) hue-rotate(270deg) contrast(1.2) saturate(1.1);&#34;&gt;&lt;/video&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;270 deg hue rotate&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ThePrimeagen 99</title>
    <id>https://waylonwalker.com/theprimeagen-99/</id>
    <updated>2026-01-02T04:36:11Z</updated>
    <published>2026-01-02T04:36:11Z</published>
    <link href="https://waylonwalker.com/theprimeagen-99/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out 99 by ThePrimeagen. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/ThePrimeagen/99&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;99&lt;/a&gt; by &lt;a href=&#34;https://github.com/ThePrimeagen&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ThePrimeagen&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;Neovim AI agent done right&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>light mode screen recording</title>
    <id>https://waylonwalker.com/light-mode-screen-recording/</id>
    <updated>2026-01-01T10:14:17Z</updated>
    <published>2026-01-01T10:14:17Z</published>
    <link href="https://waylonwalker.com/light-mode-screen-recording/" rel="alternate" type="text/html"></link>
    <summary type="text">I saw this tip from Cassidoo and had to try it out for myself. I kicked on a screen recording right from where my terminal was, converted it, and it actually...</summary>
    <content type="html">&lt;p&gt;I saw this tip from&#xA;&lt;a href=&#34;https://cassidoo.co/post/ffmpeg-dark-light/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/cassidoo.co.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/cassidoo.co.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Cassidoo&lt;/a&gt;&#xA;and had to try it out for myself.  I kicked on a&#xA;screen recording right from where my terminal&#xA;was, converted it, and it actually looks pretty&#xA;good.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ffmpeg &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;   -i screenrecording-2026-01-01_10-10-49.mp4 &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;   -vf &lt;span class=&#34;s2&#34;&gt;&amp;#34;negate,hue=h=180,eq=contrast=1.2:saturation=1.1&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;   screenrecording-2026-01-01_10-10-49-light.mp4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/1c53dbcb-4b84-4e94-9f04-a42986ab3fa1.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/1c53dbcb-4b84-4e94-9f04-a42986ab3fa1.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/1c53dbcb-4b84-4e94-9f04-a42986ab3fa1.mp4&#34; type=&#34;video/mp4&#34;&gt;Your browser does not support the video tag.&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Dark Mode&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/de4e3378-6df2-45b1-84d5-0cc773ceb3c5.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/de4e3378-6df2-45b1-84d5-0cc773ceb3c5.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/de4e3378-6df2-45b1-84d5-0cc773ceb3c5.mp4&#34; type=&#34;video/mp4&#34;&gt;Your browser does not support the video tag.&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Light Mode&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There are a few unsettling things about it, but&#xA;overall I feel like it was a success.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>My First Hand Pressed Fingerboard Complete</title>
    <id>https://waylonwalker.com/shots/my-first-hand-pressed-fingerboard-complete/</id>
    <updated>2025-12-29T19:37:27Z</updated>
    <published>2025-12-29T19:37:27Z</published>
    <link href="https://waylonwalker.com/shots/my-first-hand-pressed-fingerboard-complete/" rel="alternate" type="text/html"></link>
    <summary type="text">My first hand pressed fingerboard with teak tuning trucks. It has a purple bottom layer. Sitting on the bottom of a 3-stair.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/ad3118cc-8425-4462-a2de-5f5aefd645b5.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/ad3118cc-8425-4462-a2de-5f5aefd645b5.webp&#34; alt=&#34;my first hand pressed fingerboard complete&#34;/ data-glightbox=&#34;description: my first hand pressed fingerboard complete&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;My first hand pressed fingerboard with teak tuning trucks.  It has a purple bottom layer. Sitting on the bottom of a 3-stair.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>New Dart Board In The Basement</title>
    <id>https://waylonwalker.com/shots/new-dart-board-in-the-basement/</id>
    <updated>2025-12-29T15:55:20Z</updated>
    <published>2025-12-29T15:55:20Z</published>
    <link href="https://waylonwalker.com/shots/new-dart-board-in-the-basement/" rel="alternate" type="text/html"></link>
    <summary type="text">I got a new dart board in the basement for Christmas, It&#39;s been super fun to play with the kids. We are getting a pretty good setup down there.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/46091653-f759-4a53-b3b7-e9e6226a5a12.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/46091653-f759-4a53-b3b7-e9e6226a5a12.webp&#34; alt=&#34;New Dart Board in the Basement&#34;/ data-glightbox=&#34;description: New Dart Board in the Basement&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I got a new dart board in the basement for Christmas, It’s been super fun to play with the kids.  We are getting a pretty good setup down there.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>First Fingerboard In The Press</title>
    <id>https://waylonwalker.com/shots/first-fingerboard-in-the-press/</id>
    <updated>2025-12-28T19:41:06Z</updated>
    <published>2025-12-28T19:41:06Z</published>
    <link href="https://waylonwalker.com/shots/first-fingerboard-in-the-press/" rel="alternate" type="text/html"></link>
    <summary type="text">5 layers of plywood pressed into a 3d printed fingerboard press.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/fb569b3a-d91d-4ad4-92f8-12e83c39fbda.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/fb569b3a-d91d-4ad4-92f8-12e83c39fbda.webp&#34; alt=&#34;First Fingerboard in the Press&#34;/ data-glightbox=&#34;description: First Fingerboard in the Press&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;5 layers of plywood pressed into a 3d printed fingerboard press.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Garmond And Zaza</title>
    <id>https://waylonwalker.com/shots/garmond-and-zaza/</id>
    <updated>2025-12-25T09:50:44Z</updated>
    <published>2025-12-25T09:50:44Z</published>
    <link href="https://waylonwalker.com/shots/garmond-and-zaza/" rel="alternate" type="text/html"></link>
    <summary type="text">Garmond And Zaza</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/a6bd5277-c605-43c7-aa4c-d6166d74cfff.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/a6bd5277-c605-43c7-aa4c-d6166d74cfff.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/a6bd5277-c605-43c7-aa4c-d6166d74cfff.mp4&#34; type=&#34;video/mp4&#34;&gt;Garmond And Zaza&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Garmond And Zaza&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Simon Says Bell Ending</title>
    <id>https://waylonwalker.com/shots/simon-says-bell-ending/</id>
    <updated>2025-12-23T18:59:11Z</updated>
    <published>2025-12-23T18:59:11Z</published>
    <link href="https://waylonwalker.com/shots/simon-says-bell-ending/" rel="alternate" type="text/html"></link>
    <summary type="text">Simon Says Bell Ending</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/e90ea894-c7d6-4025-b916-0b0b264b30ec.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/e90ea894-c7d6-4025-b916-0b0b264b30ec.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/e90ea894-c7d6-4025-b916-0b0b264b30ec.mp4&#34; type=&#34;video/mp4&#34;&gt;Simon Says Bell Ending&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Simon Says Bell Ending&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Simon Says Bell</title>
    <id>https://waylonwalker.com/shots/simon-says-bell/</id>
    <updated>2025-12-23T18:58:08Z</updated>
    <published>2025-12-23T18:58:08Z</published>
    <link href="https://waylonwalker.com/shots/simon-says-bell/" rel="alternate" type="text/html"></link>
    <summary type="text">Simon Says Bell</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/fdfd27ba-bfc3-4134-994f-91d034b6a0be.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/fdfd27ba-bfc3-4134-994f-91d034b6a0be.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/fdfd27ba-bfc3-4134-994f-91d034b6a0be.mp4&#34; type=&#34;video/mp4&#34;&gt;Simon Says Bell&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Simon Says Bell&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ jdx usage</title>
    <id>https://waylonwalker.com/jdx-usage/</id>
    <updated>2025-12-22T16:42:40Z</updated>
    <published>2025-12-22T16:42:40Z</published>
    <link href="https://waylonwalker.com/jdx-usage/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on usage by jdx.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/jdx/usage&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;usage&lt;/a&gt; by &lt;a href=&#34;https://github.com/jdx&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jdx&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A specification for CLIs&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ jdx pitchfork</title>
    <id>https://waylonwalker.com/jdx-pitchfork/</id>
    <updated>2025-12-22T16:42:37Z</updated>
    <published>2025-12-22T16:42:37Z</published>
    <link href="https://waylonwalker.com/jdx-pitchfork/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by pitchfork from jdx.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/jdx/pitchfork&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pitchfork&lt;/a&gt; from &lt;a href=&#34;https://github.com/jdx&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jdx&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Daemons with DX&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Codeium Is Cooked</title>
    <id>https://waylonwalker.com/shots/codeium-is-cooked/</id>
    <updated>2025-12-22T10:13:08Z</updated>
    <published>2025-12-22T10:13:08Z</published>
    <link href="https://waylonwalker.com/shots/codeium-is-cooked/" rel="alternate" type="text/html"></link>
    <summary type="text">Codeium what are you doing? It&#39;s spamming I&#39;m a little bit of a nerd in the completion.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/1a0b746e-091f-47b5-b4d3-b931f43da801.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/1a0b746e-091f-47b5-b4d3-b931f43da801.webp&#34; alt=&#34;codeium is cooked&#34;/ data-glightbox=&#34;description: codeium is cooked&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Codeium what are you doing?  It’s spamming I’m a little bit of a nerd in the completion.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>YouTube Gemini is Actually Useful</title>
    <id>https://waylonwalker.com/youtube-gemini-is-actually-useful/</id>
    <updated>2025-12-22T10:09:55Z</updated>
    <published>2025-12-22T10:09:55Z</published>
    <link href="https://waylonwalker.com/youtube-gemini-is-actually-useful/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve found Gemini to be very useful lately, especially for finding information within long form content.</summary>
    <content type="html">&lt;p&gt;I’ve found Gemini to be very useful lately, especially for finding information&#xA;within long form content.&lt;/p&gt;&#xA;&lt;p&gt;When writing &lt;a href=&#34;https://thoughts.waylonwalker.com/post/896&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/thoughts.waylonwalker.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/thoughts.waylonwalker.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;thought-896&lt;/a&gt;, I&#xA;wanted to use a direct quote from Jeff Dickey, Gemini popped it out very&#xA;quickly.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;give me a quote from jeff just before the timestamp I&amp;#39;m at the interviewer&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;asked what makes a good cli and he started talking about stdout/stderr&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In another case, my wife and I are huge Good Eats fans.  Alton Brown taught us&#xA;how to cook during college and on.  We watched every single good eats episode&#xA;nearly 10 years after they aired.  He is back with some updates to those those&#xA;shows on his Youtube.  Gemini gives very good detailed responses with&#xA;timestamps.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Alton Brown had a recent YouTube video for cooking turkey. Can you get the&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;instructions from the video?&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Ping 15</title>
    <id>https://waylonwalker.com/ping-15/</id>
    <updated>2025-12-22T08:55:20Z</updated>
    <published>2025-12-22T08:55:20Z</published>
    <link href="https://waylonwalker.com/ping-15/" rel="alternate" type="text/html"></link>
    <summary type="text">mise looks like what I wanted nix to be for me.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://mise.jdx.dev/getting-started.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/mise.jdx.dev.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/mise.jdx.dev.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mise&lt;/a&gt; looks like what I wanted nix to be for me.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ jdx mise</title>
    <id>https://waylonwalker.com/jdx-mise/</id>
    <updated>2025-12-21T16:18:10Z</updated>
    <published>2025-12-21T16:18:10Z</published>
    <link href="https://waylonwalker.com/jdx-mise/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on mise by jdx.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/jdx/mise&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mise&lt;/a&gt; by &lt;a href=&#34;https://github.com/jdx&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jdx&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;dev tools, env vars, task runner&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Mise looks promising</title>
    <id>https://waylonwalker.com/ping-14/</id>
    <updated>2025-12-21T10:52:57Z</updated>
    <published>2025-12-21T10:52:57Z</published>
    <link href="https://waylonwalker.com/ping-14/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been all in on just for a while now, but mise looks so good it might be my next move.</summary>
    <content type="html">&lt;p&gt;I’ve been all in on just for a while now, but mise looks so good it might&#xA;be my next move.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Phantom End</title>
    <id>https://waylonwalker.com/shots/phantom-end/</id>
    <updated>2025-12-21T09:35:34Z</updated>
    <published>2025-12-21T09:35:34Z</published>
    <link href="https://waylonwalker.com/shots/phantom-end/" rel="alternate" type="text/html"></link>
    <summary type="text">Phantom End</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/ec9d19ec-68b9-4b2f-ae6b-fee1559b384a.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/ec9d19ec-68b9-4b2f-ae6b-fee1559b384a.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/ec9d19ec-68b9-4b2f-ae6b-fee1559b384a.mp4&#34; type=&#34;video/mp4&#34;&gt;Phantom End&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Phantom End&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Phantom Fight</title>
    <id>https://waylonwalker.com/shots/phantom-fight/</id>
    <updated>2025-12-21T09:33:48Z</updated>
    <published>2025-12-21T09:33:48Z</published>
    <link href="https://waylonwalker.com/shots/phantom-fight/" rel="alternate" type="text/html"></link>
    <summary type="text">Phantom Fight</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/16a4dfa0-38a1-4ed9-843a-c0077e7e7e75.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/16a4dfa0-38a1-4ed9-843a-c0077e7e7e75.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/16a4dfa0-38a1-4ed9-843a-c0077e7e7e75.mp4&#34; type=&#34;video/mp4&#34;&gt;Phantom Fight&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Phantom Fight&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Phantom</title>
    <id>https://waylonwalker.com/shots/phantom/</id>
    <updated>2025-12-21T09:31:50Z</updated>
    <published>2025-12-21T09:31:50Z</published>
    <link href="https://waylonwalker.com/shots/phantom/" rel="alternate" type="text/html"></link>
    <summary type="text">Phantom</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/71d8ce54-c5cd-4101-ad36-80a8ccf4adf9.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/71d8ce54-c5cd-4101-ad36-80a8ccf4adf9.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/71d8ce54-c5cd-4101-ad36-80a8ccf4adf9.mp4&#34; type=&#34;video/mp4&#34;&gt;Phantom&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Phantom&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Maxteabag sqlit</title>
    <id>https://waylonwalker.com/maxteabag-sqlit/</id>
    <updated>2025-12-21T05:47:39Z</updated>
    <published>2025-12-21T05:47:39Z</published>
    <link href="https://waylonwalker.com/maxteabag-sqlit/" rel="alternate" type="text/html"></link>
    <summary type="text">Maxteabag has done a fantastic job with sqlit. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/Maxteabag&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Maxteabag&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/Maxteabag/sqlit&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sqlit&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;A user friendly TUI for SQL databases. Written in python. Supports SQL server, Mysql, PostreSQL and SQLite, Turso and more.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ webinstall webi-installers</title>
    <id>https://waylonwalker.com/webinstall-webi-installers/</id>
    <updated>2025-12-20T19:52:27Z</updated>
    <published>2025-12-20T19:52:27Z</published>
    <link href="https://waylonwalker.com/webinstall-webi-installers/" rel="alternate" type="text/html"></link>
    <summary type="text">webi-installers by webinstall is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/webinstall/webi-installers&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;webi-installers&lt;/a&gt; by &lt;a href=&#34;https://github.com/webinstall&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;webinstall&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;Primary and community-submitted packages for webinstall.dev&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Fixing The Marquee For Jolly Holiday</title>
    <id>https://waylonwalker.com/shots/fixing-the-marquee-for-jolly-holiday/</id>
    <updated>2025-12-20T18:06:34Z</updated>
    <published>2025-12-20T18:06:34Z</published>
    <link href="https://waylonwalker.com/shots/fixing-the-marquee-for-jolly-holiday/" rel="alternate" type="text/html"></link>
    <summary type="text">Waylon up at the Marquee of the theater fixing the fallen letters before the night show.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/48e6a2ef-a4db-462e-acda-16b270e7053d.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/48e6a2ef-a4db-462e-acda-16b270e7053d.webp&#34; alt=&#34;Fixing the Marquee for Jolly Holiday&#34;/ data-glightbox=&#34;description: Fixing the Marquee for Jolly Holiday&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Waylon up at the Marquee of the theater fixing the fallen letters before the night show.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Gross phone</title>
    <id>https://waylonwalker.com/ping-13/</id>
    <updated>2025-12-19T09:51:00Z</updated>
    <published>2025-12-19T09:51:00Z</published>
    <link href="https://waylonwalker.com/ping-13/" rel="alternate" type="text/html"></link>
    <summary type="text">Is there a world that giving my phone to my kids does not result in it being covered in peanut butter and snot?</summary>
    <content type="html">&lt;p&gt;Is there a world that giving my phone to my kids does not result in it being&#xA;covered in peanut butter and snot?&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Developer Vs Artist Ai</title>
    <id>https://waylonwalker.com/developer-vs-artist-ai/</id>
    <updated>2025-12-19T09:44:00Z</updated>
    <published>2025-12-19T09:44:00Z</published>
    <link href="https://waylonwalker.com/developer-vs-artist-ai/" rel="alternate" type="text/html"></link>
    <summary type="text">The other day I was watching [thePrimeTimeagen]https://youtube.com/@theprimetimeagen?si=jVcp23FbfQSFZfDc) and he talked about devs loving ai and artists...</summary>
    <content type="html">&lt;p&gt;The other day I was watching [thePrimeTimeagen]https://youtube.com/@theprimetimeagen?si=jVcp23FbfQSFZfDc) and he talked about devs loving ai and artists revolting.  There was some discussion in chat about art being more creative and prime quickly squashed that.  He ended with being oddly confused why developers are jumping on board and artists are not.  Both had their art stolen to build out the models.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/e0f9e8bf-bc51-415c-ad25-6f2cd473e6d0.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/e0f9e8bf-bc51-415c-ad25-6f2cd473e6d0.webp&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;my own vibes&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;I&amp;#39;m writing this from my phone without further research, all vibes, personal experience, and thoughts,  no research.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;good-tools&#34;&gt;Good Tools &lt;a href=&#34;#good-tools&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;First I want to argue that artists have had some form of ai in their tools for years.  Idk, probably not ai as we know it today but functionally similar.  Content aware fill.  This is a Photoshop feature from Adobe, as far as I know it’s one of the special things you get from Adobe that you don’t get from the FOSS alternatives easily.&lt;/p&gt;&#xA;&lt;p&gt;This is an example of a good took that is well loves by the community and widely used, if you put ai in it to make it better no one would care, if it made things look oddly ai it would get rejected.&lt;/p&gt;&#xA;&lt;h2 id=&#34;taking-the-brush&#34;&gt;taking the brush &lt;a href=&#34;#taking-the-brush&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is the critical difference that I see between the communities.  Software development has made great tools for itself in a wide spectrum, from hands off vibe code no code to better auto complete.  There’s something for everyone and every situation.  This feels very obvious the minute you try to look at how to do it.  In fact we started with better autocomplete.  This autocomplete is really good at recognizing patterns in your document and continuing your current thought for you.&lt;/p&gt;&#xA;&lt;p&gt;Art is a complete 180.  It started with prompt engineering.  Hands off let the tool do everything, you do nothing but prompt it.  If it’s wrong reprompt.  Diffusion is the worst because it generates completely new results every time nothing like what you had before.  The newer stuff from openai and nano banana are not diffusion and do much better text and edits, but it’s not the same.&lt;/p&gt;&#xA;&lt;h2 id=&#34;hands-off-is-frustrating&#34;&gt;hands off is frustrating &lt;a href=&#34;#hands-off-is-frustrating&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Anyone who has tried to get something specific from ai art or code gen without touching it themselves knows the frustration that you ask it to do one thing that takes 3 prompts to get it to understand what your asking and by the time it’s right it’s wrecked something else.  It’s not fun, it’s soul sucking and ripe for meme content.&lt;/p&gt;&#xA;&lt;h2 id=&#34;freedom-of-expression&#34;&gt;freedom of expression &lt;a href=&#34;#freedom-of-expression&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Software development has made a really good effort to make really great tools for itself.  We have a wide spectrum that allow you to prototype fast, get something complex working in hours not month, but riddles with issues.  Allowing us to get better scoped work from PMs who have put their hands on a semi working prototype.  We have the ability to slice out parts and refactor with ease, and when things really matter we can right the code ourselves with ai there to take away the boilerplate repetition that finds it’s way into some modules.&lt;/p&gt;&#xA;&lt;p&gt;I’m sure there is better ai art tools out there that allow artists to keep their brush in hand and enhance their skills, but I have not seen them.  Ive seen in painting, but its not discoverable as it’s first experience, is hard to setup, might cost a lot, and doesn’t quite fit in to where you work with it.  It’s still all or nothing prompt engineering, just a bit more focused in.&lt;/p&gt;&#xA;&lt;h2 id=&#34;ai-video&#34;&gt;ai video &lt;a href=&#34;#ai-video&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I haven’t even thought much about things like sora throughout this.  I can say for sure I’m enjoying editors for small time creators having the ability to throw in short clips to enhance the story.  Especially for story telling style content that is impossible to get real video of, and would cost a fortune to build set, costume, and cast.  It makes no sense for this scale.  The McDonald’s and coke videos im on the fence on.  They seem &lt;em&gt;fine&lt;/em&gt;, they don’t feel inspiring, great, or terrible to me.&lt;/p&gt;&#xA;&lt;h2 id=&#34;fin&#34;&gt;fin &lt;a href=&#34;#fin&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Developers naturally started with great tools here, and artist were given tools for developers to do art with, nothing tools for them.&lt;/p&gt;&#xA;&lt;p&gt;Please tell me I’m wrong, artists have great tools you just haven’t seen them.  I’d love to be wrong.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Ping 12</title>
    <id>https://waylonwalker.com/ping-12/</id>
    <updated>2025-12-16T11:44:47Z</updated>
    <published>2025-12-16T11:44:47Z</published>
    <link href="https://waylonwalker.com/ping-12/" rel="alternate" type="text/html"></link>
    <summary type="text">Is new teen lingo? My kid is starting to say _ in every sentence.</summary>
    <content type="html">&lt;p&gt;Is &lt;code&gt;bet&lt;/code&gt; new teen lingo?  My kid is starting to say &lt;em&gt;bet&lt;/em&gt; in every sentence.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;So he explained it as “I’m down”, “You bet”, “Yes”, “I like that”, “You betcha”&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Ping 11</title>
    <id>https://waylonwalker.com/ping-11/</id>
    <updated>2025-12-16T08:11:43Z</updated>
    <published>2025-12-16T08:11:43Z</published>
    <link href="https://waylonwalker.com/ping-11/" rel="alternate" type="text/html"></link>
    <summary type="text">Naming things is hard, pings will now be numbered.</summary>
    <content type="html">&lt;p&gt;Naming things is hard, pings will now be numbered.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>I&#39;m being gaslit by the ai</title>
    <id>https://waylonwalker.com/i-m-being-gaslit-by-the-ai/</id>
    <updated>2025-12-15T16:16:12Z</updated>
    <published>2025-12-15T16:16:12Z</published>
    <link href="https://waylonwalker.com/i-m-being-gaslit-by-the-ai/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m being gaslit by the ai. It just did a big hard change, now cant do a seemingly basic change, and assures me that that its fixed my issue on every iteration.</summary>
    <content type="html">&lt;p&gt;I’m being gaslit by the ai.  It just did a big hard change, now cant do a seemingly basic change, and assures me that that its fixed my issue on every iteration.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Finished Elf House</title>
    <id>https://waylonwalker.com/shots/finished-elf-house/</id>
    <updated>2025-12-14T13:27:43Z</updated>
    <published>2025-12-14T13:27:43Z</published>
    <link href="https://waylonwalker.com/shots/finished-elf-house/" rel="alternate" type="text/html"></link>
    <summary type="text">Waylon and Rhiannon standing in front of a mostly finished elf house built for the Jolly Holiday Performance at the local theater.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/f34e94d4-c6d4-4a89-96f7-14f67c954307.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/f34e94d4-c6d4-4a89-96f7-14f67c954307.webp&#34; alt=&#34;Finished Elf House&#34;/ data-glightbox=&#34;description: Finished Elf House&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Waylon and Rhiannon standing in front of a mostly finished elf house built for the Jolly Holiday Performance at the local theater.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Cogwork Saved Pill</title>
    <id>https://waylonwalker.com/shots/cogwork-saved-pill/</id>
    <updated>2025-12-14T09:26:19Z</updated>
    <published>2025-12-14T09:26:19Z</published>
    <link href="https://waylonwalker.com/shots/cogwork-saved-pill/" rel="alternate" type="text/html"></link>
    <summary type="text">Cogwork Saved Pill</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/080351b9-a5f9-4103-b5c8-fbcbe1e0b2b7.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/080351b9-a5f9-4103-b5c8-fbcbe1e0b2b7.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/080351b9-a5f9-4103-b5c8-fbcbe1e0b2b7.mp4&#34; type=&#34;video/mp4&#34;&gt;Cogwork Saved Pill&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Cogwork Saved Pill&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>numbered posts in obsidian</title>
    <id>https://waylonwalker.com/numbered-posts-in-obsidian/</id>
    <updated>2025-12-13T22:28:28Z</updated>
    <published>2025-12-13T22:28:28Z</published>
    <link href="https://waylonwalker.com/numbered-posts-in-obsidian/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been using this one for awhile now, I have a post type that I only edit from my phone, but I have all the post numbered. I set up a template in obsidian...</summary>
    <content type="html">&lt;p&gt;I’ve been using this one for awhile now, I have a post type that I only edit&#xA;from my phone, but I have all the post numbered.  I set up a template in&#xA;obsidian for using templater, the template goes right in the static site repo,&#xA;I point templater to the templates directory and this has been working pretty&#xA;seamlessly for awhile.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;---&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;date: &amp;lt;% tp.date.now(&amp;#34;YYYY-MM-DD HH:mm:ss&amp;#34;) %&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;templateKey: myposttype&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;published: true&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tags:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; myposttype&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;%*&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;const folder = &amp;#34;pages/myposttype&amp;#34;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;// get all files in the vault, keep only those inside the folder&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;const files = app.vault.getFiles().filter(f =&amp;gt; f.path.startsWith(folder + &amp;#34;/&amp;#34;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;// extract numeric suffixes from filenames like myposttype-123.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;const nums = files.map(f =&amp;gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  const m = f.basename.match(/^myposttype-(\d+)$/);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  return m ? parseInt(m[1], 10) : null;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}).filter(n =&amp;gt; n !== null);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;// next number (start at 1 if none exist)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;const next = (nums.length ? Math.max(...nums) : 0) + 1;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;// include the .md extension when moving&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;const newPath = &lt;span class=&#34;sb&#34;&gt;`${folder}/myposttype-${next}`&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;await tp.file.move(newPath);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;%&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;---&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ andrii-kryvoviaz slink</title>
    <id>https://waylonwalker.com/andrii-kryvoviaz-slink/</id>
    <updated>2025-12-12T13:40:24Z</updated>
    <published>2025-12-12T13:40:24Z</published>
    <link href="https://waylonwalker.com/andrii-kryvoviaz-slink/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out andrii-kryvoviaz and their project slink.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/andrii-kryvoviaz&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;andrii-kryvoviaz&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/andrii-kryvoviaz/slink&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;slink&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/self-host/&#34; class=&#34;glossary-term&#34; title=&#34;Self hosting is the act of hosting your own applications and services without using a SAS provider. This is typically done with your own hardware, but there...&#34;&gt;Self-hosted&lt;/a&gt; image sharing service&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>notifications for static site builds</title>
    <id>https://waylonwalker.com/notifications-for-static-site-builds/</id>
    <updated>2025-12-12T08:28:45Z</updated>
    <published>2025-12-12T08:28:45Z</published>
    <link href="https://waylonwalker.com/notifications-for-static-site-builds/" rel="alternate" type="text/html"></link>
    <summary type="text">This morning I set up notifications for changes to my static site builds leveraging git-name-status and ntfy.</summary>
    <content type="html">&lt;p&gt;This morning I set up notifications for changes to my static site builds&#xA;leveraging &lt;a href=&#34;/git-name-status/&#34; class=&#34;wikilink&#34; data-title=&#34;git name status&#34; data-description=&#34;is a great way to see what files have changed in a git diff alongside the status code. I recently used this in a script to create a report of new and...&#34; data-date=&#34;2025-12-12&#34; data-preview=&#34;is a great way to see what files have changed in a git diff alongside the status code. I recently used this in a script to create a report of new and...&#34;&gt;git name status&lt;/a&gt; and ntfy.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/1c69e648-5aa3-4f66-9085-a045b99450a5.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/1c69e648-5aa3-4f66-9085-a045b99450a5.webp&#34; alt=&#34;notification of changes&#34;/ data-glightbox=&#34;description: notification of changes&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>git name status</title>
    <id>https://waylonwalker.com/git-name-status/</id>
    <updated>2025-12-12T07:53:57Z</updated>
    <published>2025-12-12T07:53:57Z</published>
    <link href="https://waylonwalker.com/git-name-status/" rel="alternate" type="text/html"></link>
    <summary type="text">is a great way to see what files have changed in a git diff alongside the status code. I recently used this in a script to create a report of new and...</summary>
    <content type="html">&lt;p&gt;&lt;code&gt;--name-status&lt;/code&gt; is a great way to see what files have changed in a &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; diff&#xA;alongside the status code.  I recently used this in a script to create a report&#xA;of new and modified files during a build.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git diff --name-status&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git diff --name-status origin/main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git diff --name-status --staged&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git diff --name-status &lt;span class=&#34;s1&#34;&gt;&amp;#39;HEAD@{3 days ago}&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Dude Locked In</title>
    <id>https://waylonwalker.com/shots/dude-is-focused/</id>
    <updated>2025-12-11T11:50:07Z</updated>
    <published>2025-12-11T11:50:07Z</published>
    <link href="https://waylonwalker.com/shots/dude-is-focused/" rel="alternate" type="text/html"></link>
    <summary type="text">My son wanted to help shovel snow, usually this means, I&#39;ll piddle around, have Fun, maybe make things worse, but it&#39;s ok cause I&#39;ll make it a good time. Tonight he was LOCKED IN and got a good chunk of the neighbors drive and entire sidewalk done.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/dfaeb218-e2cc-4d2f-a4dc-4d8bcfb3a5b5.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/dfaeb218-e2cc-4d2f-a4dc-4d8bcfb3a5b5.webp&#34; alt=&#34;Dude is focused&#34;/ data-glightbox=&#34;description: Dude is focused&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;My son wanted to help shovel snow, usually this means, I’ll piddle around, have Fun, maybe make things worse, but it’s ok cause I’ll make it a good time.  Tonight he was LOCKED IN and got a good chunk of the neighbors drive and entire sidewalk done.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>fast changing dev server today</title>
    <id>https://waylonwalker.com/fast-changing-dev-server-today/</id>
    <updated>2025-12-10T13:45:49Z</updated>
    <published>2025-12-10T13:45:49Z</published>
    <link href="https://waylonwalker.com/fast-changing-dev-server-today/" rel="alternate" type="text/html"></link>
    <summary type="text">The dev server is cooking today, I&#39;ve dropped markata builds from 2m40s (hot cache) in prod to 15s (hot cache) in dev. Currently building 2745 posts and 274...</summary>
    <content type="html">&lt;p&gt;The dev server is cooking today, I’ve dropped markata builds from 2m40s (hot cache) in prod&#xA;to 15s (hot cache) in dev. Currently building 2745 posts and 274 feeds.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/c3e8b9de-d4be-4c7c-ab9b-a13a25c7673c.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/c3e8b9de-d4be-4c7c-ab9b-a13a25c7673c.webp&#34; alt=&#34;screenshot of the dev builds from k9s&#34;/ data-glightbox=&#34;description: screenshot of the dev builds from k9s&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>The Right Reasons To Run Kubernetes In Your Homelab</title>
    <id>https://waylonwalker.com/the-right-reasons-to-run-kubernetes-in-your-homelab/</id>
    <updated>2025-12-10T09:48:14Z</updated>
    <published>2025-12-10T09:48:14Z</published>
    <link href="https://waylonwalker.com/the-right-reasons-to-run-kubernetes-in-your-homelab/" rel="alternate" type="text/html"></link>
    <summary type="text">Running kubernetes in your homelab is a fantastic way to learn, explore, express yourself, and run services that you use.</summary>
    <content type="html">&lt;p&gt;Running kubernetes in your &lt;a href=&#34;/homelab/&#34; class=&#34;glossary-term&#34; title=&#34;A place to self host applications. For me this is primarily self built web applications, and applications for sharing files with my family. Techno Tim has a...&#34;&gt;homelab&lt;/a&gt; is a fantastic way to learn, explore, express&#xA;yourself, and run services that you use.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-right-reasons-to-run-kubernetes-in-your-homelab&#34;&gt;The Right Reasons To Run Kubernetes In Your Homelab &lt;a href=&#34;#the-right-reasons-to-run-kubernetes-in-your-homelab&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;There are not many&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You want to learn kubernetes&lt;/li&gt;&#xA;&lt;li&gt;You like kubernetes&lt;/li&gt;&#xA;&lt;li&gt;You want to &lt;strong&gt;learn&lt;/strong&gt; to scale&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;There are also &lt;a href=&#34;/the-wrong-reasons-to-run-kubernetes-in-your-homelab/&#34; class=&#34;wikilink&#34; data-title=&#34;The Wrong Reasons To Run Kubernetes In Your Homelab&#34; data-description=&#34;Running kubernetes in your homelab is complex, time consuming, there are almost no docs to help you (homelab focused docs for things you want to install),...&#34; data-date=&#34;2025-12-06&#34; data-preview=&#34;Running kubernetes in your homelab is complex, time consuming, there are almost no docs to help you (homelab focused docs for things you want to install),...&#34;&gt;The Wrong Reasons To Run Kubernetes In Your Homelab&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;you-want-to-learn-kubernetes&#34;&gt;You want to learn kubernetes &lt;a href=&#34;#you-want-to-learn-kubernetes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Homelabbing is a such a great way to learn new skills, deploy real apps that&#xA;you use.  Create new custom apps for your specific use cases that no one else&#xA;has.  You should absolutely run kubernetes in your homelab if you want to learn it.&lt;/p&gt;&#xA;&lt;p&gt;I would recommend to start locally, pull up kind, minikube, or k3d and start&#xA;from your local machine before putting it on a server.&lt;/p&gt;&#xA;&lt;p&gt;When you decide you are ready for a server, you probably don’t need any crazy&#xA;hardware.  You can probably run on some old retired Dell Optiplex or an old&#xA;desktop someone is throwing out as it no longer runs windows.&lt;/p&gt;&#xA;&lt;h2 id=&#34;you-like-kubernetes&#34;&gt;You like kubernetes &lt;a href=&#34;#you-like-kubernetes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Hell Yeah Brother, 100% no better reason to run kubernetes at home than because&#xA;you enjoy it.  I’m with you.  There’s nothing quite like having &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; ops kick in&#xA;and deploy new services, updates, watching deployments rollover with zero&#xA;downtime.  Watching your cluster heal itself when a node goes down.  Never&#xA;ssh-ing in to do deployments.  Still owning your entire hardware.&lt;/p&gt;&#xA;&lt;h2 id=&#34;you-want-to-learn-to-scale&#34;&gt;You want to learn to scale &lt;a href=&#34;#you-want-to-learn-to-scale&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is probably a stretch reason, maybe not a good one, there are probably&#xA;better ways, but here we go.&lt;/p&gt;&#xA;&lt;p&gt;Don’t claim that you &lt;strong&gt;need&lt;/strong&gt; scale in your homelab, you don’t.  But it sure is&#xA;fun to run a cluster of nodes, and load balancing services that run across&#xA;them.  Solving these hard problems to scale across machines is hard.  There’s&#xA;no way around it, there’s a lot to think about.  Doing so in a low stakes&#xA;environment that you have skin in the game is a great way to learn.&lt;/p&gt;&#xA;&lt;h2 id=&#34;i-run-kubernetes-in-my-homelab&#34;&gt;I run kubernetes in my homelab &lt;a href=&#34;#i-run-kubernetes-in-my-homelab&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I run it and I really like it&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What flavor of autism did you guys get, I got the kind where I run kubernetes in my basement.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Here are some things I really like about it, and Yes I know you can achieve&#xA;most of these without kubernetes.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I don’t have to ssh, hardly ever.&lt;/li&gt;&#xA;&lt;li&gt;I can see everything I’m running, and its defined in a manifest&lt;/li&gt;&#xA;&lt;li&gt;k9s is amazing, and I use it all the time.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;shell into running pods&lt;/li&gt;&#xA;&lt;li&gt;restart deployments&lt;/li&gt;&#xA;&lt;li&gt;scale deployments&lt;/li&gt;&#xA;&lt;li&gt;trigger cronjobs&lt;/li&gt;&#xA;&lt;li&gt;watch logs&lt;/li&gt;&#xA;&lt;li&gt;I can scale our minecraft server to 0 in seconds if we are in a different season of life&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;ArgoCD is amazing&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I ❤️ gitops&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Ingress just works&lt;/li&gt;&#xA;&lt;li&gt;Longhorn&#xA;&lt;ul&gt;&#xA;&lt;li&gt;makes snapshots and backups easy&lt;/li&gt;&#xA;&lt;li&gt;makes multi node easy&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;zero-downtime deployments&lt;/li&gt;&#xA;&lt;li&gt;self healing health checks&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I mostly do very simple things, deployments with a container, a volume and&#xA;ingress.  Probably things that you could easily run on fly.io.  Theres nothing&#xA;really fancy.  I just like how easy this setup works for &lt;strong&gt;me&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/f8e88b6b-a668-4cea-9792-65339860b07f.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/f8e88b6b-a668-4cea-9792-65339860b07f.webp&#34; alt=&#34;She’s our friend and she’s crazy&#34;/ data-glightbox=&#34;description: She’s our friend and she’s crazy&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>minecraft server memory</title>
    <id>https://waylonwalker.com/minecraft-server-memory/</id>
    <updated>2025-12-10T08:46:36Z</updated>
    <published>2025-12-10T08:46:36Z</published>
    <link href="https://waylonwalker.com/minecraft-server-memory/" rel="alternate" type="text/html"></link>
    <summary type="text">I learned to today that setting on your minecraft server causes the JVM to egregiously allocate all of that memory. Not setting it causes slow downs and...</summary>
    <content type="html">&lt;p&gt;I learned to today that setting &lt;code&gt;MEMORY&lt;/code&gt; on your minecraft server causes the&#xA;JVM to egregiously allocate all of that memory.  Not setting it causes slow&#xA;downs and potential crashes, but setting &lt;code&gt;INIT_MEMORY&lt;/code&gt; and &lt;code&gt;MAX_MEMORY&lt;/code&gt; gives&#xA;us the best of both worlds.  It is allowed to use more, but does not gobble it&#xA;all up on startup.&lt;/p&gt;&#xA;&lt;p&gt;In this economy we need to save all the memory we can!&lt;/p&gt;&#xA;&lt;p&gt;Here is a non-working snippet for a minecraft server deployment in kubernetes.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;containers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;dungeon&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;itzg/minecraft-server&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;EULA&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;INIT_MEMORY&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;512M&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;MAX_MEMORY&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;3G&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;and in docker compose&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;dungeon&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;itzg/minecraft-server&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;EULA&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;INIT_MEMORY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;512M&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;MAX_MEMORY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;3G&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Cogwork Core Gang Fight</title>
    <id>https://waylonwalker.com/shots/cogwork-core-gang-fight/</id>
    <updated>2025-12-09T20:32:01Z</updated>
    <published>2025-12-09T20:32:01Z</published>
    <link href="https://waylonwalker.com/shots/cogwork-core-gang-fight/" rel="alternate" type="text/html"></link>
    <summary type="text">Cogwork Core Gang Fight</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/5279af87-077a-4d40-82ce-b5c805844c05.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/5279af87-077a-4d40-82ce-b5c805844c05.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/5279af87-077a-4d40-82ce-b5c805844c05.mp4&#34; type=&#34;video/mp4&#34;&gt;Cogwork Core Gang Fight&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Cogwork Core Gang Fight&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Cogwork Dancers Fight</title>
    <id>https://waylonwalker.com/shots/cogwork-dancers-fight/</id>
    <updated>2025-12-09T13:51:16Z</updated>
    <published>2025-12-09T13:51:16Z</published>
    <link href="https://waylonwalker.com/shots/cogwork-dancers-fight/" rel="alternate" type="text/html"></link>
    <summary type="text">Cogwork Dancers Fight</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/835f8578-52d7-4a6f-ab05-9462658444b7.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/835f8578-52d7-4a6f-ab05-9462658444b7.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/835f8578-52d7-4a6f-ab05-9462658444b7.mp4&#34; type=&#34;video/mp4&#34;&gt;Cogwork Dancers Fight&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Cogwork Dancers Fight&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>og</title>
    <id>https://waylonwalker.com/og/</id>
    <updated>2025-12-09T12:49:21Z</updated>
    <published>2025-12-09T12:49:21Z</published>
    <link href="https://waylonwalker.com/og/" rel="alternate" type="text/html"></link>
    <summary type="text">OG is short for open graph, a set of standard meta tags that are used for social media sharing. This is what tells other websites how to describe and display...</summary>
    <content type="html">&lt;p&gt;OG is short for open graph, a set of standard meta tags that are used for&#xA;social media sharing.  This is what tells other websites how to describe and&#xA;display your site when shared on social media, text messages, or discord.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>One Year Of Shots</title>
    <id>https://waylonwalker.com/one-year-of-shots/</id>
    <updated>2025-12-09T12:44:39Z</updated>
    <published>2025-12-09T12:44:39Z</published>
    <link href="https://waylonwalker.com/one-year-of-shots/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been running my shot scraper api for a year now. It creates og images for my website and thumbnails for my reader using a headless chrome instance.</summary>
    <content type="html">&lt;p&gt;I’ve been running my shot scraper api for a year now.  It creates &lt;a href=&#34;/og/&#34; class=&#34;glossary-term&#34; title=&#34;OG is short for open graph, a set of standard meta tags that are used for social media sharing. This is what tells other websites how to describe and display...&#34;&gt;og&lt;/a&gt; images for&#xA;my website and thumbnails for my &lt;a href=&#34;/reader/&#34; class=&#34;wikilink&#34; data-title=&#34;Reader&#34; data-description=&#34;Latest posts from blogs I follow&#34; data-preview=&#34;Latest posts from blogs I follow&#34;&gt;Reader&lt;/a&gt; using a headless chrome instance.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;25870 shots&lt;/li&gt;&#xA;&lt;li&gt;73 shots per day on average&lt;/li&gt;&#xA;&lt;li&gt;12-09-2025 first shot taken&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;histogram&#34;&gt;Histogram &lt;a href=&#34;#histogram&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/63705078-3342-4807-b5fd-46a0860efc27.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/63705078-3342-4807-b5fd-46a0860efc27.webp&#34; alt=&#34;histogram of shots&#34;/ data-glightbox=&#34;description: histogram of shots&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;a histogram of shot counts by day&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;You can see in the histogram that I’ve had a few big spike days, This has been&#xA;mostly for days that I’ve integrated into a new service or changed the&#xA;endpoint.  On February 13, 2025 I swapped over from using the post to using&#xA;template specific to open graph images.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-content = &amp;#34;https://shots.waylonwalker.com/shot/?url={{ config.url }}{{ post.slug }}&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+content = &amp;#34;https://shots.waylonwalker.com/shot/?url={{ config.url }}{{ post.slug }}/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition vsplit&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Image Comparison&lt;/p&gt;&#xA;&lt;div class=&#34;admonition vsplit&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Original Post Image&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://shots.waylonwalker.com/shot/?url=https://dev.waylonwalker.com/one-year-of-shots/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://dev.waylonwalker.com/one-year-of-shots/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;originally I simply used an image of the post itself&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition vsplit&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;New OG Image&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://shots.waylonwalker.com/shot/?url=https://dev.waylonwalker.com/one-year-of-shots/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://dev.waylonwalker.com/one-year-of-shots/og/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In Feb 2025 I made OG specific templates to use for the OG images.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Swapping to og images&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;collage&#34;&gt;Collage &lt;a href=&#34;#collage&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;For fun I made a collage of all the shots.  It’s cool to see all of these&#xA;together, I remember a lot of the thumbnails and posts.  Many of them from my&#xA;rss reader.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/5d4b46a6-79d6-4320-bf7d-f917c862c57d.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/5d4b46a6-79d6-4320-bf7d-f917c862c57d.webp&#34; alt=&#34;collage of shots&#34;/ data-glightbox=&#34;description: collage of shots&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;collage of all shots, click to see full size&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I tried to make a video collage, but turns out it takes a long time to show all&#xA;25k shots in video form.  It also turned out to be a bit of a strobe as I don’t&#xA;yet have it figured out how to dark mode in headless chrome.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/1c629d32-4284-4c71-a4f7-62d82e445c7d.webm&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/1c629d32-4284-4c71-a4f7-62d82e445c7d.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/1c629d32-4284-4c71-a4f7-62d82e445c7d.webm&#34; type=&#34;video/webm&#34;&gt;video collage of shots&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;video collage of 600 shots, I tried to include all, but even at 20fps its a 20 minute video.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>web snow fall</title>
    <id>https://waylonwalker.com/web-snow-fall/</id>
    <updated>2025-12-09T10:21:17Z</updated>
    <published>2025-12-09T10:21:17Z</published>
    <link href="https://waylonwalker.com/web-snow-fall/" rel="alternate" type="text/html"></link>
    <summary type="text">I found snow-fall component from zachleat, and its beautiful... to me. I like the way it looks, its simple and whimsical.</summary>
    <content type="html">&lt;p&gt;I found snow-fall component from&#xA;&lt;a href=&#34;https://www.zachleat.com/web/snow-fall/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.zachleat.com.jpg&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.zachleat.com.jpg&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;zachleat&lt;/a&gt;, and its beautiful… to&#xA;me.  I like the way it looks, its simple and whimsical.&lt;/p&gt;&#xA;&lt;h2 id=&#34;install&#34;&gt;Install &lt;a href=&#34;#install&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There is an npm package &lt;code&gt;&amp;lt;a href=&amp;#34;https://zachleat.com&amp;#34; class=&amp;#34;mention&amp;#34; data-name=&amp;#34;Zach Leatherman&amp;#34; data-bio=&amp;#34;A post by Zach Leatherman (zachleat)&amp;#34; data-avatar=&amp;#34;https://screenshot.11ty.app/https%3A%2F%2Fwww.zachleat.com%2F%3Fcache%3D_20251031/opengraph/&amp;#34; data-handle=&amp;#34;@zachleat&amp;#34;&amp;gt;@zachleat&amp;lt;/a&amp;gt;/snow-fall&lt;/code&gt; if that’s your thing.  I like&#xA;vendoring in small things like this.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -o static/snow-fall.js https://raw.githubusercontent.com/zachleat/snow-fall/refs/heads/main/snow-fall.js&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I generally save it in my justfile so that I remember how I got it and how to&#xA;update…. yaya I could use npm, but I don’t for no build sites.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;get-snowfall:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    curl -o static/snow-fall.js https://raw.githubusercontent.com/zachleat/snow-fall/refs/heads/main/snow-fall.js&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;usage&#34;&gt;Usage &lt;a href=&#34;#usage&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now add the component to your page.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;lt;!-- This belongs somewhere inside &amp;lt;head&amp;gt; --&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;module&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;snow-fall.js&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Adjust the src to your path --&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;lt;!-- This belongs somewhere inside &amp;lt;body&amp;gt; --&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Anything before will be below the snow. --&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;snow-fall&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;snow-fall&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Anything after will show above the snow. --&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>check your kubeconfig expire time</title>
    <id>https://waylonwalker.com/check-your-kubeconfig-expire-time/</id>
    <updated>2025-12-08T20:59:27Z</updated>
    <published>2025-12-08T20:59:27Z</published>
    <link href="https://waylonwalker.com/check-your-kubeconfig-expire-time/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I learned an important lesson that you should periodically check on your kubeconfigs expiration date. It&#39;s easy to do. You can ask for the...</summary>
    <content type="html">&lt;p&gt;Today I learned an important lesson that you should periodically check on your&#xA;kubeconfigs expiration date.  It’s easy to do.  You can ask for the&#xA;client-certificate-data from your kubeconfig, decode it, and use openssl to get&#xA;the expiration date.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl config view --raw -o &lt;span class=&#34;nv&#34;&gt;jsonpath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;{.users[0].user.client-certificate-data}&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; base64 -d 2&amp;gt;/dev/null &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; openssl x509 -noout -dates&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This will only work for the first user, if you have more than one user or&#xA;context defined in your kubeconfig you will need to adjust.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Not every print needs supports</title>
    <id>https://waylonwalker.com/not-every-print-needs-supports/</id>
    <updated>2025-12-08T14:17:05Z</updated>
    <published>2025-12-08T14:17:05Z</published>
    <link href="https://waylonwalker.com/not-every-print-needs-supports/" rel="alternate" type="text/html"></link>
    <summary type="text">Not every print needs supports. So many models default to having it on, whether needed or not. Well designed parts, designed for 3d printing almost never...</summary>
    <content type="html">&lt;p&gt;Not every print needs supports.  So many models default to having it on,&#xA;whether needed or not.  Well designed parts, designed for 3d printing almost&#xA;never need supports (depending on constraints).&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Slab Fight</title>
    <id>https://waylonwalker.com/shots/slab-fight/</id>
    <updated>2025-12-08T12:17:45Z</updated>
    <published>2025-12-08T12:17:45Z</published>
    <link href="https://waylonwalker.com/shots/slab-fight/" rel="alternate" type="text/html"></link>
    <summary type="text">Slab Fight</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/13ceff65-f819-4204-a254-56df6bdff889.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/13ceff65-f819-4204-a254-56df6bdff889.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/13ceff65-f819-4204-a254-56df6bdff889.mp4&#34; type=&#34;video/mp4&#34;&gt;Slab Fight&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Slab Fight&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Stolen Dress</title>
    <id>https://waylonwalker.com/shots/stolen-dress/</id>
    <updated>2025-12-08T12:14:16Z</updated>
    <published>2025-12-08T12:14:16Z</published>
    <link href="https://waylonwalker.com/shots/stolen-dress/" rel="alternate" type="text/html"></link>
    <summary type="text">Stolen Dress</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/60a62671-be5e-4b5d-b140-ebf92d771a60.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/60a62671-be5e-4b5d-b140-ebf92d771a60.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/60a62671-be5e-4b5d-b140-ebf92d771a60.mp4&#34; type=&#34;video/mp4&#34;&gt;Stolen Dress&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Stolen Dress&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Moss Mother 2 Fight</title>
    <id>https://waylonwalker.com/shots/moss-mother-2-fight/</id>
    <updated>2025-12-08T12:11:58Z</updated>
    <published>2025-12-08T12:11:58Z</published>
    <link href="https://waylonwalker.com/shots/moss-mother-2-fight/" rel="alternate" type="text/html"></link>
    <summary type="text">Moss Mother 2 Fight</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/cb5103d7-f414-4fa0-9cd1-4a8470fa0070.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/cb5103d7-f414-4fa0-9cd1-4a8470fa0070.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/cb5103d7-f414-4fa0-9cd1-4a8470fa0070.mp4&#34; type=&#34;video/mp4&#34;&gt;Moss Mother 2 Fight&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Moss Mother 2 Fight&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>reminder Include steps to reproduce</title>
    <id>https://waylonwalker.com/reminder-include-steps-to-reproduce/</id>
    <updated>2025-12-08T10:09:23Z</updated>
    <published>2025-12-08T10:09:23Z</published>
    <link href="https://waylonwalker.com/reminder-include-steps-to-reproduce/" rel="alternate" type="text/html"></link>
    <summary type="text">Include steps to reproduce your bug when you file a bug report or issue. You may quickly forget how you got there, and no one can fix a bug that is not...</summary>
    <content type="html">&lt;p&gt;Include steps to reproduce your bug when you file a bug report or issue.  You&#xA;may quickly forget how you got there, and no one can fix a bug that is not&#xA;reproducible.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Moorwing</title>
    <id>https://waylonwalker.com/shots/moorwing/</id>
    <updated>2025-12-07T21:18:30Z</updated>
    <published>2025-12-07T21:18:30Z</published>
    <link href="https://waylonwalker.com/shots/moorwing/" rel="alternate" type="text/html"></link>
    <summary type="text">Moorwing</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/8b8230f7-c641-41c9-a772-a597dcd499e1.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/8b8230f7-c641-41c9-a772-a597dcd499e1.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/8b8230f7-c641-41c9-a772-a597dcd499e1.mp4&#34; type=&#34;video/mp4&#34;&gt;Moorwing&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Moorwing&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>All I want for Christmas is, filliment</title>
    <id>https://waylonwalker.com/all-i-want-for-christmas-is-filliment/</id>
    <updated>2025-12-07T16:38:30Z</updated>
    <published>2025-12-07T16:38:30Z</published>
    <link href="https://waylonwalker.com/all-i-want-for-christmas-is-filliment/" rel="alternate" type="text/html"></link>
    <summary type="text">All I want for Christmas is filament</summary>
    <content type="html">&lt;p&gt;All I want for Christmas is filament&lt;/p&gt;&#xA;&lt;p&gt;I don’t need gifts or fancy things&lt;/p&gt;&#xA;&lt;p&gt;I just wanna model, tinker, and print,&lt;/p&gt;&#xA;&lt;p&gt;watch layers stack just right.&lt;/p&gt;&#xA;&lt;p&gt;Santa, if you’re listening… PLA, PETG, ABS will do.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Needle Strike</title>
    <id>https://waylonwalker.com/shots/needle-strike/</id>
    <updated>2025-12-07T15:53:09Z</updated>
    <published>2025-12-07T15:53:09Z</published>
    <link href="https://waylonwalker.com/shots/needle-strike/" rel="alternate" type="text/html"></link>
    <summary type="text">Needle Strike</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/4022942b-b96e-4575-9fd4-ccece18bda0c.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/4022942b-b96e-4575-9fd4-ccece18bda0c.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/4022942b-b96e-4575-9fd4-ccece18bda0c.mp4&#34; type=&#34;video/mp4&#34;&gt;Needle Strike&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Needle Strike&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Conchflies Fight</title>
    <id>https://waylonwalker.com/shots/conchflies-fight/</id>
    <updated>2025-12-07T15:52:02Z</updated>
    <published>2025-12-07T15:52:02Z</published>
    <link href="https://waylonwalker.com/shots/conchflies-fight/" rel="alternate" type="text/html"></link>
    <summary type="text">Conchflies Fight</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/0ba195cf-dd6c-48e2-853b-3199e8d37262.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/0ba195cf-dd6c-48e2-853b-3199e8d37262.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/0ba195cf-dd6c-48e2-853b-3199e8d37262.mp4&#34; type=&#34;video/mp4&#34;&gt;Conchflies Fight&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Conchflies Fight&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>gh auth switch</title>
    <id>https://waylonwalker.com/gh-auth-switch/</id>
    <updated>2025-12-07T10:55:55Z</updated>
    <published>2025-12-07T10:55:55Z</published>
    <link href="https://waylonwalker.com/gh-auth-switch/" rel="alternate" type="text/html"></link>
    <summary type="text">When using two GitHub accounts the gh cli gives very easy workflow from the cli.</summary>
    <content type="html">&lt;p&gt;When using two GitHub accounts the gh cli gives very easy &lt;code&gt;gh auth switch&lt;/code&gt; workflow from the cli.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition hint&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;from the docs&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;gh auth switch –help&#xA;Switch the active account for a GitHub host.&lt;/p&gt;&#xA;&lt;p&gt;This command changes the authentication configuration that will&#xA;be used when running commands targeting the specified GitHub host.&lt;/p&gt;&#xA;&lt;p&gt;If the specified host has two accounts, the active account will be switched&#xA;automatically. If there are more than two accounts, disambiguation will be&#xA;required either through the &lt;code&gt;--user&lt;/code&gt; flag or an interactive prompt.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# list accounts&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gh auth status&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# switch accounds (interactive if more than 2, i&amp;#39;ve never seen this personally)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gh auth switch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ basecamp fizzy</title>
    <id>https://waylonwalker.com/basecamp-fizzy/</id>
    <updated>2025-12-07T05:04:49Z</updated>
    <published>2025-12-07T05:04:49Z</published>
    <link href="https://waylonwalker.com/basecamp-fizzy/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out basecamp and their project fizzy.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/basecamp&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;basecamp&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/basecamp/fizzy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fizzy&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Kanban as it should be. Not as it has been.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>setup bambu-studio in distrobox</title>
    <id>https://waylonwalker.com/setup-bambu-studio-in-distrobox/</id>
    <updated>2025-12-06T21:17:39Z</updated>
    <published>2025-12-06T21:17:39Z</published>
    <link href="https://waylonwalker.com/setup-bambu-studio-in-distrobox/" rel="alternate" type="text/html"></link>
    <summary type="text">gpus-are-awesome and I need one for Bambu Studio to be usable in a distrobox. Adding the flag to bind mounts the nvidia devices and sets up the necessary...</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;/gpus-are-awesome/&#34; class=&#34;wikilink&#34; data-title=&#34;gpus are awesome&#34; data-description=&#34;GPU&amp;#39;s are awesome. I just added gpu support to my bambu-studio distrobox and its flying! On my wayland based system the native package has never worked,...&#34; data-date=&#34;2025-12-03&#34; data-preview=&#34;GPU&amp;#39;s are awesome. I just added gpu support to my bambu-studio distrobox and its flying! On my wayland based system the native package has never worked,...&#34;&gt;gpus are awesome&lt;/a&gt; and I need one for Bambu Studio to be usable in a&#xA;distrobox.  Adding the &lt;code&gt;--nvidia&lt;/code&gt; flag to &lt;code&gt;distrobox create&lt;/code&gt; bind mounts the&#xA;nvidia &lt;code&gt;/dev/&lt;/code&gt; devices and sets up the necessary environment variables.  Once&#xA;we are in there are a couple of packages to install to make it work.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;distrobox create --name bambu-studio --image archlinux:latest --nvidia&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;distrobox enter bambu-studio&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pacman -S nvidia-utils lib32-nvidia-utils vulkan-icd-loader&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvidia-smi&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;glxinfo &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; gprep OpenGL&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pacman -Syu --needed base-devel git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://aur.archlinux.org/paru-bin.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; paru-bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;makepkg -si&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;paru -S bambustudio-bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bambu-studio&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;distrobox-export --app bambu-studio&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Zeioth garbage-day.nvim</title>
    <id>https://waylonwalker.com/zeioth-garbage-day-nvim/</id>
    <updated>2025-12-06T17:04:13Z</updated>
    <published>2025-12-06T17:04:13Z</published>
    <link href="https://waylonwalker.com/zeioth-garbage-day-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out garbage-day.nvim by Zeioth. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/Zeioth/garbage-day.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;garbage-day.nvim&lt;/a&gt; by &lt;a href=&#34;https://github.com/Zeioth&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Zeioth&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;Garbage collector that stops inactive LSP clients to free RAM&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Forebrothers Fight</title>
    <id>https://waylonwalker.com/shots/forebrothers-fight/</id>
    <updated>2025-12-06T14:55:15Z</updated>
    <published>2025-12-06T14:55:15Z</published>
    <link href="https://waylonwalker.com/shots/forebrothers-fight/" rel="alternate" type="text/html"></link>
    <summary type="text">Forebrothers Fight</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/f9d90fd7-c50b-4276-83ad-70b4318d281b.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/f9d90fd7-c50b-4276-83ad-70b4318d281b.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/f9d90fd7-c50b-4276-83ad-70b4318d281b.mp4&#34; type=&#34;video/mp4&#34;&gt;Forebrothers Fight&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Forebrothers Fight&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Forebrothers Full</title>
    <id>https://waylonwalker.com/shots/forebrothers-full/</id>
    <updated>2025-12-06T14:53:00Z</updated>
    <published>2025-12-06T14:53:00Z</published>
    <link href="https://waylonwalker.com/shots/forebrothers-full/" rel="alternate" type="text/html"></link>
    <summary type="text">Forebrothers Full</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/40caadf6-fae1-4cfd-be73-c515127ed0c4.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/40caadf6-fae1-4cfd-be73-c515127ed0c4.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/40caadf6-fae1-4cfd-be73-c515127ed0c4.mp4&#34; type=&#34;video/mp4&#34;&gt;Forebrothers Full&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Forebrothers Full&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Forebrothers</title>
    <id>https://waylonwalker.com/shots/forebrothers/</id>
    <updated>2025-12-06T14:46:02Z</updated>
    <published>2025-12-06T14:46:02Z</published>
    <link href="https://waylonwalker.com/shots/forebrothers/" rel="alternate" type="text/html"></link>
    <summary type="text">Forebrothers</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/07408375-3c1b-4bc8-8e10-76006a898839.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/07408375-3c1b-4bc8-8e10-76006a898839.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/07408375-3c1b-4bc8-8e10-76006a898839.mp4&#34; type=&#34;video/mp4&#34;&gt;Forebrothers&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Forebrothers&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Bambu Poop Flinger Unjammed</title>
    <id>https://waylonwalker.com/shots/bambu-poop-flinger-unjammed/</id>
    <updated>2025-12-06T11:13:07Z</updated>
    <published>2025-12-06T11:13:07Z</published>
    <link href="https://waylonwalker.com/shots/bambu-poop-flinger-unjammed/" rel="alternate" type="text/html"></link>
    <summary type="text">Here is a video clip of my Bambu A1 poop flinger fixed and not jamming during operation after my fix.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/5fdd4b5b-8651-4f37-9e56-1b10c3b276eb.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/5fdd4b5b-8651-4f37-9e56-1b10c3b276eb.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/5fdd4b5b-8651-4f37-9e56-1b10c3b276eb.mp4&#34; type=&#34;video/mp4&#34;&gt;Bambu Poop Flinger Unjammed&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Here is a video clip of my Bambu A1 poop flinger fixed and not jamming during operation after my fix.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Bambu Poop Flinger Jammed</title>
    <id>https://waylonwalker.com/shots/bambu-poop-flinger-jammed/</id>
    <updated>2025-12-06T11:11:53Z</updated>
    <published>2025-12-06T11:11:53Z</published>
    <link href="https://waylonwalker.com/shots/bambu-poop-flinger-jammed/" rel="alternate" type="text/html"></link>
    <summary type="text">My bambu A1 poop flinger has been getting jammed up for awhile now, here is an image of it in the jammed position.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/4225fa8a-65cd-48fe-81aa-31ad3ac86dc4.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/4225fa8a-65cd-48fe-81aa-31ad3ac86dc4.webp&#34; alt=&#34;bambu poop flinger jammed&#34;/ data-glightbox=&#34;description: bambu poop flinger jammed&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;My bambu A1 poop flinger has been getting jammed up for awhile now, here is an image of it in the jammed position.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>git worktrees are needed</title>
    <id>https://waylonwalker.com/git-worktrees-are-needed/</id>
    <updated>2025-12-06T09:58:06Z</updated>
    <published>2025-12-06T09:58:06Z</published>
    <link href="https://waylonwalker.com/git-worktrees-are-needed/" rel="alternate" type="text/html"></link>
    <summary type="text">git worktrees are goated, and must be leaned on moving forward.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; worktrees are goated, and must be leaned on moving forward.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>The Wrong Reasons To Run Kubernetes In Your Homelab</title>
    <id>https://waylonwalker.com/the-wrong-reasons-to-run-kubernetes-in-your-homelab/</id>
    <updated>2025-12-06T09:46:47Z</updated>
    <published>2025-12-06T09:46:47Z</published>
    <link href="https://waylonwalker.com/the-wrong-reasons-to-run-kubernetes-in-your-homelab/" rel="alternate" type="text/html"></link>
    <summary type="text">Running kubernetes in your homelab is complex, time consuming, there are almost no docs to help you (homelab focused docs for things you want to install),...</summary>
    <content type="html">&lt;p&gt;Running kubernetes in your &lt;a href=&#34;/homelab/&#34; class=&#34;glossary-term&#34; title=&#34;A place to self host applications. For me this is primarily self built web applications, and applications for sharing files with my family. Techno Tim has a...&#34;&gt;homelab&lt;/a&gt; is complex, time consuming, there are almost&#xA;no docs to help you (homelab focused docs for things you want to install), and&#xA;nothing is copy paste.  You have to make everything happen yourself.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-wrong-reasons-to-run-kubernetes-in-your-homelab&#34;&gt;The Wrong Reasons To Run Kubernetes In Your Homelab &lt;a href=&#34;#the-wrong-reasons-to-run-kubernetes-in-your-homelab&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I run compose and think kubernetes is the next logical step&lt;/li&gt;&#xA;&lt;li&gt;Techno Tim runs it&lt;/li&gt;&#xA;&lt;li&gt;I heard it’s what cool kids do&lt;/li&gt;&#xA;&lt;li&gt;Kubernetes BTW&lt;/li&gt;&#xA;&lt;li&gt;Talos Linux looks cool&lt;/li&gt;&#xA;&lt;li&gt;I found a cool helm chart on GitHub&lt;/li&gt;&#xA;&lt;li&gt;I need scale&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;There are also &lt;a href=&#34;/the-right-reasons-to-run-kubernetes-in-your-homelab/&#34; class=&#34;wikilink&#34; data-title=&#34;The Right Reasons To Run Kubernetes In Your Homelab&#34; data-description=&#34;Running kubernetes in your homelab is a fantastic way to learn, explore, express yourself, and run services that you use.&#34; data-date=&#34;2025-12-10&#34; data-preview=&#34;Running kubernetes in your homelab is a fantastic way to learn, explore, express yourself, and run services that you use.&#34;&gt;The Right Reasons To Run Kubernetes In Your Homelab&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;i-run-compose-and-think-kubernetes-is-the-next-logical-step&#34;&gt;I run compose and think kubernetes is the next logical step &lt;a href=&#34;#i-run-compose-and-think-kubernetes-is-the-next-logical-step&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;No it’s not.  It’s much different than running docker, compose, swarm.  It’s&#xA;meant for scale, it’s complex, it’s made for enterprise, not your local&#xA;development or your homelab.  It can do these things, it can do them quite&#xA;well, but it’s not the target audience.&lt;/p&gt;&#xA;&lt;h2 id=&#34;techno-tim-runs-it&#34;&gt;Techno Tim runs it &lt;a href=&#34;#techno-tim-runs-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;I heard it’s what cool kids do&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;You need to rethink who the cool kids are, touch some grass.  Tim also does it&#xA;for his job, he likes it, he knows it, he wants to lean on it and learn more.&lt;/p&gt;&#xA;&lt;h2 id=&#34;kubernetes-btw&#34;&gt;Kubernetes BTW &lt;a href=&#34;#kubernetes-btw&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Kubernetes does not make you look cool, it makes you look like you are trying&#xA;to over optimize and over engineer your life.  It’s not worth it, in fact&#xA;nothing in life is worth worrying about what everyone else thinks of you.&lt;/p&gt;&#xA;&lt;h2 id=&#34;talos-linux-looks-cool&#34;&gt;Talos Linux looks cool &lt;a href=&#34;#talos-linux-looks-cool&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Talos is an S tier OS wherever you deploy it.  It is a secure, minimal,&#xA;kubernetes first OS.  They also have some really great people working there&#xA;putting Talos in some really cool places like&#xA;&lt;a href=&#34;https://justingarrison.com/blog/petaflop-cluster/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/justingarrison.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/justingarrison.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;backpack&lt;/a&gt; or &lt;a href=&#34;https://justingarrison.com/cubernetes/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/justingarrison.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/justingarrison.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Apple Power&#xA;Mac&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;i-found-a-cool-helm-chart-on-github&#34;&gt;I found a cool helm chart on GitHub &lt;a href=&#34;#i-found-a-cool-helm-chart-on-github&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;No you didn’t.  Everything in homelab is compose first.  A few things have a&#xA;k8s option, but almost nothing is k8s first.&lt;/p&gt;&#xA;&lt;h2 id=&#34;i-need-scale&#34;&gt;I need scale &lt;a href=&#34;#i-need-scale&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;No.  You’re homelab does not need scale.  If you think it does, you have some&#xA;real shit hardware, some bad optimizations, or somehow you have a startup you&#xA;need to launch cause you got more users than most.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>my home row</title>
    <id>https://waylonwalker.com/my-home-row/</id>
    <updated>2025-12-05T21:27:55Z</updated>
    <published>2025-12-05T21:27:55Z</published>
    <link href="https://waylonwalker.com/my-home-row/" rel="alternate" type="text/html"></link>
    <summary type="text">My home row layout. It&#39;s not quite home row mods.</summary>
    <content type="html">&lt;p&gt;My home row layout. It’s not quite home row mods.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/4a7971fc-8d22-49b9-ae77-5551f5c8d914.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/4a7971fc-8d22-49b9-ae77-5551f5c8d914.webp&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dropper.waylonwalker.com/file/fd74f80e-ff5e-4548-8419-bd407144bb6c.excalidraw&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/dropper.waylonwalker.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/dropper.waylonwalker.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://dropper.waylonwalker.com/file/fd74f80e-ff5e-4548-8419-bd407144bb6c.excalidraw&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>I got the kubernetes in my basement autism</title>
    <id>https://waylonwalker.com/i-got-the-kubernetes-in-my-basement-autism/</id>
    <updated>2025-12-05T21:13:03Z</updated>
    <published>2025-12-05T21:13:03Z</published>
    <link href="https://waylonwalker.com/i-got-the-kubernetes-in-my-basement-autism/" rel="alternate" type="text/html"></link>
    <summary type="text">What flavor of autism did you guys get, I got the kind where I run kubernetes in my basement.</summary>
    <content type="html">&lt;p&gt;What flavor of autism did you guys get, I got the kind where I run kubernetes in my basement.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/49b356bc-f32c-4332-85ea-0eb2b7860091.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/49b356bc-f32c-4332-85ea-0eb2b7860091.webp&#34; alt=&#34;My homelab as June 2025&#34;/ data-glightbox=&#34;description: My homelab as June 2025&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/shorts/5Cac-cf5MOE&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://www.youtube.com/shorts/5Cac-cf5MOE&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>k3s system-upgrade minor by minor</title>
    <id>https://waylonwalker.com/k3s-system-upgrade-minor-by-minor/</id>
    <updated>2025-12-05T09:25:39Z</updated>
    <published>2025-12-05T09:25:39Z</published>
    <link href="https://waylonwalker.com/k3s-system-upgrade-minor-by-minor/" rel="alternate" type="text/html"></link>
    <summary type="text">The k3s system-upgrade controller is a fantastic tool for upgrading k3s automatically. It has done a fantastic job for me every time I&#39;ve used it. Today I...</summary>
    <content type="html">&lt;p&gt;The k3s system-upgrade controller is a fantastic tool for upgrading k3s&#xA;automatically.  It has done a fantastic job for me every time I’ve used it.&#xA;Today I ran it on a cluster that needed to upgrade several minors and I&#xA;learned that the controller does not pick up on changes to the channel url if&#xA;you change from minor to minor.&lt;/p&gt;&#xA;&lt;p&gt;The solution I came up with was to name the plan with the version it supports.&#xA;Then on each patch upgrade, change both the plan name and the channel.  I use&#xA;gitops with argocd, it automcatically cleaned up old plans, created new plans,&#xA;and the system-upgrade-controller picked up the plan and started applying&#xA;immediately.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Server plan&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;apiVersion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;upgrade.cattle.io/v1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;kind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Plan&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;server-plan-v1.33&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# &amp;lt;- This is important if you want to change the channel name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;namespace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;system-upgrade&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;concurrency&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;cordon&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;nodeSelector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;matchExpressions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;node-role.kubernetes.io/control-plane&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;operator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;In&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;values&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;serviceAccountName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;system-upgrade&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;upgrade&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;rancher/k3s-upgrade&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;channel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://update.k3s.io/v1-release/channels/v1.33&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;---&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Agent plan&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;apiVersion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;upgrade.cattle.io/v1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;kind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Plan&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;agent-plan-v1.33&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# &amp;lt;- This is important if you want to change the channel name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;namespace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;system-upgrade&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;concurrency&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;cordon&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;nodeSelector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;matchExpressions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;node-role.kubernetes.io/control-plane&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;operator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;DoesNotExist&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;prepare&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;prepare&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;server-plan&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;rancher/k3s-upgrade&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;serviceAccountName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;system-upgrade&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;upgrade&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;rancher/k3s-upgrade&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;channel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://update.k3s.io/v1-release/channels/v1.33&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I’d love to see a better way if you have a way to upgrade through minors, or&#xA;manually control the minor of your cluster let me know.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>gpus are awesome</title>
    <id>https://waylonwalker.com/gpus-are-awesome/</id>
    <updated>2025-12-03T20:21:14Z</updated>
    <published>2025-12-03T20:21:14Z</published>
    <link href="https://waylonwalker.com/gpus-are-awesome/" rel="alternate" type="text/html"></link>
    <summary type="text">GPU&#39;s are awesome. I just added gpu support to my bambu-studio distrobox and its flying! On my wayland based system the native package has never worked,...</summary>
    <content type="html">&lt;p&gt;GPU’s are awesome.  I just added gpu support to my bambu-studio distrobox and&#xA;its flying!  On my wayland based system the native package has never worked,&#xA;(arch or bazzite), but running in a distrobox does. Outside of distrobox the 3d&#xA;rendering canvas is black, no output.  It used to work fine without gpu&#xA;support, was snappy enough, complex models were a bit sluggish, but fine.&#xA;Lately something happened and simple models bring it to its knees.  It got&#xA;unusable!&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/a06bbf8b-abea-472e-8d96-4255d522444d.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/a06bbf8b-abea-472e-8d96-4255d522444d.webp&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The print I happen to be working on is some custom designed gumdrops for a&#xA;theater set.  The ui is working and not lagging 30s between clicks causing&#xA;clicks to happen on the wrong ui element.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ searlsco posse_party</title>
    <id>https://waylonwalker.com/searlsco-posse_party/</id>
    <updated>2025-12-03T03:22:49Z</updated>
    <published>2025-12-03T03:22:49Z</published>
    <link href="https://waylonwalker.com/searlsco-posse_party/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered posse_party by searlsco, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/searlsco/posse_party&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;posse_party&lt;/a&gt; by &lt;a href=&#34;https://github.com/searlsco&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;searlsco&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;Quit social media by posting more&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ZeroLu awesome-nanobanana-pro</title>
    <id>https://waylonwalker.com/zerolu-awesome-nanobanana-pro/</id>
    <updated>2025-12-02T02:38:25Z</updated>
    <published>2025-12-02T02:38:25Z</published>
    <link href="https://waylonwalker.com/zerolu-awesome-nanobanana-pro/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by awesome-nanobanana-pro from ZeroLu.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/ZeroLu/awesome-nanobanana-pro&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;awesome-nanobanana-pro&lt;/a&gt; from &lt;a href=&#34;https://github.com/ZeroLu&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ZeroLu&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;🚀 An awesome list of curated Nano Banana pro prompts and examples. Your go-to resource for mastering prompt engineering and exploring the creative potential of the Nano banana pro(Nano banana 2) AI image model.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Freika dawarich</title>
    <id>https://waylonwalker.com/freika-dawarich/</id>
    <updated>2025-12-01T14:15:22Z</updated>
    <published>2025-12-01T14:15:22Z</published>
    <link href="https://waylonwalker.com/freika-dawarich/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out dawarich by Freika. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/Freika/dawarich&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dawarich&lt;/a&gt; by &lt;a href=&#34;https://github.com/Freika&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Freika&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;Your favorite self-hostable alternative to Google Timeline (Google Location History)&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Apple Boxes Complete</title>
    <id>https://waylonwalker.com/shots/apple-boxes-complete/</id>
    <updated>2025-11-28T20:39:11Z</updated>
    <published>2025-11-28T20:39:11Z</published>
    <link href="https://waylonwalker.com/shots/apple-boxes-complete/" rel="alternate" type="text/html"></link>
    <summary type="text">A complete stack of apple boxes for the local theater.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/af7b072c-e40b-42fd-b243-8b09ba652a75.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/af7b072c-e40b-42fd-b243-8b09ba652a75.webp&#34; alt=&#34;Apple Boxes Complete&#34;/ data-glightbox=&#34;description: Apple Boxes Complete&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A complete stack of apple boxes for the local theater.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Design For Bosch Colt Dust Collection V1</title>
    <id>https://waylonwalker.com/shots/design-for-bosch-colt-dust-collection-v1/</id>
    <updated>2025-11-28T20:36:48Z</updated>
    <published>2025-11-28T20:36:48Z</published>
    <link href="https://waylonwalker.com/shots/design-for-bosch-colt-dust-collection-v1/" rel="alternate" type="text/html"></link>
    <summary type="text">Isometric view of the Bosch Colt dust collection design.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/f7a46bc1-60fb-48c7-94bb-5e9bdb4b5f04.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/f7a46bc1-60fb-48c7-94bb-5e9bdb4b5f04.webp&#34; alt=&#34;Design for bosch colt dust collection v1&#34;/ data-glightbox=&#34;description: Design for bosch colt dust collection v1&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Isometric view of the Bosch Colt dust collection design.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Dust Collection For Bosch Colt V0</title>
    <id>https://waylonwalker.com/shots/dust-collection-for-bosch-colt-v0/</id>
    <updated>2025-11-28T20:32:47Z</updated>
    <published>2025-11-28T20:32:47Z</published>
    <link href="https://waylonwalker.com/shots/dust-collection-for-bosch-colt-v0/" rel="alternate" type="text/html"></link>
    <summary type="text">Dust Collection for Bosch Colt router v0 made of 3/4&#34; plywood.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/3fe2aba3-30bc-4734-b75e-1c0b7e7c3d18.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/3fe2aba3-30bc-4734-b75e-1c0b7e7c3d18.webp&#34; alt=&#34;Dust Collection for Bosch Colt v0&#34;/ data-glightbox=&#34;description: Dust Collection for Bosch Colt v0&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Dust Collection for Bosch Colt router v0 made of 3/4&amp;#34; plywood.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/d8a8e8ec-8368-4100-9708-e0b6e0095105.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/d8a8e8ec-8368-4100-9708-e0b6e0095105.webp&#34; alt=&#34;Dust Collection for Bosch Colt v0 installed in the router, showing the back&#34;/ data-glightbox=&#34;description: Dust Collection for Bosch Colt v0 installed in the router, showing the back&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Installed in the router and showing the back&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/6afc7f52-5842-47ca-a67b-1b6792e39c33.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/6afc7f52-5842-47ca-a67b-1b6792e39c33.webp&#34; alt=&#34;Dust Collection for Bosch Colt v0 installed in the router, showing the front&#34;/ data-glightbox=&#34;description: Dust Collection for Bosch Colt v0 installed in the router, showing the front&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Installed in the router and showing the front&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ chr15m runprompt</title>
    <id>https://waylonwalker.com/chr15m-runprompt/</id>
    <updated>2025-11-28T19:33:57Z</updated>
    <published>2025-11-28T19:33:57Z</published>
    <link href="https://waylonwalker.com/chr15m-runprompt/" rel="alternate" type="text/html"></link>
    <summary type="text">chr15m has done a fantastic job with runprompt. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/chr15m&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;chr15m&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/chr15m/runprompt&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;runprompt&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Run LLM prompts from your shell&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>COLUMNS env var</title>
    <id>https://waylonwalker.com/columns-env-var/</id>
    <updated>2025-11-26T13:24:38Z</updated>
    <published>2025-11-26T13:24:38Z</published>
    <link href="https://waylonwalker.com/columns-env-var/" rel="alternate" type="text/html"></link>
    <summary type="text">setting env var to a number greater than 0 will make the terminal resize to that number of columns.</summary>
    <content type="html">&lt;p&gt;setting &lt;code&gt;COLUMNS&lt;/code&gt; env var to a number greater than 0 will make the terminal resize to that number of columns.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;COLUMNS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;80&lt;/span&gt; uvx --from rich-cli rich myscript.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;Not all programs respct the &lt;code&gt;COLUMNS&lt;/code&gt; env var, but rich does, and a lot of&#xA;stuff I’m building uses rich.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;I discovered this when I was trying to make a low effort readme generated from&#xA;the code, but did not depend on the size of terminal it was ran on.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# justfile&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;readme:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;# Workspaces&amp;#34;&lt;/span&gt; &amp;gt; README.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; README.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;``` bash&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; README.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;COLUMNS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;80&lt;/span&gt; ./workspaces.py --help &amp;gt;&amp;gt; README.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;```&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; README.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ grafana alloy-scenarios</title>
    <id>https://waylonwalker.com/grafana-alloy-scenarios/</id>
    <updated>2025-11-24T02:04:24Z</updated>
    <published>2025-11-24T02:04:24Z</published>
    <link href="https://waylonwalker.com/grafana-alloy-scenarios/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about alloy-scenarios, an amazing project by grafana. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/grafana/alloy-scenarios&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;alloy-scenarios&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/grafana&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;grafana&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;A collection of working Alloy scenarios&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tea login flag</title>
    <id>https://waylonwalker.com/tea-login-flag/</id>
    <updated>2025-11-23T21:09:36Z</updated>
    <published>2025-11-23T21:09:36Z</published>
    <link href="https://waylonwalker.com/tea-login-flag/" rel="alternate" type="text/html"></link>
    <summary type="text">The tea command for gitea (used by forgejo) has a flag for login. With gitea you can have multiple accounts logged in. When you try to run a command such as...</summary>
    <content type="html">&lt;p&gt;The tea command for gitea (used by forgejo) has a flag for login.  With gitea&#xA;you can have multiple accounts logged in.  When you try to run a command such&#xA;as &lt;code&gt;repo create&lt;/code&gt; it will prompt you which login to use, but I learned that you&#xA;can bake it in to all of them with &lt;code&gt;--login &amp;lt;login-name&amp;gt;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ tea repo create --name deleteme --description &lt;span class=&#34;s1&#34;&gt;&amp;#39;for example&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;┃ NOTE: no gitea login detected, whether falling back to login &lt;span class=&#34;s1&#34;&gt;&amp;#39;git.waylonwalker.com&amp;#39;&lt;/span&gt;?&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/11dc820d-1680-414c-9624-cd970b057a74.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/11dc820d-1680-414c-9624-cd970b057a74.webp&#34; alt=&#34;image showing message NOTE: no gitea login detected, whether falling back to login ‘git.waylonwalker.com’?&#34;/ data-glightbox=&#34;description: image showing message NOTE: no gitea login detected, whether falling back to login ‘git.waylonwalker.com’?&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tea repo create --name deleteme --description &lt;span class=&#34;s1&#34;&gt;&amp;#39;for example&amp;#39;&lt;/span&gt; --login git.wayl.one&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ WaylonWalker wyattbubbylee.com</title>
    <id>https://waylonwalker.com/waylonwalker-wyattbubbylee-com/</id>
    <updated>2025-11-23T17:08:03Z</updated>
    <published>2025-11-23T17:08:03Z</published>
    <link href="https://waylonwalker.com/waylonwalker-wyattbubbylee-com/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? wyattbubbylee.com by WaylonWalker.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/WaylonWalker/wyattbubbylee.com&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;wyattbubbylee.com&lt;/a&gt; by &lt;a href=&#34;https://github.com/WaylonWalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;WaylonWalker&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ WaylonWalker qmk_firmware</title>
    <id>https://waylonwalker.com/waylonwalker-qmk_firmware/</id>
    <updated>2025-11-23T17:08:01Z</updated>
    <published>2025-11-23T17:08:01Z</published>
    <link href="https://waylonwalker.com/waylonwalker-qmk_firmware/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on qmk_firmware, created by WaylonWalker.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/WaylonWalker/qmk_firmware&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;qmk_firmware&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/WaylonWalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;WaylonWalker&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Open-source keyboard firmware for Atmel AVR and Arm USB families&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-11-21 Notes</title>
    <id>https://waylonwalker.com/2025-11-21-notes/</id>
    <updated>2025-11-21T14:25:59Z</updated>
    <published>2025-11-21T14:25:59Z</published>
    <link href="https://waylonwalker.com/2025-11-21-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">Learned about nginx_auth today. Feels good to unlock a new skill that I did not quite understand before. I don&#39;t think I grasped that there is a backend...</summary>
    <content type="html">&lt;p&gt;Learned about nginx_auth today.  Feels good to unlock a new skill that I did not quite understand before.  I don’t think I grasped that there is a backend server in this flow to handle every request.  I could not fathom how this was secure with nginx alone.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://git.wayl.one/waylon/learn-nginx-auth&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/git.wayl.one.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/git.wayl.one.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://git.wayl.one/waylon/learn-nginx-auth&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I’m excited to give this a try in my &lt;a href=&#34;/homelab/&#34; class=&#34;glossary-term&#34; title=&#34;A place to self host applications. For me this is primarily self built web applications, and applications for sharing files with my family. Techno Tim has a...&#34;&gt;homelab&lt;/a&gt; with k3s ingress next.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ octelium octelium</title>
    <id>https://waylonwalker.com/octelium-octelium/</id>
    <updated>2025-11-20T01:02:04Z</updated>
    <published>2025-11-20T01:02:04Z</published>
    <link href="https://waylonwalker.com/octelium-octelium/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out octelium by octelium. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/octelium/octelium&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;octelium&lt;/a&gt; by &lt;a href=&#34;https://github.com/octelium&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;octelium&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;A next-gen FOSS &lt;a href=&#34;/self-host/&#34; class=&#34;glossary-term&#34; title=&#34;Self hosting is the act of hosting your own applications and services without using a SAS provider. This is typically done with your own hardware, but there...&#34;&gt;self-hosted&lt;/a&gt; unified zero trust secure access platform that can operate as a remote access VPN, a ZTNA platform, API/AI/MCP gateway, a PaaS, an ngrok-alternative and a &lt;a href=&#34;/homelab/&#34; class=&#34;glossary-term&#34; title=&#34;A place to self host applications. For me this is primarily self built web applications, and applications for sharing files with my family. Techno Tim has a...&#34;&gt;homelab&lt;/a&gt; infrastructure.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-11-19 Notes</title>
    <id>https://waylonwalker.com/2025-11-19-notes/</id>
    <updated>2025-11-19T18:55:14Z</updated>
    <published>2025-11-19T18:55:14Z</published>
    <link href="https://waylonwalker.com/2025-11-19-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">Making progress on dropper this week.</summary>
    <content type="html">&lt;p&gt;Making progress on dropper this week.&lt;/p&gt;&#xA;&lt;p&gt;In prod.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;resize for image and video&lt;/li&gt;&#xA;&lt;li&gt;File feed with paging&lt;/li&gt;&#xA;&lt;li&gt;New plain filesystem backend&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In dev&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Robust video conversion that seems to work on all my test videos&lt;/li&gt;&#xA;&lt;li&gt;Duplicate file detection&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Thinking about kedro pipelines from my phone in a parking lot here. I’m thinking about big picture what’s next for my pipelines.  I want an effective Dr plan. I want to create telemetry endpoints for catalog.  This will enable the Dr plan to identify  critical data that is not created by a pipeline and communication points to other teams.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Another Big Cloud Outage Nov 2025</title>
    <id>https://waylonwalker.com/another-big-cloud-outage-nov-2025/</id>
    <updated>2025-11-18T18:39:00Z</updated>
    <published>2025-11-18T18:39:00Z</published>
    <link href="https://waylonwalker.com/another-big-cloud-outage-nov-2025/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I woke up to finding out that cloudflare hade a widespread outage. My Reader uses tailwind cdn for styles and it was down. Otherwise it was not so...</summary>
    <content type="html">&lt;p&gt;Today I woke up to finding out that cloudflare hade a widespread outage.  My &lt;a href=&#34;/reader/&#34; class=&#34;wikilink&#34; data-title=&#34;Reader&#34; data-description=&#34;Latest posts from blogs I follow&#34; data-preview=&#34;Latest posts from blogs I follow&#34;&gt;Reader&lt;/a&gt; uses tailwind cdn for styles and it was down. Otherwise it was not so impactful to me and felt kike they were quick to have it up.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I’m not really researching here, just jotting thoughts down from a parking lot waiting for pickup.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It feels like we are seeing a lot of these lately.  They feel much more frequent.  It feels like a whole industry was sold on 9’s and reliability of big cloud that we just aren’t getting.&lt;/p&gt;&#xA;&lt;p&gt;There’s a huge push to go back to self hosting, racking and stacking.  I think this is great.  I love it.  I’m a big proponent for ownership and self hosting.  It’s not the right move for everything and everyone, and is certainly not something to make a knee jerk reaction about in the moment of frustration.&lt;/p&gt;&#xA;&lt;p&gt;There’s a lot of things that are just impossible to do yourself, cdn caching, edge compute, ddos protection.&lt;/p&gt;&#xA;&lt;p&gt;These companies are not magic they are vulnerable to changes just like you and I.  It really feels like more and more of these are due to misconfigurations, and small bugs introduced.  As we see big tech downsize and lean more on ai that likes to do big code changes I dont see it getting better soon.  Theres a lot of things we can all armchair quarterback about here, better testing, review, canary deployment, staged rollouts, rigorous review.  All great things.  I can hear Uncle Bob talking about rigor, giving a shit, and following principles.&lt;/p&gt;&#xA;&lt;p&gt;We are at odds of reliability and speed.  This critical infrastructure runs so many important things in our lives it feels like it deserves a professional engineer signoff on changes.  Documentation of changes and testing done between changes.  This would all but hault forward progress, taking us back to the level of physical components and manufacturing.&lt;/p&gt;&#xA;&lt;p&gt;How do you decide what needs this rigor and how to regulate it when companies are incentized by number go up.&lt;/p&gt;&#xA;&lt;p&gt;The answer right now is that we can’t and if you are managing critical infrastructure you need to take these outages into account in your disaster recovery plan and understand what you are willing to allow go down on failure.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>side effect of just stars</title>
    <id>https://waylonwalker.com/side-effect-of-just-stars/</id>
    <updated>2025-11-11T21:33:33Z</updated>
    <published>2025-11-11T21:33:33Z</published>
    <link href="https://waylonwalker.com/side-effect-of-just-stars/" rel="alternate" type="text/html"></link>
    <summary type="text">I found an interesting side effect of manually running my script to generate stars posts is that you get notified when one gets renamed. Today I noticed that...</summary>
    <content type="html">&lt;p&gt;I found an interesting side effect of manually running my script to generate [[&#xA;stars ]] posts is that you get notified when one gets renamed.  Today I noticed&#xA;that Ned Batchelder created a coveragepy org.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/cf6dd0cc-5a74-40bf-8512-f62471ea1e56.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/cf6dd0cc-5a74-40bf-8512-f62471ea1e56.png&#34; alt=&#34;screenshot-2025-11-12T03-33-12-967Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-11-12T03-33-12-967Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>pydantic settings alias choices</title>
    <id>https://waylonwalker.com/pydantic-settings-alias-choices/</id>
    <updated>2025-11-11T21:23:58Z</updated>
    <published>2025-11-11T21:23:58Z</published>
    <link href="https://waylonwalker.com/pydantic-settings-alias-choices/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I learned how to use AliasChoices with pydantic settings to setup common aliases for the same field. I&#39;m bad about remembering these things, and hate...</summary>
    <content type="html">&lt;p&gt;Today I learned how to use AliasChoices with pydantic settings to setup common&#xA;aliases for the same field.  I’m bad about remembering these things, and hate&#xA;looking up the docs.  I like things to be intuitive and just do the thing I&#xA;want it to do.  Especially when they get configured through something like yaml&#xA;and do not have a direct lsp look up right from my editor.  I figured out how&#xA;to support what might be common aliases for a storage directory.  These can be&#xA;set up as environment variables and used by config.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pathlib&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pydantic&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Field&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pydantic&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;AliasChoices&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pydantic_settings&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BaseSettings&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Settings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BaseSettings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;storage_dir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Field&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;validation_alias&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AliasChoices&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s2&#34;&gt;&amp;#34;STORAGE_DIR&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;STORAGE_DIRECTORY&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;STORAGE_PATH&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;STORAGE_PATHNAME&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s2&#34;&gt;&amp;#34;DROPPER_STORAGE_DIR&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;DROPPER_STORAGE_DIRECTORY&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;DROPPER_STORAGE_PATH&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;DROPPER_STORAGE_PATHNAME&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;description&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Directory for stored files&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>3d-Printed Corner Clamp</title>
    <id>https://waylonwalker.com/3d-printed-corner-clamp/</id>
    <updated>2025-11-11T21:13:07Z</updated>
    <published>2025-11-11T21:13:07Z</published>
    <link href="https://waylonwalker.com/3d-printed-corner-clamp/" rel="alternate" type="text/html"></link>
    <summary type="text">Getting ready to batch out 18 apple boxes for the local theater. Need to step up my woodworking tool game here quick on a low budget. Whipped this up up and...</summary>
    <content type="html">&lt;p&gt;Getting ready to batch out 18 apple boxes for the local theater.  Need to step&#xA;up my woodworking tool game here quick on a low budget.  Whipped this up up and&#xA;built the prototype box , went really well. We have 4 in the arsenal now, might&#xA;do 4 more if we need more assembly capacity.  Pretty proud of the first 3d&#xA;printed thread project here.  The design for good 3d prints can be quite&#xA;different with its anisotropic strength and hollow sections being nearly&#xA;weightless when compared to traditional manufacturing methods.  Its so fun to&#xA;be able to do it for almost no cost right in my home office.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/2701fb29-5a35-4249-a66d-8a84a774fb0c.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/2701fb29-5a35-4249-a66d-8a84a774fb0c.jpg&#34; alt=&#34;PXL_20251112_030154891-cropped.jpg&#34;/ data-glightbox=&#34;description: PXL_20251112_030154891-cropped.jpg&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;3d-printed corner clamp printed in black pla.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/6a0c5ef1-4f8b-4b4d-9def-60e3168a464c.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/6a0c5ef1-4f8b-4b4d-9def-60e3168a464c.png&#34; alt=&#34;Corner Clamp V1 isometric&#34;/ data-glightbox=&#34;description: Corner Clamp V1 isometric&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Isometric view of my corner clamp v1 that supports up to 3/4&amp;#34; sheets and includes slots for dowell points on 3/4&amp;#34; and 1/2&amp;#34; material.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Techbrophobic</title>
    <id>https://waylonwalker.com/techbrophobic/</id>
    <updated>2025-11-09T20:13:33Z</updated>
    <published>2025-11-09T20:13:33Z</published>
    <link href="https://waylonwalker.com/techbrophobic/" rel="alternate" type="text/html"></link>
    <summary type="text">I just heard someone drop the this term and it kinda fits a lot of shit on the internet right now. Arguing that its OK to question AI, its OK to like it, its...</summary>
    <content type="html">&lt;p&gt;I just heard someone drop the this term and it kinda fits a lot of shit on the&#xA;internet right now.  Arguing that its OK to question AI, its OK to like it, its&#xA;OK to question if it needs to be in every goddamn thing we do, question its&#xA;morality on training and the slop being pushed at us all the time.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I’m not Technophobic I’m Techbrophobic&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I heard this and it kinda hit with a lot of things that I’ve resonated with&#xA;lately.  Tech bros of today have been compared to Steve Jobs in a lot of ways.&#xA;Whether its style or the way he was so good at marketing, but this feels&#xA;different.  When Jobs launched the iPhone as this next great thing, He fucking&#xA;made the thing.&lt;/p&gt;&#xA;&lt;p&gt;No broken promises of being sold something with hopes that it&#xA;will do more tomorrow.&lt;/p&gt;&#xA;&lt;p&gt;No pushing around insane amounts of money with the hope&#xA;to become profitable years down the line.&lt;/p&gt;&#xA;&lt;p&gt;No fear pushing that if you are not&#xA;doing X today your business will be dead in 6 months.&lt;/p&gt;&#xA;&lt;p&gt;Giving us the promise that it was about to create an entire industry of careers&#xA;through building software that brought us real value, real entertainment, Not&#xA;the promise of that.&lt;/p&gt;&#xA;&lt;p&gt;This tech made it easier to do the mundane, no longer carrying out dated maps&#xA;in your glove box, everyone now has a flashlight, a calculator, a camera, a way&#xA;to video call your mom.&lt;/p&gt;&#xA;&lt;p&gt;I’m not a complete Luddite, I see value in being able to lean on AI for&#xA;generating code, asking questions, helping change the tone of your messages.&lt;/p&gt;&#xA;&lt;p&gt;There are so many issues with AI currently even looking past the stolen works,&#xA;copyright, and power consumption.  The messaging does not pass the vibe check.&#xA;High up folks are getting the impression that they can remove humans from the&#xA;workforce.  Deploy the same features with fewer headcount.  It’s doing our art,&#xA;writing our code, communicating with our colleagues.  It’s not doing protein&#xA;folding and cancer research.  No matter how many promises we get its not&#xA;driving our vehicles.&lt;/p&gt;&#xA;&lt;p&gt;I do believe there is a world in which it makes us more efficient.  It fills in&#xA;the gaps of our knowledge.  It helps us learn.  It helps solve complex&#xA;problems.  It allows humans to flourish and create things they never could&#xA;have.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Mcat Anything</title>
    <id>https://waylonwalker.com/mcat-anything/</id>
    <updated>2025-11-05T20:10:02Z</updated>
    <published>2025-11-05T20:10:02Z</published>
    <link href="https://waylonwalker.com/mcat-anything/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve long looked for a way to cat anything in the terminal. I&#39;m am terminally in the terminal. I manage all of my projects, code, website, notes, files,...</summary>
    <content type="html">&lt;p&gt;I’ve long looked for a way to cat anything in the terminal.   I’m am terminally&#xA;in the terminal.  I manage all of my projects, code, website, notes, files,&#xA;servers, infrastructure, almost everything from the terminal.  I occasionally&#xA;open a file manager, mostly at home, only so that I can browse images.&lt;/p&gt;&#xA;&lt;p&gt;Compounding my issue, I’m a tmux user. It works great for me, and I barely have&#xA;to think about it at this point. The keybindings are second nature to me.  I&#xA;can go between server, terminal, nvim, and between projects instantly, no&#xA;loader, no lag, no animation, it just works for everything that really matters&#xA;to me for really getting things done.&lt;/p&gt;&#xA;&lt;h2 id=&#34;mcat&#34;&gt;Mcat &lt;a href=&#34;#mcat&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;mcat&lt;/code&gt; is a new tool that seems like it can cat anything in the terminal, code,&#xA;files, images, markdown, markdown with images, and even video, without leaving&#xA;tmux!&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mcat static/8bitcc.png&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl https://r.jina.ai/https://waylonwalker.com/store/ &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; mcat --theme dracula --md-image all&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl https://r.jina.ai/https://waylonwalker.com/shots/ &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; mcat --theme dracula&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mcat ~/git/dropper/data/01b21044-0bf8-4b06-9db1-a002c0519df6.mp4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mcat ~/git/dropper/data/0e659c05-1c12-4524-aa54-ef52ba680865.webm&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;!-- ![1fa2e162-deeb-4bb5-b1c5-961632abd452.mp4](https://dropper.waylonwalker.com/api/file/1fa2e162-deeb-4bb5-b1c5-961632abd452.mp4) --&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/663a3793-6426-4b91-a7df-835540d16910.webm&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/663a3793-6426-4b91-a7df-835540d16910.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/663a3793-6426-4b91-a7df-835540d16910.webm&#34; type=&#34;video/webm&#34;&gt;1fa2e162-deeb-4bb5-b1c5-961632abd452.webm&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;but-it-doesnt-always-work&#34;&gt;But it doesn’t always work &lt;a href=&#34;#but-it-doesnt-always-work&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The keen eyed of you will notice the blank screen at the start of the demo&#xA;above, not sure what happened, but resizing the terminal fixed something.&#xA;Sometimes video comes up as an image, sometimes it core dumps, once even it&#xA;crashed my system…&lt;/p&gt;&#xA;&lt;p&gt;The hope is there, I’ll continue to use it occasionally, but right now it feels&#xA;like a novelty that is fun to look at when it works.  For now I’m going to&#xA;stick to my kitty/tmux combo that works even though they seem to hate each&#xA;other and I’m going to be happy just getting shit done.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Missing Thoughts</title>
    <id>https://waylonwalker.com/missing-thoughts-on-main/</id>
    <updated>2025-11-05T07:23:35Z</updated>
    <published>2025-11-05T07:23:35Z</published>
    <link href="https://waylonwalker.com/missing-thoughts-on-main/" rel="alternate" type="text/html"></link>
    <summary type="text">No one is perfect, this is why we have things like checkpoints or gates in the form of pull requests, linting, type checking, and tests. What happens when...</summary>
    <content type="html">&lt;p&gt;No one is perfect, this is why we have things like checkpoints or gates in the&#xA;form of pull requests, linting, type checking, and tests.  What happens when&#xA;you work on small side projects by yourself that try to be content focused?&#xA;What happens when you end up building a lot of the tech under that site and&#xA;build it on the bleeding edge of all the tech you make? They are likely missing&#xA;these things and occasionally there are some periods of regression.  This is&#xA;one reason I really like the term digital garden to describe one’s small corner&#xA;of the internet where they share their thoughts.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;There will be regressions&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;the-signs&#34;&gt;The Signs &lt;a href=&#34;#the-signs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There were signs, signs I did not notice&lt;/p&gt;&#xA;&lt;div class=&#34;admonition chat&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Chat&lt;/p&gt;&#xA;&lt;p&gt;is your rss feed broken?&lt;/p&gt;&#xA;&lt;p&gt;I’m not seeing anything show up in my rss reader&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition chat-reply&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;me&lt;/p&gt;&#xA;&lt;p&gt;Do I not put thoughts in my rss feed, I swore I did.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition chat&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Chat&lt;/p&gt;&#xA;&lt;p&gt;my fault, Turns out I must have already clicked it in my reader.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition chat-reply&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;me&lt;/p&gt;&#xA;&lt;p&gt;great, glat it’s working&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;…But it wasn’t&lt;/p&gt;&#xA;&lt;p&gt;Later this week comes the next sign that I also choose to ignore… Google&#xA;search has unindexed a number of pages due to a soft 404.  I don’t look at all&#xA;of the emails from search console, but I did happen to see this one, and&#xA;thought “Huh, that’s odd” and went on with my day without another thought on the&#xA;issue.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/5601435b-2c87-4598-b01f-57e5eb737ebe.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/5601435b-2c87-4598-b01f-57e5eb737ebe.png&#34; alt=&#34;screenshot-2025-11-04T02-59-44-259Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-11-04T02-59-44-259Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Huh, that’s odd&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;the-discovery&#34;&gt;The Discovery &lt;a href=&#34;#the-discovery&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I didn’t realize I even had an issue until later that week when I went to my [[&#xA;archive ]] myself and noticed the shape of it looks off.  When I opened up my&#xA;feed something felt off, it was only the big posts.  Thoughts show up as a&#xA;different kind of card&lt;/p&gt;&#xA;&lt;p&gt;Then it hit me.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Something just felt off&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Thoughts are Gone!&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-fix&#34;&gt;The Fix &lt;a href=&#34;#the-fix&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I popped open my config and immediately knew what happened.  I turned off some&#xA;plugins locally for faster build iteration and that change found its way into&#xA;production…. because I have nothing to check myself on other than me.  The&#xA;plugin is now back and thoughts are flowing from thoughts.waylonwalker.com to&#xA;waylonwalker.com, no problem.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ git log -p&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;commit adeb9812f7ecf4d9a68c6aa5e01e549e4dd91285 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;HEAD -&amp;gt; main, origin/main, origin/HEAD&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Author: Waylon S. Walker &amp;lt;waylon@waylonwalker.com&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Date:   Mon Nov &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; 19:56:40 &lt;span class=&#34;m&#34;&gt;2025&lt;/span&gt; -0600&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    thoughts were missing&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;diff --git a/markata.toml b/markata.toml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;index 59539bab..a55a494d &lt;span class=&#34;m&#34;&gt;100644&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--- a/markata.toml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+++ b/markata.toml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;@@ -31,7 +31,7 @@ &lt;span class=&#34;nv&#34;&gt;hooks&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;s1&#34;&gt;&amp;#39;plugins.chartjs&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;s1&#34;&gt;&amp;#39;plugins.md_video&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;s1&#34;&gt;&amp;#39;plugins.post_model&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-    &lt;span class=&#34;c1&#34;&gt;# &amp;#39;plugins.thoughts&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+    &lt;span class=&#34;s1&#34;&gt;&amp;#39;plugins.thoughts&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;c1&#34;&gt;# &amp;#34;plugins.wikilink_hover&amp;#34;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;c1&#34;&gt;# &amp;#34;plugins.wa_wikilink_hover&amp;#34;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;s2&#34;&gt;&amp;#34;plugins.tippy_wikilink_hover&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;owning-everything-has-a-cost&#34;&gt;Owning Everything has a cost &lt;a href=&#34;#owning-everything-has-a-cost&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You see here I am a one man show.  I own the content, the build, the infra that&#xA;does the build.  I love it, but there is so much to do for one persons side&#xA;project passion project.  Did I bite off more than I can chew? Did I choose the&#xA;wrong abstraction level for my needs?  Should I have better tests in place? Or&#xA;is this just a digital garden that has ebs and flows, growing weeds and pruning&#xA;them every few months?&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Skardyy mcat</title>
    <id>https://waylonwalker.com/skardyy-mcat/</id>
    <updated>2025-11-04T23:36:51Z</updated>
    <published>2025-11-04T23:36:51Z</published>
    <link href="https://waylonwalker.com/skardyy-mcat/" rel="alternate" type="text/html"></link>
    <summary type="text">mcat by Skardyy is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/Skardyy/mcat&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mcat&lt;/a&gt; by &lt;a href=&#34;https://github.com/Skardyy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Skardyy&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;Terminal image, video, directory, and Markdown viewer&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-11-04 Notes</title>
    <id>https://waylonwalker.com/2025-11-04-notes/</id>
    <updated>2025-11-04T18:43:38Z</updated>
    <published>2025-11-04T18:43:38Z</published>
    <link href="https://waylonwalker.com/2025-11-04-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I gave mcat a try and it&#39;s so sick. It can anything right in the terminal, pdf, image, even video. It even works inside tmux unlike almost anything...</summary>
    <content type="html">&lt;p&gt;Today I gave mcat a try and it’s so sick.  It can &lt;code&gt;cat&lt;/code&gt; anything right in the&#xA;terminal, pdf, image, even video.  It even works inside tmux unlike almost&#xA;anything else that I’ve tried.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Corner Clamp V1 Isometric</title>
    <id>https://waylonwalker.com/shots/corner-clamp-v1-isometric/</id>
    <updated>2025-11-01T13:39:02Z</updated>
    <published>2025-11-01T13:39:02Z</published>
    <link href="https://waylonwalker.com/shots/corner-clamp-v1-isometric/" rel="alternate" type="text/html"></link>
    <summary type="text">Isometric view of my corner clamp v1 that supports up to 3/4&#34; sheets and includes slots for dowell points on 3/4&#34; and 1/2&#34; material.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/6a0c5ef1-4f8b-4b4d-9def-60e3168a464c.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/6a0c5ef1-4f8b-4b4d-9def-60e3168a464c.png&#34; alt=&#34;Corner Clamp V1 isometric&#34;/ data-glightbox=&#34;description: Corner Clamp V1 isometric&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Isometric view of my corner clamp v1 that supports up to 3/4&amp;#34; sheets and includes slots for dowell points on 3/4&amp;#34; and 1/2&amp;#34; material.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Act Ii</title>
    <id>https://waylonwalker.com/shots/act-ii/</id>
    <updated>2025-11-01T10:13:03Z</updated>
    <published>2025-11-01T10:13:03Z</published>
    <link href="https://waylonwalker.com/shots/act-ii/" rel="alternate" type="text/html"></link>
    <summary type="text">Act Ii</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/6128f50f-7d0d-4d9f-abf6-a471350704ab.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/6128f50f-7d0d-4d9f-abf6-a471350704ab.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/6128f50f-7d0d-4d9f-abf6-a471350704ab.mp4&#34; type=&#34;video/mp4&#34;&gt;Act Ii&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Act Ii&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Last Judge</title>
    <id>https://waylonwalker.com/shots/last-judge/</id>
    <updated>2025-11-01T10:12:13Z</updated>
    <published>2025-11-01T10:12:13Z</published>
    <link href="https://waylonwalker.com/shots/last-judge/" rel="alternate" type="text/html"></link>
    <summary type="text">Last Judge</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/b83801b8-f203-4344-a429-dd36f95784cc.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/b83801b8-f203-4344-a429-dd36f95784cc.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/b83801b8-f203-4344-a429-dd36f95784cc.mp4&#34; type=&#34;video/mp4&#34;&gt;Last Judge&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Last Judge&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ rustfs rustfs</title>
    <id>https://waylonwalker.com/rustfs-rustfs/</id>
    <updated>2025-10-31T12:38:49Z</updated>
    <published>2025-10-31T12:38:49Z</published>
    <link href="https://waylonwalker.com/rustfs-rustfs/" rel="alternate" type="text/html"></link>
    <summary type="text">rustfs by rustfs is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/rustfs/rustfs&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rustfs&lt;/a&gt; by &lt;a href=&#34;https://github.com/rustfs&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rustfs&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;🚀 RustFS is an open-source, S3-compatible high-performance object storage system supporting migration and coexistence with other S3-compatible platforms such as MinIO and Ceph.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ schollz croc</title>
    <id>https://waylonwalker.com/schollz-croc/</id>
    <updated>2025-10-27T12:33:54Z</updated>
    <published>2025-10-27T12:33:54Z</published>
    <link href="https://waylonwalker.com/schollz-croc/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred croc by schollz. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/schollz/croc&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;croc&lt;/a&gt; by &lt;a href=&#34;https://github.com/schollz&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;schollz&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;Easily and securely send things from one computer to another 🐊 📦&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>uv s3 sync with dotenv</title>
    <id>https://waylonwalker.com/uv-s3-sync-with-dotenv/</id>
    <updated>2025-10-26T10:16:41Z</updated>
    <published>2025-10-26T10:16:41Z</published>
    <link href="https://waylonwalker.com/uv-s3-sync-with-dotenv/" rel="alternate" type="text/html"></link>
    <summary type="text">I often want to run an s3 sync in an isolated environment, I don&#39;t want to set any environment variables, I don&#39;t want anything secret in my history, and I...</summary>
    <content type="html">&lt;p&gt;I often want to run an s3 sync in an isolated environment, I don’t want to set&#xA;any environment variables, I don’t want anything secret in my history, and I&#xA;don’t want to change my dotenv into something that exports variables, I just&#xA;want s3 sync to work.  &lt;code&gt;dotenv run&lt;/code&gt; is the tool that I’ve been using for this,&#xA;and this uv one liner lets it run fully isolated from the project.&lt;/p&gt;&#xA;&lt;h2 id=&#34;one-liner&#34;&gt;one liner &lt;a href=&#34;#one-liner&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv tool run --from &lt;span class=&#34;s1&#34;&gt;&amp;#39;python-dotenv[cli]&amp;#39;&lt;/span&gt; dotenv run -- uv tool run --from awscli aws s3 sync s3://bucket data&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;multi-line&#34;&gt;multi-line &lt;a href=&#34;#multi-line&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;same thing formatted for readability&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv tool run &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  --from &lt;span class=&#34;s1&#34;&gt;&amp;#39;python-dotenv[cli]&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  dotenv run -- &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;uv tool run &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  --from awscli &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  aws s3 sync s3://dropper data&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;There are probably 10 ways to skin this cat, but this is what I did, if you&#xA;have a better way let me know, I’ll link you below.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>First 3d Printed Threads</title>
    <id>https://waylonwalker.com/first-3d-printed-threads/</id>
    <updated>2025-10-24T14:19:49Z</updated>
    <published>2025-10-24T14:19:49Z</published>
    <link href="https://waylonwalker.com/first-3d-printed-threads/" rel="alternate" type="text/html"></link>
    <summary type="text">Working on an upcoming project that requires some threaded screws. Trying to keep a low budget on this one with as much to come off of the printer as I can....</summary>
    <content type="html">&lt;p&gt;Working on an upcoming project that requires some threaded screws.  Trying to&#xA;keep a low budget on this one with as much to come off of the printer as I can.&#xA;It might become a slant3d portals product if it works out.  I always like&#xA;making test prints for stuff like this especially to see how the feel is off of&#xA;the printer that is going to print the final product and take much longer.&#xA;First try was a success.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/21498d89-41e1-45de-9b35-e3dd059de505.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/21498d89-41e1-45de-9b35-e3dd059de505.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/21498d89-41e1-45de-9b35-e3dd059de505.mp4&#34; type=&#34;video/mp4&#34;&gt;b485b759-719a-4aa0-aa8d-f98e0a5e1ac3-1080p.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;what-worked&#34;&gt;What worked &lt;a href=&#34;#what-worked&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I started out looking up standard half inch thread pitch and size, but ran out&#xA;of time to get the exact profile of a half inch bolt, so I will need to fix&#xA;that later.  Th&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/376691bc-8aec-40f7-9137-9338cc2265b2.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/376691bc-8aec-40f7-9137-9338cc2265b2.png&#34; alt=&#34;Boolean operation to remove threads from the block with 0.1mm offset&#34;/ data-glightbox=&#34;description: Boolean operation to remove threads from the block with 0.1mm offset&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;The print orientation is critical for strength here.  This part is a full 1/2:&#xA;so it should be strong either way, but to make sure we are printing the bolt&#xA;horizontally to get nice long print layers.  To do this we have to give it a&#xA;bit of a flat spot on the top and bottom.  This does not hurt performance, if&#xA;anything it probably helps give some room for poor tolerances.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/60f37fc2-7e4b-4671-9bb4-582715e1534d.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/60f37fc2-7e4b-4671-9bb4-582715e1534d.webp&#34; alt=&#34;Print orientation of the test parts&#34;/ data-glightbox=&#34;description: Print orientation of the test parts&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;.5&amp;#34; od&lt;/li&gt;&#xA;&lt;li&gt;13tpi pitch&lt;/li&gt;&#xA;&lt;li&gt;non-standard profile… kids needed me and I called it good enough to run a test.&lt;/li&gt;&#xA;&lt;li&gt;0.1mm offset on all surfaces&lt;/li&gt;&#xA;&lt;li&gt;external threads printed horizontally&lt;/li&gt;&#xA;&lt;li&gt;internal threads printed vertically&lt;/li&gt;&#xA;&lt;li&gt;Chamfer all lead-in/lead-out&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>3d Printed Thread Test</title>
    <id>https://waylonwalker.com/shots/3d-printed-thread-test/</id>
    <updated>2025-10-23T14:53:33Z</updated>
    <published>2025-10-23T14:53:33Z</published>
    <link href="https://waylonwalker.com/shots/3d-printed-thread-test/" rel="alternate" type="text/html"></link>
    <summary type="text">Spinning a 3d printed test block on a threaded t handle.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/21498d89-41e1-45de-9b35-e3dd059de505.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/21498d89-41e1-45de-9b35-e3dd059de505.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/21498d89-41e1-45de-9b35-e3dd059de505.mp4&#34; type=&#34;video/mp4&#34;&gt;3d printed thread test&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Spinning a 3d printed test block on a threaded t handle.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>fastapi</title>
    <id>https://waylonwalker.com/fastapi/</id>
    <updated>2025-10-22T09:26:17Z</updated>
    <published>2025-10-22T09:26:17Z</published>
    <link href="https://waylonwalker.com/fastapi/" rel="alternate" type="text/html"></link>
    <summary type="text">FastAPI is a modern and efficient web framework for Python, built on top of the Starlette web framework, and pydantic for data validation and serialization.</summary>
    <content type="html">&lt;p&gt;FastAPI is a modern and efficient web framework for Python, built on top of the&#xA;Starlette web framework, and pydantic for data validation and serialization.&lt;/p&gt;&#xA;&lt;h2 id=&#34;from-the-fastapi-documentationhttpsfastapitiangolocom&#34;&gt;From the &lt;a href=&#34;https://fastapi.tiangolo.com/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/fastapi.tiangolo.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/fastapi.tiangolo.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;FastAPI documentation&lt;/a&gt; &lt;a href=&#34;#from-the-fastapi-documentationhttpsfastapitiangolocom&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;FastAPI is a modern, fast (high-performance), web framework for building APIs with Python based on standard Python type hints.&lt;/p&gt;&#xA;&lt;p&gt;The key features are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Fast: Very high performance, on par with NodeJS and Go (thanks to Starlette and Pydantic). One of the fastest Python frameworks available.&lt;/li&gt;&#xA;&lt;li&gt;Fast to code: Increase the speed to develop features by about 200% to 300%. *&lt;/li&gt;&#xA;&lt;li&gt;Fewer bugs: Reduce about 40% of human (developer) induced errors. *&lt;/li&gt;&#xA;&lt;li&gt;Intuitive: Great editor support. Completion everywhere. Less time debugging.&lt;/li&gt;&#xA;&lt;li&gt;Easy: Designed to be easy to use and learn. Less time reading docs.&lt;/li&gt;&#xA;&lt;li&gt;Short: Minimize code duplication. Multiple features from each parameter declaration. Fewer bugs.&lt;/li&gt;&#xA;&lt;li&gt;Robust: Get production-ready code. With automatic interactive documentation.&lt;/li&gt;&#xA;&lt;li&gt;Standards-based: Based on (and fully compatible with) the open standards for APIs: OpenAPI (previously known as Swagger) and JSON Schema.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;mentioned-in-2025-stack-overflow-surveyhttpssurveystackoverflowco2025technology1-web-frameworks-and-technologies&#34;&gt;Mentioned in &lt;a href=&#34;https://survey.stackoverflow.co/2025/technology/#1-web-frameworks-and-technologies&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/survey.stackoverflow.co.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/survey.stackoverflow.co.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;2025 Stack Overflow Survey&lt;/a&gt; &lt;a href=&#34;#mentioned-in-2025-stack-overflow-surveyhttpssurveystackoverflowco2025technology1-web-frameworks-and-technologies&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The +5 point increase for FastAPI is one of the most significant shifts in the&#xA;web framework space. This signals a strong trend towards using Python for&#xA;building performant APIs and reflects the overall strength of the Python&#xA;ecosystem.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>starlette head request</title>
    <id>https://waylonwalker.com/starlette-head-request/</id>
    <updated>2025-10-22T09:11:31Z</updated>
    <published>2025-10-22T09:11:31Z</published>
    <link href="https://waylonwalker.com/starlette-head-request/" rel="alternate" type="text/html"></link>
    <summary type="text">Starlette has a head request that works right along side your get requests. This morning I fiddled around with custom routes for and , but had to manually...</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;/starlette/&#34; class=&#34;glossary-term&#34; title=&#34;Starlette is a low level web framework for modern (as of 2025) async python development most famously used by &lt;a href=&#34;/fastapi/&#34; class=&#34;glossary-term&#34; title=&#34;FastAPI is a modern and efficient web framework for Python, built on top of the Starlette web framework, and pydantic for data validation and serialization.&#34;&gt;FastAPI&lt;/a&gt;.&#34;&gt;Starlette&lt;/a&gt; has a head request that works right along side your get requests.&#xA;This morning I fiddled around with custom routes for &lt;code&gt;GET&lt;/code&gt; and &lt;code&gt;HEAD&lt;/code&gt;, but had&#xA;to manually set some things about the file, and was still missing &lt;code&gt;e-tag&lt;/code&gt; in&#xA;the end.  Turns out as a developer you can &lt;a href=&#34;/just/&#34; class=&#34;wikilink&#34; data-title=&#34;just&#34; data-description=&#34;I just never quite understood why the word can send people over the top. I get it when you don&amp;#39;t know someone, you don&amp;#39;t have history with them, and they...&#34; data-date=&#34;2025-06-23&#34; data-preview=&#34;I just never quite understood why the word can send people over the top. I get it when you don&amp;#39;t know someone, you don&amp;#39;t have history with them, and they...&#34;&gt;just&lt;/a&gt; add a &lt;code&gt;head&lt;/code&gt; route to&#xA;your &lt;code&gt;get&lt;/code&gt; routes and starlette will strip the content for you, while&#xA;preserving all of those good headers that fastapi &lt;code&gt;FileResponse&lt;/code&gt; created&#xA;automatically for you.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;fastapi&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;APIRouter&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;fastapi.response&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;FileResponse&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;fastapi&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Request&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pathlib&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;router&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;APIRouter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@router.get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/file/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{filename}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@router.head&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/file/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{filename}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filename&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;s2&#34;&gt;&amp;#34;Cache-Control&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;no-cache, no-store, must-revalidate&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pathlib&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;filename&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;data/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filename&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filename&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exists&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;raise&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HTTPException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;status_code&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;404&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;detail&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;File not found&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;FileResponse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filename&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here is an example of the response with curl.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ curl -I -L &lt;span class=&#34;s2&#34;&gt;&amp;#34;http://localhost:8100/api/file/e5523925-1565-454c-bab3-c70c4deabc83.webp?width=250&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;HTTP/1.1 &lt;span class=&#34;m&#34;&gt;200&lt;/span&gt; OK&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;date: Wed, &lt;span class=&#34;m&#34;&gt;22&lt;/span&gt; Oct &lt;span class=&#34;m&#34;&gt;2025&lt;/span&gt; 14:16:03 GMT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;server: uvicorn&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cache-control: no-cache, no-store, must-revalidate&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;content-type: image/webp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;content-length: &lt;span class=&#34;m&#34;&gt;17206&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;last-modified: Tue, &lt;span class=&#34;m&#34;&gt;23&lt;/span&gt; Sep &lt;span class=&#34;m&#34;&gt;2025&lt;/span&gt; 14:03:20 GMT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;etag: f891660c1543feb1af7564f08abdd511&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ curl -I -L &lt;span class=&#34;s2&#34;&gt;&amp;#34;http://localhost:8100/api/file/unknown-file.webp?width=250&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;HTTP/1.1 &lt;span class=&#34;m&#34;&gt;404&lt;/span&gt; Not Found&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;date: Wed, &lt;span class=&#34;m&#34;&gt;22&lt;/span&gt; Oct &lt;span class=&#34;m&#34;&gt;2025&lt;/span&gt; 14:16:11 GMT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;server: uvicorn&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;content-length: &lt;span class=&#34;m&#34;&gt;27&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;content-type: application/json&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Don&#39;t copy your gitignore to stignore</title>
    <id>https://waylonwalker.com/dont-copy-your-gitignore-to-stignore/</id>
    <updated>2025-10-21T18:43:00Z</updated>
    <published>2025-10-21T18:43:00Z</published>
    <link href="https://waylonwalker.com/dont-copy-your-gitignore-to-stignore/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I learned that while and look very similar they are not. My obsidian directory had been locked up for a few weeks and I had no idea why until I logged...</summary>
    <content type="html">&lt;p&gt;Today I learned that while &lt;code&gt;.stignore&lt;/code&gt; and &lt;code&gt;.gitignore&lt;/code&gt; look very similar they&#xA;are not.  My obsidian directory had been locked up for a few weeks and I had no&#xA;idea why until I logged into the web ui and saw errors.  The errors were some&#xA;confusing regex validator not matching.  I don’t know what the exact error was,&#xA;but I went in and only ignored the files I cared about instead of the entire&#xA;gitignore.  Primarily I was getting conflicts in my &lt;code&gt;.git&lt;/code&gt; directory.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pytauri pytauri</title>
    <id>https://waylonwalker.com/pytauri-pytauri/</id>
    <updated>2025-10-16T12:19:42Z</updated>
    <published>2025-10-16T12:19:42Z</published>
    <link href="https://waylonwalker.com/pytauri-pytauri/" rel="alternate" type="text/html"></link>
    <summary type="text">pytauri has done a fantastic job with pytauri. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/pytauri&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pytauri&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/pytauri/pytauri&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pytauri&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Tauri binding for Python through Pyo3&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ FullControlXYZ fullcontrol</title>
    <id>https://waylonwalker.com/fullcontrolxyz-fullcontrol/</id>
    <updated>2025-10-15T00:04:22Z</updated>
    <published>2025-10-15T00:04:22Z</published>
    <link href="https://waylonwalker.com/fullcontrolxyz-fullcontrol/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on fullcontrol by FullControlXYZ.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/FullControlXYZ/fullcontrol&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fullcontrol&lt;/a&gt; by &lt;a href=&#34;https://github.com/FullControlXYZ&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;FullControlXYZ&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Python version of FullControl for toolpath design (and more) - the readme below is best source of information&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ zauberzeug nicegui</title>
    <id>https://waylonwalker.com/zauberzeug-nicegui/</id>
    <updated>2025-10-12T23:12:28Z</updated>
    <published>2025-10-12T23:12:28Z</published>
    <link href="https://waylonwalker.com/zauberzeug-nicegui/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by nicegui from zauberzeug.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/zauberzeug/nicegui&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nicegui&lt;/a&gt; from &lt;a href=&#34;https://github.com/zauberzeug&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;zauberzeug&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Create web-based user interfaces with Python. The nice way.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>3d Printed Dovetails Fanned Out</title>
    <id>https://waylonwalker.com/shots/3d-printed-dovetails-fanned-out/</id>
    <updated>2025-10-12T20:39:17Z</updated>
    <published>2025-10-12T20:39:17Z</published>
    <link href="https://waylonwalker.com/shots/3d-printed-dovetails-fanned-out/" rel="alternate" type="text/html"></link>
    <summary type="text">Experimental slices of 3d printed dovetails laid out in a fan. Each have sharpie notes written on them.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/4a90cbe1-9124-4a6b-baf9-1545afe3dd00.webp&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/e23a6965-a84b-4eb0-9d84-73ddc831949f.webp&#34; alt=&#34;PXL_20251013_011946949.webp&#34;/ data-glightbox=&#34;description: PXL_20251013_011946949.webp&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Experimental slices of 3d printed dovetails laid out in a fan.  Each have sharpie notes written on them.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>3d Printing Dovetails Experiment</title>
    <id>https://waylonwalker.com/3d-printing-dovetails-experiment/</id>
    <updated>2025-10-12T20:34:35Z</updated>
    <published>2025-10-12T20:34:35Z</published>
    <link href="https://waylonwalker.com/3d-printing-dovetails-experiment/" rel="alternate" type="text/html"></link>
    <summary type="text">I hit an issue with 3d printing oversized parts that I have not hit before. I&#39;m working on some jigs for an upcoming woodworking project that will involve a...</summary>
    <content type="html">&lt;p&gt;I hit an issue with 3d printing oversized parts that I have not hit before.&#xA;I’m working on some jigs for an upcoming woodworking project that will involve&#xA;a lot of repetition.  We want to utilize some dowel joinery and jigs for&#xA;consistency.  These parts will be up to 20in  in length this is much larger&#xA;than my print bed.&lt;/p&gt;&#xA;&lt;h2 id=&#34;ive-fit-things-together-before&#34;&gt;I’ve fit things together before &lt;a href=&#34;#ive-fit-things-together-before&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here’s where I went wrong, I wasn’t really thinking through my previous&#xA;applications.  They’ve all been slip fit, primarily print in place joints that&#xA;need to move.  My go to offset for print in place on my printer is 0.2mm,&#xA;sometimes 0.1mm depending on the scale.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/30335f07-9cac-4e66-b908-f0e3cfbf7582.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/30335f07-9cac-4e66-b908-f0e3cfbf7582.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/30335f07-9cac-4e66-b908-f0e3cfbf7582.mp4&#34; type=&#34;video/mp4&#34;&gt;knife sharpener double hinge first try&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;A live hinged [[ knife-sharpener-double-hinge-first-try ]].&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/ea421e67-5cb0-4a9f-be14-08a5004df493.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/ea421e67-5cb0-4a9f-be14-08a5004df493.jpg&#34; alt=&#34;a box of caps and a macropad&#34;/ data-glightbox=&#34;description: a box of caps and a macropad&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;And in the hinges of [[ a-box-of-caps-and-a-macropad ]].&lt;/p&gt;&#xA;&lt;h2 id=&#34;experimenting-for-feel&#34;&gt;Experimenting for feel &lt;a href=&#34;#experimenting-for-feel&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Fitment like this is a lot dependent on the tolerences of your printer and the&#xA;feel you are going for.  I went to school as a mechanical engineer and theres a&#xA;lot of science behind press fit joints, that’s not happening in my house on my&#xA;desktop printer.  Most of us don’t have that kind of ability to gauge our&#xA;outputs so I’m doing like a cook in the kitchen and going for feel.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/4a90cbe1-9124-4a6b-baf9-1545afe3dd00.webp&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/e23a6965-a84b-4eb0-9d84-73ddc831949f.webp&#34; alt=&#34;PXL_20251013_011946949.webp&#34;/ data-glightbox=&#34;description: PXL_20251013_011946949.webp&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Here are all of the experiements lined up.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;fillets&#34;&gt;Fillets &lt;a href=&#34;#fillets&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I again, I feel like I should have known better.  3d printers generally have&#xA;0.4mm nozzles, common sizes you can get 0.2mm, 0.4mm, 0.6mm, and 0.8mm.  This&#xA;leaves us with the sharpest corner we can do at 0.2mm.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/5533d56c-00e4-486d-b2a0-a994bbd1f1a4.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/5533d56c-00e4-486d-b2a0-a994bbd1f1a4.webp&#34; alt=&#34;b49ea6a6-115b-44f8-99c0-d5f58f7c9940.webp&#34;/ data-glightbox=&#34;description: b49ea6a6-115b-44f8-99c0-d5f58f7c9940.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Diagram courtesy of gpt-5.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;potentially-overkill&#34;&gt;Potentially overkill &lt;a href=&#34;#potentially-overkill&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;In order to make sure that the flat edges of the dovetails are what are making&#xA;contact and not corners binding I made the inside fillet 0.6mm and the outside&#xA;0.4mm.  This 0.4mm radius (0.8mm diameter) is double my nozzle size, and will&#xA;cause the printer to follow a smooth curve rather than start and stop and&#xA;potentially overflow a bit.  This difference in fillet size will also leave a&#xA;little room for error and allow the important flat faces to mate together.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/ec3a9841-9b39-4180-96e4-613be79ee793.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/ec3a9841-9b39-4180-96e4-613be79ee793.webp&#34; alt=&#34;fillets.webp&#34;/ data-glightbox=&#34;description: fillets.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Here are the test results after filleting the edges of the dovetails to&#xA;compensate for printer errors.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition vsplit&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Fillets&lt;/p&gt;&#xA;&lt;div class=&#34;admonition vsplit&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Before Fillets&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/a289064c-960c-4f83-8b92-ec8524f51690.webp&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/3ed04466-6303-4e72-b292-0f446785c9cb.webp&#34; alt=&#34;PXL_20251013_014851451.webp&#34;/ data-glightbox=&#34;description: PXL_20251013_014851451.webp&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition vsplit&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;After Fillets&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/ea3f4651-68b7-4aac-a00d-2f11db1f11a3.webp&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/149a93d0-bce7-45df-845d-77c7a16c3218.webp&#34; alt=&#34;PXL_20251013_014909663.webp&#34;/ data-glightbox=&#34;description: PXL_20251013_014909663.webp&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;tldr-what-works-for-me&#34;&gt;TLDR What works for me &lt;a href=&#34;#tldr-what-works-for-me&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;After all of this, turns out that common sense kinda just works here, 0mm&#xA;offset works really well on my printer, and leaving room in the corners to keep&#xA;them from binding up helps a bit, but is probably unnecessary.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;0mm offset&lt;/li&gt;&#xA;&lt;li&gt;0.6mm inside fillet&lt;/li&gt;&#xA;&lt;li&gt;0.4mm outside fillet&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Handle Jig Alignment Window</title>
    <id>https://waylonwalker.com/shots/handle-jig-alignment-window/</id>
    <updated>2025-10-10T08:49:02Z</updated>
    <published>2025-10-10T08:49:02Z</published>
    <link href="https://waylonwalker.com/shots/handle-jig-alignment-window/" rel="alternate" type="text/html"></link>
    <summary type="text">Handle jig for theater boxes. The image shows the centerline lineup. This jig came out with a handle a little bit too big, going to go with a smaller one for the real boxes.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/10a83121-6c3f-4171-9c63-1bae742c88a2.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/10a83121-6c3f-4171-9c63-1bae742c88a2.jpg&#34; alt=&#34;handle jig alignment window&#34;/ data-glightbox=&#34;description: handle jig alignment window&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Handle jig for theater boxes. The image shows the centerline lineup.  This jig came out with a handle a little bit too big, going to go with a smaller one for the real boxes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Mordoria unnamed_game_1_v2</title>
    <id>https://waylonwalker.com/mordoria-unnamed_game_1_v2/</id>
    <updated>2025-10-09T12:57:37Z</updated>
    <published>2025-10-09T12:57:37Z</published>
    <link href="https://waylonwalker.com/mordoria-unnamed_game_1_v2/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? unnamed_1_v2 by Mordoria.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/Mordoria/unnamed_game_1_v2&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;unnamed_game_1_v2&lt;/a&gt; by &lt;a href=&#34;https://github.com/Mordoria&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Mordoria&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The Release of Mordoria&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>python extras are for shipping</title>
    <id>https://waylonwalker.com/python-extras-are-for-shipping/</id>
    <updated>2025-10-03T20:18:23Z</updated>
    <published>2025-10-03T20:18:23Z</published>
    <link href="https://waylonwalker.com/python-extras-are-for-shipping/" rel="alternate" type="text/html"></link>
    <summary type="text">Python has two ways of adding optional dependencies to your projects pyproject.toml file and .</summary>
    <content type="html">&lt;p&gt;Python has two ways of adding optional dependencies to your projects&#xA;pyproject.toml file &lt;code&gt;dependency-groups&lt;/code&gt; and &lt;code&gt;optional-dependencies&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;dependency-groups&#34;&gt;dependency-groups &lt;a href=&#34;#dependency-groups&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;for development&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Dependency grooups are used when working on the project, they do not ship with&#xA;the project, users cannot select to install them with the project.  These are&#xA;for things like running tests, linting, or docs.  You might want to run these&#xA;in ci, or keep your dev machines tight.  For the most part you can probably&#xA;keep these in &lt;code&gt;dev&lt;/code&gt;.  Depending on your team, fluency, and tolerance for slower&#xA;installs extra packages.  Adding too many tight groups might make it hard for&#xA;the team to remember all the groups and which one to use and end up with them&#xA;using &lt;code&gt;--all-groups&lt;/code&gt; anyways.&lt;/p&gt;&#xA;&lt;h2 id=&#34;optional-dependencies&#34;&gt;optional-dependencies &lt;a href=&#34;#optional-dependencies&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;for users&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Optional dependencies are for shipping.  These are for your users, not your&#xA;development team.  This is used for dependencies that are clearly not needed&#xA;for all or main use cases.  It is annoying to use projects that you need to add&#xA;optionals to just to use at all so use them a bit sparingly.&lt;/p&gt;&#xA;&lt;h2 id=&#34;example-&lt;a href=&#34;/fastapi/&#34; class=&#34;glossary-term&#34; title=&#34;FastAPI is a modern and efficient web framework for Python, built on top of the Starlette web framework, and pydantic for data validation and serialization.&#34;&gt;fastapi&lt;/a&gt;&#34;&gt;example fastapi &lt;a href=&#34;#example-fastapi&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/fastapi/fastapi/blob/master/pyproject.toml&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fastapi&lt;/a&gt;&#xA;provides a very simple example. &lt;code&gt;fastapi&lt;/code&gt; itself provides almost everything you&#xA;need with optional-dependencies for &lt;code&gt;standard&lt;/code&gt;,&#xA;&lt;code&gt;standard-no-fastapi-cloud-cli&lt;/code&gt;, and &lt;code&gt;all&lt;/code&gt;.  These primarily add support for&#xA;uvicorn websockets and multipart forms.&lt;/p&gt;&#xA;&lt;h2 id=&#34;example-pandas&#34;&gt;example pandas &lt;a href=&#34;#example-pandas&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/pandas-dev/pandas/blob/main/pyproject.toml&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Pandas&lt;/a&gt; is a&#xA;very good example here.  As a data processing library there are a lot of&#xA;different sources for data that you might want to use, but you probably won’t&#xA;need most of them, and often don’t need them to &lt;a href=&#34;/just/&#34; class=&#34;wikilink&#34; data-title=&#34;just&#34; data-description=&#34;I just never quite understood why the word can send people over the top. I get it when you don&amp;#39;t know someone, you don&amp;#39;t have history with them, and they...&#34; data-date=&#34;2025-06-23&#34; data-preview=&#34;I just never quite understood why the word can send people over the top. I get it when you don&amp;#39;t know someone, you don&amp;#39;t have history with them, and they...&#34;&gt;just&lt;/a&gt; get a &lt;code&gt;DataFrame&lt;/code&gt;&#xA;going.  They offer a long list of optional dependencies such as &lt;code&gt;pyarrow&lt;/code&gt;,&#xA;&lt;code&gt;aws&lt;/code&gt;, &lt;code&gt;gcp&lt;/code&gt;, &lt;code&gt;postgresql&lt;/code&gt; and many more.&lt;/p&gt;&#xA;&lt;h2 id=&#34;example-kedro-datasets&#34;&gt;example kedro-datasets &lt;a href=&#34;#example-kedro-datasets&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Very similar to pandas &lt;code&gt;kedro-datasets&lt;/code&gt; uses a similar pattern to pandas but at&#xA;a higher level.  A dataset is an abstraction of a datasource that get defined&#xA;in the catalog, and primarily provide the framework with &lt;code&gt;load&lt;/code&gt; and &lt;code&gt;save&lt;/code&gt;&#xA;methods for datasets. There are many optionals for data providers like pandas,&#xA;but also many for each dataframe abstraction like &lt;code&gt;pandas&lt;/code&gt;, &lt;code&gt;polars&lt;/code&gt;, &lt;code&gt;dask&lt;/code&gt;,&#xA;&lt;code&gt;databricks&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/kedro-org/kedro-plugins/blob/main/kedro-datasets/pyproject.toml&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-datasets&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;lets-build-a-package&#34;&gt;let’s build a package &lt;a href=&#34;#lets-build-a-package&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let’s make a package called &lt;code&gt;learn-uv&lt;/code&gt; that implements these dependency features.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir /tmp/learn-uv&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /tmp/learn-uv&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv init --package&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv add httpx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# add development dependencies&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv add --dev pytest&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv add --group dev ipython&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# add documentation dependencies to the docs group&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv add --group docs markata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# add optional dependencies&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# these are dependencies that a user could install&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# python -m pip install &amp;#39;learn-uv[data-science]&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv add --optional data-science pandas&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# add extra dependencies&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# this adds the jupyter extra from rich&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# similar to `python -m pip install &amp;#39;learn-uv[jupyter]&amp;#39;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv add --extra jupyter rich&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This will result in the following pyproject.toml.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;project&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;learn-uv&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;version&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;0.1.0&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;description&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Add your description here&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;readme&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;README.md&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;authors&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Waylon S. Walker&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;email&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hello@waylonwalker.com&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;requires-python&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;gt;=3.13&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;dependencies&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;# uv add httpx&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;httpx&amp;gt;=0.28.1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;# uv add --extra jupyter rich&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;rich[jupyter]&amp;gt;=14.1.0&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;project&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;scripts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;learn-uv&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;learn_uv:main&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;project&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;optional-dependencies&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;data-science&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;# uv add --optional data-science pandas&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;pandas&amp;gt;=2.3.3&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;build-system&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;requires&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;uv_build&amp;gt;=0.8.22,&amp;lt;0.9.0&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;build-backend&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;uv_build&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;dependency-groups&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;dev&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;# uv add --group dev ipython&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;ipython&amp;gt;=9.6.0&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;# uv add --dev pytest&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;pytest&amp;gt;=8.4.2&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;docs&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;# uv add --group docs markata&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;markata&amp;gt;=0.9.1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;using-the-project&#34;&gt;Using the project &lt;a href=&#34;#using-the-project&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let’s start off with one common point of confusion.  &lt;code&gt;uv tool run&lt;/code&gt; or its alias&#xA;&lt;code&gt;uvx&lt;/code&gt; does not install any dependencies or anything from the project.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv tool run ipython&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;✅ ipython&lt;/li&gt;&#xA;&lt;li&gt;❌ learn_uv&lt;/li&gt;&#xA;&lt;li&gt;❌ httpx&lt;/li&gt;&#xA;&lt;li&gt;❌ pytest&lt;/li&gt;&#xA;&lt;li&gt;❌ markata&lt;/li&gt;&#xA;&lt;li&gt;❌ pandas&lt;/li&gt;&#xA;&lt;li&gt;❌ rich&lt;/li&gt;&#xA;&lt;li&gt;❌ ipywidgets (from rich[jupyter])&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Using &lt;code&gt;uv run&lt;/code&gt; is project aware, installs the dependencies from the&#xA;pyproject.toml.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv run ipython&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;✅ ipython&lt;/li&gt;&#xA;&lt;li&gt;✅ learn_uv&lt;/li&gt;&#xA;&lt;li&gt;✅ httpx&lt;/li&gt;&#xA;&lt;li&gt;✅ pytest&lt;/li&gt;&#xA;&lt;li&gt;❌ markata&lt;/li&gt;&#xA;&lt;li&gt;❌ pandas&lt;/li&gt;&#xA;&lt;li&gt;✅ rich&lt;/li&gt;&#xA;&lt;li&gt;✅ ipywidgets (from rich[jupyter])&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv run --group docs markata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;✅ ipython&lt;/li&gt;&#xA;&lt;li&gt;✅ learn_uv&lt;/li&gt;&#xA;&lt;li&gt;✅ httpx&lt;/li&gt;&#xA;&lt;li&gt;✅ pytest&lt;/li&gt;&#xA;&lt;li&gt;✅ markata&lt;/li&gt;&#xA;&lt;li&gt;❌ pandas&lt;/li&gt;&#xA;&lt;li&gt;✅ rich&lt;/li&gt;&#xA;&lt;li&gt;✅ ipywidgets (from rich[jupyter])&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Installing the optional dependency extra &lt;code&gt;data-science&lt;/code&gt; gives me &lt;code&gt;pandas&lt;/code&gt; in&#xA;this project.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv run --extra data-science ipython&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;✅ ipython&lt;/li&gt;&#xA;&lt;li&gt;✅ learn_uv&lt;/li&gt;&#xA;&lt;li&gt;✅ httpx&lt;/li&gt;&#xA;&lt;li&gt;✅ pytest&lt;/li&gt;&#xA;&lt;li&gt;✅ markata&lt;/li&gt;&#xA;&lt;li&gt;✅ pandas&lt;/li&gt;&#xA;&lt;li&gt;✅ rich&lt;/li&gt;&#xA;&lt;li&gt;✅ ipywidgets (from rich[jupyter])&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;everything&#34;&gt;everything &lt;a href=&#34;#everything&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There are many combinations of include/exclude that you can use, check &lt;code&gt;uv run --help&lt;/code&gt; to see all of the options.  Here is the nuclear option to include&#xA;everything.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv run --all-groups --all-extras ipython&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;potential-uv-bug&#34;&gt;Potential &lt;code&gt;uv&lt;/code&gt; bug &lt;a href=&#34;#potential-uv-bug&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;At the time of writing once a dependency group is used it persists in the&#xA;&lt;a href=&#34;/virtual-environment/&#34; class=&#34;glossary-term&#34; title=&#34;Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...&#34;&gt;virtual environment&lt;/a&gt; for the rest of the project.  This is not the case with&#xA;&lt;code&gt;extras&lt;/code&gt; it only includes the &lt;code&gt;extras&lt;/code&gt; you ask for on each run.  The state is&#xA;clean and consistent with &lt;code&gt;extras&lt;/code&gt;, but &lt;code&gt;groups&lt;/code&gt; depend on what you have ran&#xA;before in the project.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ uv --version&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv 0.8.22 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;ade2bdbd2 2025-09-23&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;example&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# install docs group&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv sync --group docs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# docs dependencies are available&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv run markata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# sync resets the environment&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv sync&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# docs dependencies are not available&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv run markata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;error: Failed to spawn: &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;markata&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Caused by: Permission denied &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;os error 13&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Sister Splinter</title>
    <id>https://waylonwalker.com/shots/sister-splinter/</id>
    <updated>2025-10-03T18:04:34Z</updated>
    <published>2025-10-03T18:04:34Z</published>
    <link href="https://waylonwalker.com/shots/sister-splinter/" rel="alternate" type="text/html"></link>
    <summary type="text">Sister Splinter</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/e4d2843c-efeb-4965-b627-3e834db6378a.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/e4d2843c-efeb-4965-b627-3e834db6378a.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/e4d2843c-efeb-4965-b627-3e834db6378a.mp4&#34; type=&#34;video/mp4&#34;&gt;Sister Splinter&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Sister Splinter&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Cling Grip Bind</title>
    <id>https://waylonwalker.com/shots/cling-grip-bind/</id>
    <updated>2025-10-03T18:02:33Z</updated>
    <published>2025-10-03T18:02:33Z</published>
    <link href="https://waylonwalker.com/shots/cling-grip-bind/" rel="alternate" type="text/html"></link>
    <summary type="text">Cling Grip Bind</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/fa7bd8cb-7311-446f-82eb-9b31cd5b2101.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/fa7bd8cb-7311-446f-82eb-9b31cd5b2101.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/fa7bd8cb-7311-446f-82eb-9b31cd5b2101.mp4&#34; type=&#34;video/mp4&#34;&gt;Cling Grip Bind&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Cling Grip Bind&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Kraft-Coordinates</title>
    <id>https://waylonwalker.com/kraft-coordinates/</id>
    <updated>2025-10-02T16:52:02Z</updated>
    <published>2025-10-02T16:52:02Z</published>
    <link href="https://waylonwalker.com/kraft-coordinates/" rel="alternate" type="text/html"></link>
    <summary type="text">Handy reference for coordinates in the kraft world.</summary>
    <content type="html">&lt;p&gt;Handy reference for coordinates in the &lt;a href=&#34;/kraft/&#34; class=&#34;wikilink&#34; data-title=&#34;kraft&#34; data-description=&#34;Kraft is the family gaming server that we started early 2025.&#34; data-date=&#34;2025-06-01&#34; data-preview=&#34;Kraft is the family gaming server that we started early 2025.&#34;&gt;kraft&lt;/a&gt; world.&lt;/p&gt;&#xA;&lt;h2 id=&#34;home&#34;&gt;Home &lt;a href=&#34;#home&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Overworld:-208 71 -291&#xA;Nether:-26 9 -36&lt;/p&gt;&#xA;&lt;h2 id=&#34;ocean-monument&#34;&gt;Ocean Monument &lt;a href=&#34;#ocean-monument&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Overworld: 209 62 -752&#xA;Nether:26 1 -94&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ folke sidekick.nvim</title>
    <id>https://waylonwalker.com/folke-sidekick-nvim/</id>
    <updated>2025-09-29T16:14:21Z</updated>
    <published>2025-09-29T16:14:21Z</published>
    <link href="https://waylonwalker.com/folke-sidekick-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out sidekick.nvim by folke. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/folke/sidekick.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sidekick.nvim&lt;/a&gt; by &lt;a href=&#34;https://github.com/folke&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;folke&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;Your Neovim AI sidekick&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ jfernandez mdserve</title>
    <id>https://waylonwalker.com/jfernandez-mdserve/</id>
    <updated>2025-09-28T13:34:12Z</updated>
    <published>2025-09-28T13:34:12Z</published>
    <link href="https://waylonwalker.com/jfernandez-mdserve/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about mdserve, an amazing project by jfernandez. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/jfernandez/mdserve&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mdserve&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/jfernandez&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jfernandez&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Fast markdown preview server with live reload and theme support.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Wanderers Crest Bind</title>
    <id>https://waylonwalker.com/shots/wanderers-crest-bind/</id>
    <updated>2025-09-27T10:46:39Z</updated>
    <published>2025-09-27T10:46:39Z</published>
    <link href="https://waylonwalker.com/shots/wanderers-crest-bind/" rel="alternate" type="text/html"></link>
    <summary type="text">Wanderers Crest Bind</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/320d1bf2-4e55-44b7-b352-dc898a5313c7.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/320d1bf2-4e55-44b7-b352-dc898a5313c7.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/320d1bf2-4e55-44b7-b352-dc898a5313c7.mp4&#34; type=&#34;video/mp4&#34;&gt;Wanderers Crest Bind&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Wanderers Crest Bind&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Reapers Crest Gangfight</title>
    <id>https://waylonwalker.com/shots/reapers-crest-gangfight/</id>
    <updated>2025-09-27T10:45:25Z</updated>
    <published>2025-09-27T10:45:25Z</published>
    <link href="https://waylonwalker.com/shots/reapers-crest-gangfight/" rel="alternate" type="text/html"></link>
    <summary type="text">Reapers Crest Gangfight</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/7f055638-af55-4c35-81c5-5a34e7a1428b.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/7f055638-af55-4c35-81c5-5a34e7a1428b.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/7f055638-af55-4c35-81c5-5a34e7a1428b.mp4&#34; type=&#34;video/mp4&#34;&gt;Reapers Crest Gangfight&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Reapers Crest Gangfight&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Violent Flintbeetle 2</title>
    <id>https://waylonwalker.com/shots/violent-flintbeetle-2/</id>
    <updated>2025-09-27T10:38:25Z</updated>
    <published>2025-09-27T10:38:25Z</published>
    <link href="https://waylonwalker.com/shots/violent-flintbeetle-2/" rel="alternate" type="text/html"></link>
    <summary type="text">Violent Flintbeetle 2</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/861803a9-f97f-417e-b0e3-50618396ed1d.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/861803a9-f97f-417e-b0e3-50618396ed1d.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/861803a9-f97f-417e-b0e3-50618396ed1d.mp4&#34; type=&#34;video/mp4&#34;&gt;Violent Flintbeetle 2&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Violent Flintbeetle 2&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Violent Flintbeetle Granted</title>
    <id>https://waylonwalker.com/shots/violent-flintbeetle-granted/</id>
    <updated>2025-09-27T10:36:16Z</updated>
    <published>2025-09-27T10:36:16Z</published>
    <link href="https://waylonwalker.com/shots/violent-flintbeetle-granted/" rel="alternate" type="text/html"></link>
    <summary type="text">Violent Flintbeetle Granted</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/bf0a8d2f-dee8-4d46-9509-99d2ad2eb524.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/bf0a8d2f-dee8-4d46-9509-99d2ad2eb524.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/bf0a8d2f-dee8-4d46-9509-99d2ad2eb524.mp4&#34; type=&#34;video/mp4&#34;&gt;Violent Flintbeetle Granted&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Violent Flintbeetle Granted&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Violent Flintbeetle 3</title>
    <id>https://waylonwalker.com/shots/violent-flintbeetle-3/</id>
    <updated>2025-09-27T10:34:45Z</updated>
    <published>2025-09-27T10:34:45Z</published>
    <link href="https://waylonwalker.com/shots/violent-flintbeetle-3/" rel="alternate" type="text/html"></link>
    <summary type="text">Violent Flintbeetle 3</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/4dc2bfb2-b742-4c7d-a7fb-30c5b8e7b6c3.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/4dc2bfb2-b742-4c7d-a7fb-30c5b8e7b6c3.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/4dc2bfb2-b742-4c7d-a7fb-30c5b8e7b6c3.mp4&#34; type=&#34;video/mp4&#34;&gt;Violent Flintbeetle 3&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Violent Flintbeetle 3&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Violent Flintbeetle 1</title>
    <id>https://waylonwalker.com/shots/violent-flintbeetle-1/</id>
    <updated>2025-09-26T18:34:35Z</updated>
    <published>2025-09-26T18:34:35Z</published>
    <link href="https://waylonwalker.com/shots/violent-flintbeetle-1/" rel="alternate" type="text/html"></link>
    <summary type="text">Violent Flintbeetle 1</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/8b865091-3fa9-4f40-bc0d-10723a0e7e85.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/8b865091-3fa9-4f40-bc0d-10723a0e7e85.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/8b865091-3fa9-4f40-bc0d-10723a0e7e85.mp4&#34; type=&#34;video/mp4&#34;&gt;Violent Flintbeetle 1&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Violent Flintbeetle 1&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ doganarif fastapi-radar</title>
    <id>https://waylonwalker.com/doganarif-fastapi-radar/</id>
    <updated>2025-09-25T19:10:17Z</updated>
    <published>2025-09-25T19:10:17Z</published>
    <link href="https://waylonwalker.com/doganarif-fastapi-radar/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by fastapi-radar from doganarif.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/doganarif/fastapi-radar&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fastapi-radar&lt;/a&gt; from &lt;a href=&#34;https://github.com/doganarif&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;doganarif&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A powerful debugging dashboard for &lt;a href=&#34;/fastapi/&#34; class=&#34;glossary-term&#34; title=&#34;FastAPI is a modern and efficient web framework for Python, built on top of the Starlette web framework, and pydantic for data validation and serialization.&#34;&gt;FastAPI&lt;/a&gt; applications. Monitor HTTP requests, SQL queries, and exceptions in real-time with a beautiful React UI. One-line integration, zero configuration needed.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Covetous Pilgrim</title>
    <id>https://waylonwalker.com/shots/covetous-pilgrim/</id>
    <updated>2025-09-23T20:17:30Z</updated>
    <published>2025-09-23T20:17:30Z</published>
    <link href="https://waylonwalker.com/shots/covetous-pilgrim/" rel="alternate" type="text/html"></link>
    <summary type="text">Covetous Pilgrim</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/a87a67b1-f9a1-4a13-988a-5fd219d60c8f.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/a87a67b1-f9a1-4a13-988a-5fd219d60c8f.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/a87a67b1-f9a1-4a13-988a-5fd219d60c8f.mp4&#34; type=&#34;video/mp4&#34;&gt;Covetous Pilgrim&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Covetous Pilgrim&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Sherwood Gangfight</title>
    <id>https://waylonwalker.com/shots/sherwood-gangfight/</id>
    <updated>2025-09-23T20:12:09Z</updated>
    <published>2025-09-23T20:12:09Z</published>
    <link href="https://waylonwalker.com/shots/sherwood-gangfight/" rel="alternate" type="text/html"></link>
    <summary type="text">Sherwood Gangfight</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/98dd720b-c2d3-4239-a858-16f83f8d60cb.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/98dd720b-c2d3-4239-a858-16f83f8d60cb.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/98dd720b-c2d3-4239-a858-16f83f8d60cb.mp4&#34; type=&#34;video/mp4&#34;&gt;Sherwood Gangfight&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Sherwood Gangfight&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Long Pin</title>
    <id>https://waylonwalker.com/shots/long-pin/</id>
    <updated>2025-09-23T20:07:54Z</updated>
    <published>2025-09-23T20:07:54Z</published>
    <link href="https://waylonwalker.com/shots/long-pin/" rel="alternate" type="text/html"></link>
    <summary type="text">Long Pin</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/4a2e073e-2054-4485-a52b-e4a5e42b5ce7.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/4a2e073e-2054-4485-a52b-e4a5e42b5ce7.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/4a2e073e-2054-4485-a52b-e4a5e42b5ce7.mp4&#34; type=&#34;video/mp4&#34;&gt;Long Pin&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Long Pin&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Halfway Home Gang Fight</title>
    <id>https://waylonwalker.com/shots/halfway-home-gang-fight/</id>
    <updated>2025-09-21T17:20:48Z</updated>
    <published>2025-09-21T17:20:48Z</published>
    <link href="https://waylonwalker.com/shots/halfway-home-gang-fight/" rel="alternate" type="text/html"></link>
    <summary type="text">Halfway Home Gang Fight</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/d8616fc1-d271-4819-ac32-49980218221d.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/d8616fc1-d271-4819-ac32-49980218221d.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/d8616fc1-d271-4819-ac32-49980218221d.mp4&#34; type=&#34;video/mp4&#34;&gt;Halfway Home Gang Fight&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Halfway Home Gang Fight&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Rosary String</title>
    <id>https://waylonwalker.com/shots/rosary-string/</id>
    <updated>2025-09-21T17:17:31Z</updated>
    <published>2025-09-21T17:17:31Z</published>
    <link href="https://waylonwalker.com/shots/rosary-string/" rel="alternate" type="text/html"></link>
    <summary type="text">Rosary String</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/5e4ac436-79b1-43ea-b76a-af9d505cded1.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/5e4ac436-79b1-43ea-b76a-af9d505cded1.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/5e4ac436-79b1-43ea-b76a-af9d505cded1.mp4&#34; type=&#34;video/mp4&#34;&gt;Rosary String&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Rosary String&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Threefold Pin</title>
    <id>https://waylonwalker.com/shots/threefold-pin/</id>
    <updated>2025-09-21T17:15:39Z</updated>
    <published>2025-09-21T17:15:39Z</published>
    <link href="https://waylonwalker.com/shots/threefold-pin/" rel="alternate" type="text/html"></link>
    <summary type="text">Threefold Pin</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/872d4fa9-c691-463e-bff5-bf4d53bc626a.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/872d4fa9-c691-463e-bff5-bf4d53bc626a.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/872d4fa9-c691-463e-bff5-bf4d53bc626a.mp4&#34; type=&#34;video/mp4&#34;&gt;Threefold Pin&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Threefold Pin&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Thread Storm</title>
    <id>https://waylonwalker.com/shots/thread-storm/</id>
    <updated>2025-09-21T17:14:04Z</updated>
    <published>2025-09-21T17:14:04Z</published>
    <link href="https://waylonwalker.com/shots/thread-storm/" rel="alternate" type="text/html"></link>
    <summary type="text">Thread Storm</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/59e4f22e-e59f-46e6-80ba-ff8a626e93ba.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/59e4f22e-e59f-46e6-80ba-ff8a626e93ba.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/59e4f22e-e59f-46e6-80ba-ff8a626e93ba.mp4&#34; type=&#34;video/mp4&#34;&gt;Thread Storm&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Thread Storm&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Funk Track 1</title>
    <id>https://waylonwalker.com/shots/funk-track-1/</id>
    <updated>2025-09-21T15:52:07Z</updated>
    <published>2025-09-21T15:52:07Z</published>
    <link href="https://waylonwalker.com/shots/funk-track-1/" rel="alternate" type="text/html"></link>
    <summary type="text">Progress so far on the Funk server elytra track. It goes through two sea lanturn lit caves so far.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/ab41d5f8-92a5-4fde-966b-f791ff84f776.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/ab41d5f8-92a5-4fde-966b-f791ff84f776.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/ab41d5f8-92a5-4fde-966b-f791ff84f776.mp4&#34; type=&#34;video/mp4&#34;&gt;funk-track-1-1080p.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Progress so far on the Funk server elytra track.  It goes through two sea lanturn lit caves so far.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Shots Get An Upgrade To the Main Feed</title>
    <id>https://waylonwalker.com/shots-get-an-upgrade/</id>
    <updated>2025-09-20T20:19:57Z</updated>
    <published>2025-09-20T20:19:57Z</published>
    <link href="https://waylonwalker.com/shots-get-an-upgrade/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I updated my jinja templates and feeds to include shots posts in the main feed. These posts will prominently show the image in the feed with a small...</summary>
    <content type="html">&lt;p&gt;Today I updated my jinja templates and feeds to include shots posts in the main&#xA;feed.  These posts will prominently show the image in the feed with a small&#xA;post for each one.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/37dea007-e66f-42a5-bd90-6722dd1084dd.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/37dea007-e66f-42a5-bd90-6722dd1084dd.png&#34; alt=&#34;screenshot-2025-09-21T01-19-39-934Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-09-21T01-19-39-934Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/shots/&#34;&gt;Shots&lt;/a&gt; are instagram style imge posts&#xA;inspired by &lt;a href=&#34;https://justin.searls.co/shots/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/justin.searls.co.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/justin.searls.co.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://justin.searls.co/shots/&lt;/a&gt;.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>A Full Cheese Board</title>
    <id>https://waylonwalker.com/shots/a-full-cheese-board/</id>
    <updated>2025-09-20T20:02:58Z</updated>
    <published>2025-09-20T20:02:58Z</published>
    <link href="https://waylonwalker.com/shots/a-full-cheese-board/" rel="alternate" type="text/html"></link>
    <summary type="text">A macropad filled with cheese keycaps placed in random orientations.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/9155b4f8-0028-45e5-a83f-52918174772c.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/9155b4f8-0028-45e5-a83f-52918174772c.jpg&#34; alt=&#34;A full Cheese Board&#34;/ data-glightbox=&#34;description: A full Cheese Board&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A macropad filled with cheese keycaps placed in random orientations.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Full Box Of Cheese Caps</title>
    <id>https://waylonwalker.com/shots/full-box-of-cheese-caps/</id>
    <updated>2025-09-20T20:00:00Z</updated>
    <published>2025-09-20T20:00:00Z</published>
    <link href="https://waylonwalker.com/shots/full-box-of-cheese-caps/" rel="alternate" type="text/html"></link>
    <summary type="text">A full box of 9 keycaps sit behind a cap placed in front, they are custom wedge of cheese caps.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/176f26ea-8ed7-46b6-9762-e18a68938caf.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/176f26ea-8ed7-46b6-9762-e18a68938caf.jpg&#34; alt=&#34;full box of cheese caps&#34;/ data-glightbox=&#34;description: full box of cheese caps&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A full box of 9 keycaps sit behind a cap placed in front, they are custom wedge of cheese caps.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Printing A Full Plate Of Cheese Hats</title>
    <id>https://waylonwalker.com/shots/printing-a-full-plate-of-cheese-hats/</id>
    <updated>2025-09-20T19:58:16Z</updated>
    <published>2025-09-20T19:58:16Z</published>
    <link href="https://waylonwalker.com/shots/printing-a-full-plate-of-cheese-hats/" rel="alternate" type="text/html"></link>
    <summary type="text">A Bambu Lab Printer is working on the first few layers of cheese hats to be placed on top of keycaps.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/69ce1210-bbff-474f-9507-787d9043dc36.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/69ce1210-bbff-474f-9507-787d9043dc36.jpg&#34; alt=&#34;printing a full plate of cheese hats&#34;/ data-glightbox=&#34;description: printing a full plate of cheese hats&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A Bambu Lab Printer is working on the first few layers of cheese hats to be placed on top of keycaps.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Cheese Cap On A Macropad</title>
    <id>https://waylonwalker.com/shots/cheese-cap-on-a-macropad/</id>
    <updated>2025-09-20T19:57:12Z</updated>
    <published>2025-09-20T19:57:12Z</published>
    <link href="https://waylonwalker.com/shots/cheese-cap-on-a-macropad/" rel="alternate" type="text/html"></link>
    <summary type="text">A cheese keycap placed in the middle of a macropad, currounded by black/purple caps in a blue case.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/4b2c0fb1-3216-4c5c-a659-fbaf9ef189ae.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/4b2c0fb1-3216-4c5c-a659-fbaf9ef189ae.jpg&#34; alt=&#34;Cheese cap on a macropad&#34;/ data-glightbox=&#34;description: Cheese cap on a macropad&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A cheese keycap placed in the middle of a macropad, currounded by black/purple caps in a blue case.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>A Box Of Caps And A Macropad</title>
    <id>https://waylonwalker.com/shots/a-box-of-caps-and-a-macropad/</id>
    <updated>2025-09-19T19:55:50Z</updated>
    <published>2025-09-19T19:55:50Z</published>
    <link href="https://waylonwalker.com/shots/a-box-of-caps-and-a-macropad/" rel="alternate" type="text/html"></link>
    <summary type="text">A macropad with a pixel heart and mlg glasses sit on a clean white background.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/ea421e67-5cb0-4a9f-be14-08a5004df493.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/ea421e67-5cb0-4a9f-be14-08a5004df493.jpg&#34; alt=&#34;a box of caps and a macropad&#34;/ data-glightbox=&#34;description: a box of caps and a macropad&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A macropad with a pixel heart and mlg glasses sit on a clean white background.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Heart Of A Macropad</title>
    <id>https://waylonwalker.com/shots/heart-of-a-macropad/</id>
    <updated>2025-09-19T19:54:33Z</updated>
    <published>2025-09-19T19:54:33Z</published>
    <link href="https://waylonwalker.com/shots/heart-of-a-macropad/" rel="alternate" type="text/html"></link>
    <summary type="text">A pixel heart kecap in the center of a macropad, the macropad is admittedly dirty, filled with small bits of fuzz.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/c924cd8b-7bfc-411f-af71-4b7c0f2005bc.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/c924cd8b-7bfc-411f-af71-4b7c0f2005bc.jpg&#34; alt=&#34;heart of a macropad&#34;/ data-glightbox=&#34;description: heart of a macropad&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A pixel heart kecap in the center of a macropad, the macropad is admittedly dirty, filled with small bits of fuzz.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>First Cap Hat, It&#39;s A Heart</title>
    <id>https://waylonwalker.com/shots/first-cap-hat,-it&#39;s-a-heart/</id>
    <updated>2025-09-19T19:52:54Z</updated>
    <published>2025-09-19T19:52:54Z</published>
    <link href="https://waylonwalker.com/shots/first-cap-hat,-it&#39;s-a-heart/" rel="alternate" type="text/html"></link>
    <summary type="text">A 3d printed keycap with a heart glued to the top of it. The heart resembles a pixelated game asset.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/485cb6ed-520b-46f0-98a0-fed231a8626d.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/485cb6ed-520b-46f0-98a0-fed231a8626d.jpg&#34; alt=&#34;First Cap Hat, It’s a heart&#34;/ data-glightbox=&#34;description: First Cap Hat, It’s a heart&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A 3d printed keycap with a heart glued to the top of it.  The heart resembles a pixelated game asset.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ unhappychoice gittype</title>
    <id>https://waylonwalker.com/unhappychoice-gittype/</id>
    <updated>2025-09-18T23:32:00Z</updated>
    <published>2025-09-18T23:32:00Z</published>
    <link href="https://waylonwalker.com/unhappychoice-gittype/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on gittype, created by unhappychoice.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/unhappychoice/gittype&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gittype&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/unhappychoice&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;unhappychoice&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A CLI code-typing game that turns your source code into typing challenges&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>First Box Of Caps</title>
    <id>https://waylonwalker.com/shots/first-box-of-caps/</id>
    <updated>2025-09-18T19:51:18Z</updated>
    <published>2025-09-18T19:51:18Z</published>
    <link href="https://waylonwalker.com/shots/first-box-of-caps/" rel="alternate" type="text/html"></link>
    <summary type="text">A print in place box sitting on the printer bed used as a raft for the 9 caps perectly nestled inside in a 3 by 3 pattern.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/203f0838-be6d-43d6-b88f-430c940cb642.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/203f0838-be6d-43d6-b88f-430c940cb642.jpg&#34; alt=&#34;first box of caps&#34;/ data-glightbox=&#34;description: first box of caps&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A print in place box sitting on the printer bed used as a raft for the 9 caps perectly nestled inside in a 3 by 3 pattern.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Fourth Chorus</title>
    <id>https://waylonwalker.com/shots/fourth-chorus/</id>
    <updated>2025-09-17T20:34:16Z</updated>
    <published>2025-09-17T20:34:16Z</published>
    <link href="https://waylonwalker.com/shots/fourth-chorus/" rel="alternate" type="text/html"></link>
    <summary type="text">Fourth Chorus</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/528a899c-9eb1-4237-a5de-0ddaa2190b94.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/528a899c-9eb1-4237-a5de-0ddaa2190b94.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/528a899c-9eb1-4237-a5de-0ddaa2190b94.mp4&#34; type=&#34;video/mp4&#34;&gt;Fourth Chorus&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Fourth Chorus&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>zmk two hand hold down</title>
    <id>https://waylonwalker.com/zmk-two-hand-hold-down/</id>
    <updated>2025-09-17T20:04:36Z</updated>
    <published>2025-09-17T20:04:36Z</published>
    <link href="https://waylonwalker.com/zmk-two-hand-hold-down/" rel="alternate" type="text/html"></link>
    <summary type="text">I don&#39;t know about you, but I don&#39;t re-flash my keyboard enough to ever remember where I put the bootloader. Sometimes its the last thing I think about in a...</summary>
    <content type="html">&lt;p&gt;I don’t know about you, but I don’t re-flash my keyboard enough to ever remember&#xA;where I put the bootloader.  Sometimes its  the last thing I think about in a&#xA;refactor and I end up cornering myself into a place where I cant get into that&#xA;layer anymore.  I’ve started putting hardware switches on my newer builds, but&#xA;some older builds don’t have a hardware one, so it requires disassembly and&#xA;jumping the microcontroller.  Even when I have one though, I gotta flip my&#xA;board over and its annoying sometimes, so I prefer to have a keystroke for it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;two-hand-hold-down&#34;&gt;Two Hand hold down &lt;a href=&#34;#two-hand-hold-down&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;What I’ve landed on recently is the idea of a two hand hold down combo for the&#xA;bootloader.  These combos are ones that there is no way I can hit without&#xA;picking my hands up from their normal homerow position and pressing four keys&#xA;simultaneously with pointer and thumbs.&lt;/p&gt;&#xA;&lt;p&gt;Here are some example layouts from &lt;a href=&#34;https://nickcoutsos.github.io/keymap-editor/&#34;&gt;keymap-editor&lt;/a&gt;&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/fd4d31aa-b151-4bce-b411-8e4480898b83.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/fd4d31aa-b151-4bce-b411-8e4480898b83.png&#34; alt=&#34;screenshot-2025-09-17T01-06-16-427Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-09-17T01-06-16-427Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;40% layout - similar to corne&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/74626408-cb1e-43bd-8c4c-7fb2abb16ea2.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/74626408-cb1e-43bd-8c4c-7fb2abb16ea2.png&#34; alt=&#34;screenshot-2025-09-17T01-05-02-298Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-09-17T01-05-02-298Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Here it is on my Son’s 3x5 macropad&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/8afdd2cd-c362-40cb-b9ef-9cd70ba4b0cb.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/8afdd2cd-c362-40cb-b9ef-9cd70ba4b0cb.png&#34; alt=&#34;screenshot-2025-09-17T01-05-30-687Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-09-17T01-05-30-687Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Here it is on my 3x3 macropad&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;timing&#34;&gt;Timing &lt;a href=&#34;#timing&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can even give it a long prior timeout to really make sure that its not an&#xA;accidental hit.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/4a0c7dc0-f096-4be2-9b4d-e89cb787179a.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/4a0c7dc0-f096-4be2-9b4d-e89cb787179a.png&#34; alt=&#34;screenshot-2025-09-17T01-10-22-100Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-09-17T01-10-22-100Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Lace</title>
    <id>https://waylonwalker.com/shots/lace/</id>
    <updated>2025-09-17T08:46:06Z</updated>
    <published>2025-09-17T08:46:06Z</published>
    <link href="https://waylonwalker.com/shots/lace/" rel="alternate" type="text/html"></link>
    <summary type="text">Lace</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/bb9fa98a-da2b-4dfe-95a8-3ad9a88650ef.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/bb9fa98a-da2b-4dfe-95a8-3ad9a88650ef.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/bb9fa98a-da2b-4dfe-95a8-3ad9a88650ef.mp4&#34; type=&#34;video/mp4&#34;&gt;Lace&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Lace&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Beginning Of Little Boxes</title>
    <id>https://waylonwalker.com/shots/beginning-of-little-boxes/</id>
    <updated>2025-09-16T21:04:44Z</updated>
    <published>2025-09-16T21:04:44Z</published>
    <link href="https://waylonwalker.com/shots/beginning-of-little-boxes/" rel="alternate" type="text/html"></link>
    <summary type="text">Four little 3d printed boxes laying on a white background, one contains a painted lid that says M 2x5.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/ce5b4e0b-9164-4588-b0df-176e33fa2824.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/ce5b4e0b-9164-4588-b0df-176e33fa2824.jpg&#34; alt=&#34;beginning of little boxes&#34;/ data-glightbox=&#34;description: beginning of little boxes&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Four little 3d printed boxes laying on a white background, one contains a painted lid that says M 2x5.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Why Make a Website in 2025</title>
    <id>https://waylonwalker.com/why-make-a-website-in-2025/</id>
    <updated>2025-09-16T19:37:23Z</updated>
    <published>2025-09-16T19:37:23Z</published>
    <link href="https://waylonwalker.com/why-make-a-website-in-2025/" rel="alternate" type="text/html"></link>
    <summary type="text">Inspired by Jim and Dave</summary>
    <content type="html">&lt;p&gt;Inspired by&#xA;&lt;a href=&#34;https://blog.jim-nielsen.com/2025/why-make-a-website-in-2025/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/blog.jim-nielsen.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/blog.jim-nielsen.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Jim&lt;/a&gt; and&#xA;&lt;a href=&#34;https://daverupert.com/2025/09/why-would-anybody-start-a-website/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/daverupert.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/daverupert.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Dave&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;its-fun&#34;&gt;It’s Fun &lt;a href=&#34;#its-fun&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If it’s not something that you enjoy, you might as well move on there are far&#xA;better ways to spend your time in 2025.  Only the weirdos read this shit&#xA;anymore, the masses have long moved on to curated social media feeds, and on to&#xA;chatting with llms.  I enjoy spending some time in the digital garden every&#xA;once in awhile tweaking templates, creating &lt;a href=&#34;/markata/&#34; class=&#34;wikilink&#34; data-title=&#34;markata&#34; data-description=&#34;This post is a work in progress.&#34; data-date=&#34;2024-05-30&#34; data-preview=&#34;This post is a work in progress.&#34;&gt;markata&lt;/a&gt; plugins to do&#xA;interesting things.  I enjoy expressing my thoughts, or at least shouting them&#xA;into the ether.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I’ll be the first to admit that I often go to an llm for first pass at many&#xA;things that I could look up in a guide or 😲 the docs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;i-enjoy-reading-others&#34;&gt;I enjoy reading others &lt;a href=&#34;#i-enjoy-reading-others&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This year I have made extra effort to add more and more people into my&#xA;&lt;a href=&#34;/reader/&#34; class=&#34;wikilink&#34; data-title=&#34;Reader&#34; data-description=&#34;Latest posts from blogs I follow&#34; data-preview=&#34;Latest posts from blogs I follow&#34;&gt;Reader&lt;/a&gt;.  I enjoy reading content from people I chose to follow and can&#xA;remove whenever I want.  I enjoy reading actual human thoughts and not ai&#xA;generated content all day.&lt;/p&gt;&#xA;&lt;p&gt;I even will create &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;Thoughts&lt;/a&gt; based on these posts that I find interesting,&#xA;and want to further share to others.  I want to give these people that took&#xA;time to make something a little boost.&lt;/p&gt;&#xA;&lt;h2 id=&#34;not-perfection&#34;&gt;Not Perfection &lt;a href=&#34;#not-perfection&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The last thing we need in 2025 is perfection.  We have enough ai generated slop&#xA;that is far from perfectly accurate that sits behind a veil of mostly clean&#xA;look, semi consistent feel, and a narrow set of tone.  I see it in gen z there&#xA;is something about the imperfect that is coming out.  Not perfectly cut video&#xA;or audio.  I just heard Gary Vee mention this morning that a siren going off in&#xA;the background of NYC has a somewhat natural human feel to it now.&lt;/p&gt;&#xA;&lt;h2 id=&#34;ownership&#34;&gt;Ownership &lt;a href=&#34;#ownership&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://daverupert.com/2025/09/why-would-anybody-start-a-website/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/daverupert.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/daverupert.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Dave&lt;/a&gt;&#xA;points out that the first thought for most people trying to make a business or&#xA;pop off as an influencer is TikTok, then a few similar apps.  If you are trying&#xA;to reach a large audience and swim in the big pond with the big fish thats&#xA;where you need to go.&lt;/p&gt;&#xA;&lt;p&gt;But you don’t own that content anymore.  Some posts will pop, some will be lost&#xA;to the algorithm for nothing more that the first few eyes that got it swiped&#xA;past too fast.  The whole platform can go, or choose to not show your content,&#xA;its their platform.  You don’t pay them for anything.  They are allowed to do&#xA;what they want.&lt;/p&gt;&#xA;&lt;p&gt;If you want some ownership to keep your content alive, curate a small, focused,&#xA;core audience, also put that on a website.&lt;/p&gt;&#xA;&lt;h2 id=&#34;not-for-the-faint-of-heart&#34;&gt;Not for the faint of heart &lt;a href=&#34;#not-for-the-faint-of-heart&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It’s not easy to manage hundreds of posts, images, builds, servers.  Theres&#xA;probably a hundred ways to make it easier, but if you really want full control,&#xA;full DIY, it takes time to do.&lt;/p&gt;&#xA;&lt;h2 id=&#34;learn-a-skill&#34;&gt;Learn a skill &lt;a href=&#34;#learn-a-skill&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This can go a few different ways, One is that you can make a blog or site about&#xA;a topic, deep dive into this topic.  Create blogs, videos, images, about this&#xA;topic.  Create real content that real people find interesting.&lt;/p&gt;&#xA;&lt;p&gt;OR a bit meta, you can learn more about tech.  This site is built with &lt;a href=&#34;/markata/&#34; class=&#34;wikilink&#34; data-title=&#34;markata&#34; data-description=&#34;This post is a work in progress.&#34; data-date=&#34;2024-05-30&#34; data-preview=&#34;This post is a work in progress.&#34;&gt;markata&lt;/a&gt;, its a static site generator that I built myself mostly to make this&#xA;site.  I’ve learned a ton about markdown, &lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;html&lt;/a&gt;, ast, python, plugin&#xA;architecture in doing so.  I build this site in kubernetes, another skill that&#xA;I wanted to develop, and owning my own services that I have real skin in the&#xA;game for is a great way to do so.&lt;/p&gt;&#xA;&lt;h2 id=&#34;just-build-websites&#34;&gt;Just Build Websites &lt;a href=&#34;#just-build-websites&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As the opening to &lt;a href=&#34;https://shoptalkshow.com/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/shoptalkshow.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/shoptalkshow.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;shoptalkshow&lt;/a&gt; says, just make&#xA;websites.  Who the fuck cares why or how.  The important thing is that you&#xA;built something, maybe it is for an audience of one or one million, doesn’t&#xA;matter, keep the internet alive and just build something.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>vanilla html hover text</title>
    <id>https://waylonwalker.com/vanilla-html-hover-text/</id>
    <updated>2025-09-16T11:39:41Z</updated>
    <published>2025-09-16T11:39:41Z</published>
    <link href="https://waylonwalker.com/vanilla-html-hover-text/" rel="alternate" type="text/html"></link>
    <summary type="text">I needed to display some hover text in a web app that I am using tailwind and jinja on. It has no js, and no build other than the tailwind. I want this to...</summary>
    <content type="html">&lt;p&gt;I needed to display some hover text in a web app that I am using tailwind and&#xA;jinja on.  It has no js, and no build other than the tailwind. I want this to&#xA;remain &lt;span style=&#34;cursor: help; color:yellow;&#34; title=&#34;respective to the&#xA;python developer I am and the team it is used for&#34;&gt;simple&lt;/span&gt;. Turns out&#xA;that you can use a span with a title attribute to get hover text in&#xA;&lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;HTML&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;I needed to display some hover text in a web app that I am using tailwind and&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;jinja on.  It has no js, and no build other than the tailwind. I want this to&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;remain &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;span&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;cursor: help; color:yellow;&amp;#39;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;respective to the&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;python developer I am and the team it is used for&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;simple&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tar over ssh</title>
    <id>https://waylonwalker.com/tar-over-ssh/</id>
    <updated>2025-09-13T10:50:42Z</updated>
    <published>2025-09-13T10:50:42Z</published>
    <link href="https://waylonwalker.com/tar-over-ssh/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I learned how to use tar over ssh to save hours in file transfers. I keep all of my projects in ~/git (very creative I know, I&#39;ve done it for years and...</summary>
    <content type="html">&lt;p&gt;Today I learned how to use tar over ssh to save hours in file transfers.  I&#xA;keep all of my projects in ~/&lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; (very creative I know, I’ve done it for years&#xA;and haven’t changed).  I just swapped out my main desktop from bazzite to&#xA;hyprland, and wanted to get all of my projects back.  Before killing my&#xA;bazzite install I moved everything over (16GB of many small files), it took&#xA;over 14 hours, maybe longer.  I had started in the morning and just let it&#xA;churn.&lt;/p&gt;&#xA;&lt;p&gt;This was not going to happen for re-seeding all of my projects on my new&#xA;system, I knew there had to be a better way, I looked at rsync, but for seeding&#xA;I ran into this tar over ssh technique and it only took me 6m51s to pull all of&#xA;my projects off of my remote server.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh user@192.168.1.100 &lt;span class=&#34;s1&#34;&gt;&amp;#39;tar -C /tank/git -cpf - .&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tar -C &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/git&amp;#34;&lt;/span&gt; -xpf -&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ mmulet term.everything</title>
    <id>https://waylonwalker.com/mmulet-term-everything/</id>
    <updated>2025-09-11T13:16:21Z</updated>
    <published>2025-09-11T13:16:21Z</published>
    <link href="https://waylonwalker.com/mmulet-term-everything/" rel="alternate" type="text/html"></link>
    <summary type="text">mmulet has done a fantastic job with term.everything. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/mmulet&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mmulet&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/mmulet/term.everything&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;term.everything&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Run any GUI app in the terminal❗&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>store</title>
    <id>https://waylonwalker.com/store/</id>
    <updated>2025-09-10T20:38:00Z</updated>
    <published>2025-09-10T20:38:00Z</published>
    <link href="https://waylonwalker.com/store/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been 3d printing for years, and create a lot of my own designs. Many of them are hyper specific to me, but for the ones that I think others might find...</summary>
    <content type="html">&lt;p&gt;I’ve been 3d printing for years, and create a lot of my own designs.  Many of&#xA;them are hyper specific to me, but for the ones that I think others might find&#xA;useful I will be putting up here for sale, you can buy prints that will show up&#xA;to your door in a few days.  I’m leaning on the slant3d print farm so this&#xA;depends on your proximity to them.  The prints are typically black petg, if you&#xA;would like a different color reach out to me and I will see what other options&#xA;we have, or for an additional fee I can print it myself and ship out&#xA;special colors.&lt;/p&gt;&#xA;&lt;p&gt;These are all designs that I made and actually use myself, they bring me joy&#xA;knowing that I made just the thing that I wanted to exist and if you buy&#xA;something I hope that it brings you this joy as well.&lt;/p&gt;&#xA;&lt;h2 id=&#34;skateboard-wall-mount&#34;&gt;Skateboard Wall Mount &lt;a href=&#34;#skateboard-wall-mount&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’ve used these skateboard wall mounts for years, I have 5 in my office&#xA;featuring new decks in the queue, and probably 10 in the garage to display used&#xA;decks, and fully assembled boards for me and my kids.  I use these for both&#xA;regular popscicle boards and longboards, but if you are putting up a thicker&#xA;longboard go with the thicker size.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://teleportpod.com/portal/a47fd522-d265-43b9-a8b0-8fa2395f7c46?item=588&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/f2654443-fd69-48a8-a151-0199d053b5a6.jpg&#34; alt=&#34;PXL_20250911_012148865.jpg&#34;/ data-glightbox=&#34;description: PXL_20250911_012148865.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://teleportpod.com/portal/a47fd522-d265-43b9-a8b0-8fa2395f7c46?item=588&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/teleportpod.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/teleportpod.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;regular size&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://teleportpod.com/portal/c6a85018-4ed3-4a34-98f3-cfb660d64bf5?item=589&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/teleportpod.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/teleportpod.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;over size&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;mic-stand-clips&#34;&gt;Mic stand Clips &lt;a href=&#34;#mic-stand-clips&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;These clips will hold your cables on your mic stand nicely and look nice while&#xA;doing it.  I’ve got them on both of my mic stands, there are two versions, one&#xA;for a smaller stand with usb cable, and one for a larger stand with an xlr&#xA;cable make sure you measure your mic stand before buying.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/5d6967bf-63cd-40d8-9d71-03eb90cc3fdd.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/5d6967bf-63cd-40d8-9d71-03eb90cc3fdd.jpg&#34; alt=&#34;13mm-xlr-cropped.jpg&#34;/ data-glightbox=&#34;description: 13mm-xlr-cropped.jpg&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://teleportpod.com/portal/0bf5a12c-47f3-4472-a3f7-70206546c3ec?item=618&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/teleportpod.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/teleportpod.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;13mm stand | 6mm xlr cable&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/95717ce4-600a-4fd0-877a-8e926414e815.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/95717ce4-600a-4fd0-877a-8e926414e815.jpg&#34; alt=&#34;10-mm-usb.jpg&#34;/ data-glightbox=&#34;description: 10-mm-usb.jpg&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://teleportpod.com/portal/8ebe3274-6445-44e9-b68e-0b4897e23e4a?item=619&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/teleportpod.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/teleportpod.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;10mm stand | 4mm usb &lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;cat-door&#34;&gt;Cat Door &lt;a href=&#34;#cat-door&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;In our house we have a cat liter box in the basement, so we need to leave the&#xA;door open for our cat.  But if our dog goes down there he seems to only cause&#xA;trouble.  So I modeled this door prop to leave the door just enough open for&#xA;the cat, but keep the dog out.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/01a33e73-7bdc-4bfe-842e-d83d77c856d2.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/01a33e73-7bdc-4bfe-842e-d83d77c856d2.jpg&#34; alt=&#34;PXL_20250913_232149104.jpg&#34;/ data-glightbox=&#34;description: PXL_20250913_232149104.jpg&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://teleportpod.com/portal/f4500ce2-6f32-4773-a82a-e049a91b7da1?item=732&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/teleportpod.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/teleportpod.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cat door&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;kicker-ramp&#34;&gt;Kicker Ramp &lt;a href=&#34;#kicker-ramp&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://teleportpod.com/portal/0d6283fc-889e-4445-b0fd-29e40cf82fca?item=521&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/teleportpod.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/teleportpod.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kicker ramp&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://teleportpod.com/portal/671a9184-b0ed-419c-9be3-8f3cb52657e3?item=520&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/teleportpod.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/teleportpod.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;manny pad&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Skull Ant</title>
    <id>https://waylonwalker.com/shots/skull-ant/</id>
    <updated>2025-09-08T08:30:50Z</updated>
    <published>2025-09-08T08:30:50Z</published>
    <link href="https://waylonwalker.com/shots/skull-ant/" rel="alternate" type="text/html"></link>
    <summary type="text">Skull Ant</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/cb9dbf04-b1f6-4105-879d-86776cf11474.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/cb9dbf04-b1f6-4105-879d-86776cf11474.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/cb9dbf04-b1f6-4105-879d-86776cf11474.mp4&#34; type=&#34;video/mp4&#34;&gt;Skull Ant&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Skull Ant&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>uv script management</title>
    <id>https://waylonwalker.com/uv-script-management/</id>
    <updated>2025-09-07T20:22:56Z</updated>
    <published>2025-09-07T20:22:56Z</published>
    <link href="https://waylonwalker.com/uv-script-management/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been leaning on lazy-self-installing-python-scripts more and more, but I did not realize how much tooling that uv gives you to help manage your scripts.</summary>
    <content type="html">&lt;p&gt;I’ve been leaning on&#xA;&lt;a href=&#34;https://treyhunner.com/2024/12/lazy-self-installing-python-scripts-with-uv/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/treyhunner.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/treyhunner.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lazy-self-installing-python-scripts&lt;/a&gt;&#xA;more and more, but I did not realize how much tooling that&#xA;&lt;a href=&#34;https://docs.astral.sh/uv/getting-started/installation/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/docs.astral.sh.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/docs.astral.sh.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;uv&lt;/a&gt;&#xA;gives you to help manage your scripts.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv init --script up&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv add --script up typer rich&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv remove --script up rich&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sed -i &lt;span class=&#34;s1&#34;&gt;&amp;#39;1i #!/usr/bin/env -S uv run --script&amp;#39;&lt;/span&gt; up&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod +x up&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./up&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The result is a script that looks like this, its executable as what looks like&#xA;regular command in your shell.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;ch&#34;&gt;#!/usr/bin/env -S uv run --script&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# /// script&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# requires-python = &amp;#34;&amp;gt;=3.13&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# dependencies = [&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#34;typer&amp;#34;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ///&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Hello from up!&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;vm&#34;&gt;__name__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Silkspeer</title>
    <id>https://waylonwalker.com/shots/silkspeer/</id>
    <updated>2025-09-05T17:39:38Z</updated>
    <published>2025-09-05T17:39:38Z</published>
    <link href="https://waylonwalker.com/shots/silkspeer/" rel="alternate" type="text/html"></link>
    <summary type="text">Silkspeer</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/34154168-6fcc-4680-b830-514731613e29.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/34154168-6fcc-4680-b830-514731613e29.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/34154168-6fcc-4680-b830-514731613e29.mp4&#34; type=&#34;video/mp4&#34;&gt;Silkspeer&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Silkspeer&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Berry Picking</title>
    <id>https://waylonwalker.com/shots/berry-picking/</id>
    <updated>2025-09-05T17:38:26Z</updated>
    <published>2025-09-05T17:38:26Z</published>
    <link href="https://waylonwalker.com/shots/berry-picking/" rel="alternate" type="text/html"></link>
    <summary type="text">Berry Picking</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/1568f7ee-a9fd-4176-b4ea-7e3316474184.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/1568f7ee-a9fd-4176-b4ea-7e3316474184.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/1568f7ee-a9fd-4176-b4ea-7e3316474184.mp4&#34; type=&#34;video/mp4&#34;&gt;Berry Picking&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Berry Picking&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>When To Vibe Code</title>
    <id>https://waylonwalker.com/when-to-vibe-code/</id>
    <updated>2025-09-02T19:44:20Z</updated>
    <published>2025-09-02T19:44:20Z</published>
    <link href="https://waylonwalker.com/when-to-vibe-code/" rel="alternate" type="text/html"></link>
    <summary type="text">I enjoyed this post from Theo and think it deserves re-iterated, revisited, and to remind myself of some of these things.</summary>
    <content type="html">&lt;p&gt;I enjoyed this post from Theo and think it deserves re-iterated, revisited, and&#xA;to remind myself of some of these things.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/6TMPWvPG5GA?si=guQem4R8dLOMBntP&amp;amp;t=1356&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://youtu.be/6TMPWvPG5GA?si=guQem4R8dLOMBntP&amp;amp;t=1356&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-skillread-spectrum&#34;&gt;The skill/read spectrum &lt;a href=&#34;#the-skillread-spectrum&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/209e62d2-4687-4ce0-880b-c7375867f616.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/209e62d2-4687-4ce0-880b-c7375867f616.png&#34; alt=&#34;screenshot-2025-09-03T00-32-08-321Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-09-03T00-32-08-321Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;The first diagram describes that there has become a spectrum of agentic coding&#xA;from &lt;a href=&#34;/vibe-coding/&#34; class=&#34;glossary-term&#34; title=&#34;A coding style popularized in 2025. It is the act of using LLMs to generate code for an application, but the author never looks at the output. The author...&#34;&gt;vibe coding&lt;/a&gt; where you don’t ready anything, to looking at everything in&#xA;detail, across a group of people who don’t have a clue what the code says to&#xA;people who could do it way better if they took the time.&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-importance-spectrum&#34;&gt;The importance spectrum &lt;a href=&#34;#the-importance-spectrum&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;He argues here that its ok to bounce between A,B, and D, but C becomes&#xA;dangerous.  I’d argue that he brought up a 3rd spectrum that is important later&#xA;on, “how critical is this”.  I think the I don’t know, don’t care, didn’t read,&#xA;but the thing did its job is quite fine, but don’t know, don’t care, mission&#xA;critical is the main issue we are seeing with agentic coding, primarily in the&#xA;didn’t read but critical Zone.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-rules&#34;&gt;The Rules &lt;a href=&#34;#the-rules&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is the list that prompted this post, I think it serves as a good reminder&#xA;when you should care a bit more.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/3093511a-f1fd-49cb-8152-bc6c60cc80e2.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/3093511a-f1fd-49cb-8152-bc6c60cc80e2.png&#34; alt=&#34;screenshot-2025-09-03T00-24-17-121Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-09-03T00-24-17-121Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;you-still-need-to-know-how-code-works-if-you-want-to-be-a-coder&#34;&gt;You still need to know how code works if you want to be a coder &lt;a href=&#34;#you-still-need-to-know-how-code-works-if-you-want-to-be-a-coder&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you want to get good, you need to put in the reps, do the practice, learn to&#xA;debug the strange looking error messages and not just pass them to ChatGPT.&lt;/p&gt;&#xA;&lt;h2 id=&#34;theres-a-lot-of-code-worth-having-that-is-not-worth-writing-or-reading&#34;&gt;There’s a lot of code worth having that is not worth writing or reading &lt;a href=&#34;#theres-a-lot-of-code-worth-having-that-is-not-worth-writing-or-reading&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As professionals we have a lot of code that we read more than we write, will&#xA;get executed millions of times over the next 10 years that its in service, pay&#xA;close attention to this and probably set aside the llm.&lt;/p&gt;&#xA;&lt;p&gt;We also write a lot of that is ran only a few times, maybe its a special&#xA;report, or a shell script to bootstrap something.  It might be a POC service&#xA;that you build out only ever on your machine, you get your idea out in front of&#xA;users or try it yourself and find the mistakes before you spend weeks building&#xA;it yourself.&lt;/p&gt;&#xA;&lt;h2 id=&#34;you-cant-be-mad-at-vibe-coding-and-be-mad-at-left-pad&#34;&gt;you can’t be mad at vibe coding AND be mad at left-pad &lt;a href=&#34;#you-cant-be-mad-at-vibe-coding-and-be-mad-at-left-pad&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This one is interesting that he was very strongly for.  The idea is that no one&#xA;ever reads the code from libraries they use, or the diffs of new versions&#xA;(outside of google where everything is literally vendored into the monolith).&#xA;If you don’t care about all of those dependencies, you cannot get mad at vibe&#xA;coding.&lt;/p&gt;&#xA;&lt;p&gt;I’ll argue here a smidge, but I agree with the premiss.  Left-pad was probably&#xA;written by someone smarter than average.  It was definitely used by &lt;strong&gt;far&lt;/strong&gt;&#xA;more people and projects, therefore was battle tested to no end.  This was the&#xA;real reason this stuff got in everywhere.  People are probably not good enough&#xA;to catch all the odd edge cases for &lt;code&gt;js&lt;/code&gt;, especially if front end is not their&#xA;specialty.&lt;/p&gt;&#xA;&lt;h2 id=&#34;vibe-code-is-a-type-of-legacy-codehttpsblogvaltownvibe-code&#34;&gt;&lt;a href=&#34;https://blog.val.town/vibe-code&#34;&gt;Vibe code is a type of legacy code&lt;/a&gt; &lt;a href=&#34;#vibe-code-is-a-type-of-legacy-codehttpsblogvaltownvibe-code&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Vibe coding is a type of legacy code, but as a type of debt that we opt into,&#xA;not one that has accumulated over time and we have opted not to take care of.&#xA;Both are types of code that no one reads, no one remembers existed.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;When someone needs to change legacy code they don’t, they take a hammer to it&#xA;and rewrite it from scratch.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;if-the-tools-are-better-than-you-stop-using-them&#34;&gt;If the tools are better than you, stop using them &lt;a href=&#34;#if-the-tools-are-better-than-you-stop-using-them&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Theo has a good example here.  Critial business components to his businesses&#xA;have switched to using &lt;code&gt;Effect&lt;/code&gt;.  It solves async issues with ease, but melts&#xA;the brain of anyone seeing it for the first time.  He admits that he does not&#xA;code as much anymore and thus he sucks at it, but knows that if he is ever to&#xA;learn it one bit he must turn off the LLM and put in the work to do it himself.&lt;/p&gt;&#xA;&lt;p&gt;You will not get any better at this by copy pasting from ChatGPT.  It is too&#xA;easy to put your brain aside, paste error messages, and copy the reponse in. Or&#xA;worse with agents tell them &lt;code&gt;fix this&lt;/code&gt;.  Unlike the days of Stack Overflow, you&#xA;had to understand your problem well enough to search it.  You had to understand&#xA;the answers enough to integrate the solution, you had to understand if the&#xA;solution was even for your problem in the first place.  There was much more&#xA;brain work that had to happen even then when the answers were basically given&#xA;to you.&lt;/p&gt;&#xA;&lt;h2 id=&#34;fin&#34;&gt;Fin &lt;a href=&#34;#fin&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Lastly Theo does not bring this rule, up, but if you are writing text for&#xA;humans to read, you shall not copy paste from ChatGPT without thoroughly&#xA;editing and reading for yourself first, this is considered &lt;a href=&#34;/ai-slop/&#34; class=&#34;wikilink&#34; data-title=&#34;Ai Slop&#34; data-description=&#34;AI slop is unwanted AI content, generally shared by someone who did not review the output and is considered highly offensive and rude.&#34; data-date=&#34;2025-08-05&#34; data-preview=&#34;AI slop is unwanted AI content, generally shared by someone who did not review the output and is considered highly offensive and rude.&#34;&gt;Ai Slop&lt;/a&gt; and&#xA;you should be ashamed.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>nvim delete current file</title>
    <id>https://waylonwalker.com/nvim-delete-current-file/</id>
    <updated>2025-09-02T13:23:21Z</updated>
    <published>2025-09-02T13:23:21Z</published>
    <link href="https://waylonwalker.com/nvim-delete-current-file/" rel="alternate" type="text/html"></link>
    <summary type="text">This one is one that I&#39;ve been using quite often, I did&#39;t have a hotkey for it, I just used the shell command.</summary>
    <content type="html">&lt;p&gt;This one is one that I’ve been using quite often, I did’t have a hotkey for it,&#xA;I just used the &lt;code&gt;rm&lt;/code&gt; shell command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;!!&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;rm&lt;/span&gt; %&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;TAB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;CR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;When you type &lt;code&gt;!!&lt;/code&gt; from normal mode it will automatically put you in command&#xA;mode with &lt;code&gt;.!&lt;/code&gt; pre-filled, then you just type &lt;code&gt;rm &lt;/code&gt; and &lt;code&gt;&amp;lt;TAB&amp;gt;&lt;/code&gt; to&#xA;auto-complete the current file name, and &lt;code&gt;&amp;lt;CR&amp;gt;&lt;/code&gt; to execute the command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;.&lt;span class=&#34;p&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;rm&lt;/span&gt; %&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;TAB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;CR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;making-it-better&#34;&gt;Making it better &lt;a href=&#34;#making-it-better&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The one quirk that I don’t like about this is that the buffer remains open&#xA;after deleting, and sometimes I forget to close it and end up re-creating it by&#xA;mistake when running &lt;code&gt;:wall&lt;/code&gt; or &lt;code&gt;:xall&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Create a &lt;code&gt;DeleteFile&lt;/code&gt; command with vim command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;!&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;DeleteFile&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;execute&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;!rm %&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bdelete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;!&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Create a &lt;code&gt;DeleteFile&lt;/code&gt; command with lua.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;vim.api&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nvim_create_user_command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;DeleteFile&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kr&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;-- Delete the current file from disk&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;vim.cmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;!rm %&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;-- Close the buffer without saving&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;vim.cmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;bdelete!&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kr&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Mark Of Pride Hollow Knight Keeb Run</title>
    <id>https://waylonwalker.com/shots/mark-of-pride-hollow-knight-keeb-run/</id>
    <updated>2025-08-31T17:10:06Z</updated>
    <published>2025-08-31T17:10:06Z</published>
    <link href="https://waylonwalker.com/shots/mark-of-pride-hollow-knight-keeb-run/" rel="alternate" type="text/html"></link>
    <summary type="text">The Knight collects the mark of pride charm after defeating the mantis lords.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/b9af2296-60e9-4d92-989f-1529a59c75a1.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/b9af2296-60e9-4d92-989f-1529a59c75a1.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/b9af2296-60e9-4d92-989f-1529a59c75a1.mp4&#34; type=&#34;video/mp4&#34;&gt;mark of pride hollow knight keeb run&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The Knight collects the mark of pride charm after defeating the mantis lords.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Defeating The Mantis Lords</title>
    <id>https://waylonwalker.com/shots/defeating-the-mantis-lords/</id>
    <updated>2025-08-31T17:09:31Z</updated>
    <published>2025-08-31T17:09:31Z</published>
    <link href="https://waylonwalker.com/shots/defeating-the-mantis-lords/" rel="alternate" type="text/html"></link>
    <summary type="text">The Knight reigns victorious against the three mantis lords, earning the respect of the mantis village.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/90bb2a30-c781-4dfd-98aa-ed933b24f1e3.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/90bb2a30-c781-4dfd-98aa-ed933b24f1e3.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/90bb2a30-c781-4dfd-98aa-ed933b24f1e3.mp4&#34; type=&#34;video/mp4&#34;&gt;Defeating the mantis lords&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The Knight reigns victorious against the three mantis lords, earning the respect of the mantis village.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Mantis Lords Defeat Hollow Knight Keeb Run</title>
    <id>https://waylonwalker.com/shots/mantis-lords-defeat-hollow-knight-keeb-run/</id>
    <updated>2025-08-31T17:08:29Z</updated>
    <published>2025-08-31T17:08:29Z</published>
    <link href="https://waylonwalker.com/shots/mantis-lords-defeat-hollow-knight-keeb-run/" rel="alternate" type="text/html"></link>
    <summary type="text">The Knight falls victim to the Mantis Lords in his first attempt to challenge them.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/98e34601-2cdd-4a38-98a1-97719b38c843.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/98e34601-2cdd-4a38-98a1-97719b38c843.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/98e34601-2cdd-4a38-98a1-97719b38c843.mp4&#34; type=&#34;video/mp4&#34;&gt;mantis lords defeat hollow knight keeb run&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The Knight falls victim to the Mantis Lords in his first attempt to challenge them.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Challenging The Mantis Lords Hollow Knight Keeb Run</title>
    <id>https://waylonwalker.com/shots/challenging-the-mantis-lords-hollow-knight-keeb-run/</id>
    <updated>2025-08-31T17:06:58Z</updated>
    <published>2025-08-31T17:06:58Z</published>
    <link href="https://waylonwalker.com/shots/challenging-the-mantis-lords-hollow-knight-keeb-run/" rel="alternate" type="text/html"></link>
    <summary type="text">The little night steps in front of the three mantis lords and draws his nail signaling his challenge.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/dfe1c93b-3dd8-4941-8991-7ec8d4b49beb.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/dfe1c93b-3dd8-4941-8991-7ec8d4b49beb.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/dfe1c93b-3dd8-4941-8991-7ec8d4b49beb.mp4&#34; type=&#34;video/mp4&#34;&gt;Challenging the mantis lords hollow knight keeb run&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The little night steps in front of the three mantis lords and draws his nail signaling his challenge.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Thorny Wanderers Journal Hollow Knight Keeb Run</title>
    <id>https://waylonwalker.com/shots/thorny-wanderers-journal-hollow-knight-keeb-run/</id>
    <updated>2025-08-31T11:16:31Z</updated>
    <published>2025-08-31T11:16:31Z</published>
    <link href="https://waylonwalker.com/shots/thorny-wanderers-journal-hollow-knight-keeb-run/" rel="alternate" type="text/html"></link>
    <summary type="text">Parkour though the thorns yields a wanderers journal.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/d8cdee6e-4627-444a-99a0-b5b35e960dd8.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/d8cdee6e-4627-444a-99a0-b5b35e960dd8.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/d8cdee6e-4627-444a-99a0-b5b35e960dd8.mp4&#34; type=&#34;video/mp4&#34;&gt;Thorny Wanderers Journal Hollow Knight Keeb Run&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Parkour though the thorns yields a wanderers journal.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Spore Shroom Hollow Knight Keeb Run</title>
    <id>https://waylonwalker.com/shots/spore-shroom-hollow-knight-keeb-run/</id>
    <updated>2025-08-31T11:15:42Z</updated>
    <published>2025-08-31T11:15:42Z</published>
    <link href="https://waylonwalker.com/shots/spore-shroom-hollow-knight-keeb-run/" rel="alternate" type="text/html"></link>
    <summary type="text">Unlocking the Spore Shroom Charm in Hollow Knight Keeb Run</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/a15c7895-bd25-4238-9634-f58c2590730a.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/a15c7895-bd25-4238-9634-f58c2590730a.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/a15c7895-bd25-4238-9634-f58c2590730a.mp4&#34; type=&#34;video/mp4&#34;&gt;spore shroom hollow knight keeb run&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Unlocking the Spore Shroom Charm in Hollow Knight Keeb Run&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Thorny Mask Shard Hollow Knight Keeb Run</title>
    <id>https://waylonwalker.com/shots/thorny-mask-shard-hollow-knight-keeb-run/</id>
    <updated>2025-08-31T11:14:55Z</updated>
    <published>2025-08-31T11:14:55Z</published>
    <link href="https://waylonwalker.com/shots/thorny-mask-shard-hollow-knight-keeb-run/" rel="alternate" type="text/html"></link>
    <summary type="text">A tricky parkour through the thorns to yield a mask shard and complete a full mask.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/2b9b5302-7437-4910-a98c-bc96650e353c.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/2b9b5302-7437-4910-a98c-bc96650e353c.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/2b9b5302-7437-4910-a98c-bc96650e353c.mp4&#34; type=&#34;video/mp4&#34;&gt;Thorny Mask Shard Hollow Knight Keeb Run&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A tricky parkour through the thorns to yield a mask shard and complete a full mask.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Cut Away Keycap Down</title>
    <id>https://waylonwalker.com/shots/cut-away-keycap-down/</id>
    <updated>2025-08-30T16:28:16Z</updated>
    <published>2025-08-30T16:28:16Z</published>
    <link href="https://waylonwalker.com/shots/cut-away-keycap-down/" rel="alternate" type="text/html"></link>
    <summary type="text">A cut away keycap on a Durock lupine switched pressed all the way to bottom out.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/a767d7d4-cd81-44fe-b3a7-2500df2d92df.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/a767d7d4-cd81-44fe-b3a7-2500df2d92df.jpg&#34; alt=&#34;cut away keycap down&#34;/ data-glightbox=&#34;description: cut away keycap down&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A cut away keycap on a Durock lupine switched pressed all the way to bottom out.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Cutaway Key Cap Up</title>
    <id>https://waylonwalker.com/shots/cutaway-key-cap-up/</id>
    <updated>2025-08-30T16:27:22Z</updated>
    <published>2025-08-30T16:27:22Z</published>
    <link href="https://waylonwalker.com/shots/cutaway-key-cap-up/" rel="alternate" type="text/html"></link>
    <summary type="text">A cutaway keycap sitting on a durock lupine switch</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/7b6d0a00-1a4a-4341-b3c9-87d7436fd55a.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/7b6d0a00-1a4a-4341-b3c9-87d7436fd55a.jpg&#34; alt=&#34;cutaway key cap up&#34;/ data-glightbox=&#34;description: cutaway key cap up&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A cutaway keycap sitting on a durock lupine switch&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Freshly Cut Keycap Cut Away</title>
    <id>https://waylonwalker.com/shots/freshly-cut-keycap-cut-away/</id>
    <updated>2025-08-30T16:26:22Z</updated>
    <published>2025-08-30T16:26:22Z</published>
    <link href="https://waylonwalker.com/shots/freshly-cut-keycap-cut-away/" rel="alternate" type="text/html"></link>
    <summary type="text">A keycap glued to a 2x4 freshly turned into a cut away keykap.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/c02aff9d-bb8f-42aa-8dd8-34b391a44547.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/c02aff9d-bb8f-42aa-8dd8-34b391a44547.jpg&#34; alt=&#34;freshly cut keycap cut away&#34;/ data-glightbox=&#34;description: freshly cut keycap cut away&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A keycap glued to a 2x4 freshly turned into a cut away keykap.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Keycap Cut Away</title>
    <id>https://waylonwalker.com/keycap-cut-away/</id>
    <updated>2025-08-30T16:03:01Z</updated>
    <published>2025-08-30T16:03:01Z</published>
    <link href="https://waylonwalker.com/keycap-cut-away/" rel="alternate" type="text/html"></link>
    <summary type="text">I was curious how/if my custom keycap design was hitting my switches. So I set out to find out what the fitup inside of this assembly looks like, but not...</summary>
    <content type="html">&lt;p&gt;I was curious how/if my custom keycap design was hitting my switches.  So I set&#xA;out to find out what the fitup inside of this assembly looks like, but not&#xA;theoretically, a fully sliced view into their fit up in the flesh.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-set-up&#34;&gt;The set up &lt;a href=&#34;#the-set-up&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;To setup for this cut, I flooded the edge of a 2x4 with hot glue, and inserted&#xA;the cap such that the step was tangent with the edge.  This way I could use the&#xA;edge as a guide to cut one side off and leave the stem in tact.  I took a&#xA;handsaw to it and filed it smooth.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/c02aff9d-bb8f-42aa-8dd8-34b391a44547.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/c02aff9d-bb8f-42aa-8dd8-34b391a44547.jpg&#34; alt=&#34;PXL_20250830_193408664.jpg&#34;/ data-glightbox=&#34;description: PXL_20250830_193408664.jpg&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Removal was applying some isopropyl alcohol and it popped right off.&lt;/p&gt;&#xA;&lt;h2 id=&#34;results&#34;&gt;Results &lt;a href=&#34;#results&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Actually the results aren’t that interesting.  I found that the pictures turned&#xA;out really good, but nothing was touching and it sits in the stem exactly as I&#xA;thought it did.  I had a thought, what if the cap is not allowing the switch to&#xA;reach it’s full travel, and had no way to know, but now I know.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/7b6d0a00-1a4a-4341-b3c9-87d7436fd55a.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/7b6d0a00-1a4a-4341-b3c9-87d7436fd55a.jpg&#34; alt=&#34;PXL_20250830_193653788.jpg&#34;/ data-glightbox=&#34;description: PXL_20250830_193653788.jpg&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Key Up&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/a767d7d4-cd81-44fe-b3a7-2500df2d92df.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/a767d7d4-cd81-44fe-b3a7-2500df2d92df.jpg&#34; alt=&#34;PXL_20250830_193712809.jpg&#34;/ data-glightbox=&#34;description: PXL_20250830_193712809.jpg&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Key Down&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Aquiring Ismas Tear Hollow Knight Keeb Run</title>
    <id>https://waylonwalker.com/shots/aquiring-ismas-tear-hollow-knight-keeb-run/</id>
    <updated>2025-08-30T11:13:21Z</updated>
    <published>2025-08-30T11:13:21Z</published>
    <link href="https://waylonwalker.com/shots/aquiring-ismas-tear-hollow-knight-keeb-run/" rel="alternate" type="text/html"></link>
    <summary type="text">The long trek has paid off and we have aquired Isma&#39;s tear, it coats our outter shell with protective coating from the acid, giving us access to new parts of the world.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/c6a334a4-d8d3-4742-82ea-3b6e9eaa9923.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/c6a334a4-d8d3-4742-82ea-3b6e9eaa9923.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/c6a334a4-d8d3-4742-82ea-3b6e9eaa9923.mp4&#34; type=&#34;video/mp4&#34;&gt;Aquiring Ismas Tear Hollow Knight Keeb Run&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The long trek has paid off and we have aquired Isma’s tear, it coats our outter shell with protective coating from the acid, giving us access to new parts of the world.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Ismas Tear Battle Hollow Knight Keeb Run</title>
    <id>https://waylonwalker.com/shots/ismas-tear-battle-hollow-knight-keeb-run/</id>
    <updated>2025-08-30T11:07:17Z</updated>
    <published>2025-08-30T11:07:17Z</published>
    <link href="https://waylonwalker.com/shots/ismas-tear-battle-hollow-knight-keeb-run/" rel="alternate" type="text/html"></link>
    <summary type="text">Finishing the battle before accessing Isma&#39;s tear in Hollow Knight</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/4dd7d2cd-7d4a-473e-a483-f8f8512c6442.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/4dd7d2cd-7d4a-473e-a483-f8f8512c6442.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/4dd7d2cd-7d4a-473e-a483-f8f8512c6442.mp4&#34; type=&#34;video/mp4&#34;&gt;ismas tear battle hollow knight keeb run&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Finishing the battle before accessing Isma’s tear in Hollow Knight&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Climbing Out Of Deep Nest In Hollow Knight Keeb Run</title>
    <id>https://waylonwalker.com/shots/climbing-out-of-deep-nest-in-hollow-knight-keeb-run/</id>
    <updated>2025-08-30T11:02:47Z</updated>
    <published>2025-08-30T11:02:47Z</published>
    <link href="https://waylonwalker.com/shots/climbing-out-of-deep-nest-in-hollow-knight-keeb-run/" rel="alternate" type="text/html"></link>
    <summary type="text">Making light moves of this tricky parkour run between deepnest and the royal waterways</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/9a4befef-e694-4a3c-8b0e-edd06a3f741c.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/9a4befef-e694-4a3c-8b0e-edd06a3f741c.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/9a4befef-e694-4a3c-8b0e-edd06a3f741c.mp4&#34; type=&#34;video/mp4&#34;&gt;Climbing out of deep nest in hollow knight keeb run&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Making light moves of this tricky parkour run between deepnest and the royal waterways&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Knife Sharpener Small Upgrade</title>
    <id>https://waylonwalker.com/knife-sharpener-small-upgrade/</id>
    <updated>2025-08-29T16:17:00Z</updated>
    <published>2025-08-29T16:17:00Z</published>
    <link href="https://waylonwalker.com/knife-sharpener-small-upgrade/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve used this knife sharpener that I printed for a few years now. I thought that it was based on the Russian designed TSPROF, but in looking through the...</summary>
    <content type="html">&lt;p&gt;I’ve used this knife sharpener that I printed for a few years now.  I thought&#xA;that it was based on the Russian designed TSPROF, but in looking through the&#xA;history it looks very similar to the USA Edge Pro Inc Apex designs that goes&#xA;back to the 1990’s.  The angle isn’t quite holding like it used to.  I’ve got a&#xA;lot of ideas for my own model, but for now I’m going to print some spacers to&#xA;help get repeatable angles.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/c587bfe8-e310-429d-a3fd-ee617670f6ef.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/c587bfe8-e310-429d-a3fd-ee617670f6ef.jpg&#34; alt=&#34;PXL_20250822_211720540.jpg&#34;/ data-glightbox=&#34;description: PXL_20250822_211720540.jpg&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;setting the angle on my sharpener&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/d09ababd-e1e3-4290-ac35-725181df89b7.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/d09ababd-e1e3-4290-ac35-725181df89b7.jpg&#34; alt=&#34;PXL_20250822_211926948.jpg&#34;/ data-glightbox=&#34;description: PXL_20250822_211926948.jpg&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Where I want to place a fixed height collar&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;16deg 31.5mm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;17deg 34.8mm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;18deg 38.0mm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;19deg 40.6mm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;20deg 43.8mm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;21deg 47.4mm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;22deg 50.2mm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;23deg 52.0mm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;24deg 54.3mm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;so-i-may-have-went-to-the-next-level&#34;&gt;so I may have went to the next level &lt;a href=&#34;#so-i-may-have-went-to-the-next-level&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/30335f07-9cac-4e66-b908-f0e3cfbf7582.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/30335f07-9cac-4e66-b908-f0e3cfbf7582.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/30335f07-9cac-4e66-b908-f0e3cfbf7582.mp4&#34; type=&#34;video/mp4&#34;&gt;30335f07-9cac-4e66-b908-f0e3cfbf7582.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>vim noa</title>
    <id>https://waylonwalker.com/vim-noa/</id>
    <updated>2025-08-29T08:32:44Z</updated>
    <published>2025-08-29T08:32:44Z</published>
    <link href="https://waylonwalker.com/vim-noa/" rel="alternate" type="text/html"></link>
    <summary type="text">Vim is a command that runs what you call without autocommands on. This is typically used when you have some commands for formatting, most auto formatters are...</summary>
    <content type="html">&lt;p&gt;Vim &lt;code&gt;:noa&lt;/code&gt; is a command that runs what you call without autocommands on.  This&#xA;is typically used when you have some &lt;code&gt;BufWritePre&lt;/code&gt; commands for formatting,&#xA;most auto formatters are implemented this way in vim.  It can be super useful&#xA;if you have something like a yaml/json file that you have crafted perfectly how&#xA;you want it, maybe it has some source code for a small script or sql embeded&#xA;and your formatter wants to turn it into one line.  You could get a better&#xA;formatter, but for these one off cases that aren’t a big bother to me I run&#xA;&lt;code&gt;:noa w&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;noa&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;w&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>I&#39;m Out On Agents</title>
    <id>https://waylonwalker.com/im-out-on-agents/</id>
    <updated>2025-08-27T10:10:51Z</updated>
    <published>2025-08-27T10:10:51Z</published>
    <link href="https://waylonwalker.com/im-out-on-agents/" rel="alternate" type="text/html"></link>
    <summary type="text">Its the year 2025 and we are only a few years into having 6 months to live before ai takes our jobs, and the big push right now is agents, managing agents. I...</summary>
    <content type="html">&lt;p&gt;Its the year 2025 and we are only a few years into having 6 months to live&#xA;before ai takes our jobs, and the big push right now is agents, managing&#xA;agents.  I will fully concede to I’m not doing it right, or a future state gets&#xA;better than where we are right now, but right now they kinda suck.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Transparency&lt;/p&gt;&#xA;&lt;p&gt;I’m sitting offline right now as I write this, These are my feels, no&#xA;research, no links, no ai, just vibes.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;chat&#34;&gt;Chat &lt;a href=&#34;#chat&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Chat is what really kicked off ai uses and goes back as old as computers, but&#xA;it always sucked.  Then chatgpt rocked the world with the biggest launch day in&#xA;history and showed us that it could actually be pretty good.  Unethically&#xA;trained on everything they could get their hands on, burning cities worth of&#xA;electricity to train, and keep training to stay ahead of the competition.  It&#xA;does a damn good job.  There are tells, and if you see enough of it there is a&#xA;lot that turns to slop, but if you had never seen it before, there is no way&#xA;you would assume that it was not a computer.&lt;/p&gt;&#xA;&lt;p&gt;It does a damn good job at being average, it can do what seems like everything&#xA;not related to security and authentication at a pretty average level.  This is&#xA;its super power.  Whenever you are trying to bridge between something you know&#xA;and something new, you can get a pretty good answer, and likely spot the bs in&#xA;what you know.&lt;/p&gt;&#xA;&lt;h2 id=&#34;agents&#34;&gt;Agents &lt;a href=&#34;#agents&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now that our models have gotten better, hardware has gotten bigger, better, and&#xA;a lot more of it, we can really expand context windows really wide.  With that&#xA;brought the use of agents, these tools get context from sources on their own&#xA;and often are given read/write access to your computer.  Depending on the model&#xA;these things will branch out to make small changes that look no worse than a&#xA;formatter on every goddam line of your codebase.  Except they are not a&#xA;formatter, they are not backed by ast checks.  They do not have any guarantees.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;They take the fun out of creation.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The emphasis now becomes on the code review.  All you have to do is ask it to&#xA;makes changes for you.  Bring in your expertise of what changes should be next,&#xA;or even just punt to asking it what comes next.  I’ve yet to talk to someone&#xA;that is diligent enough to read everything it spits out in excruciating detail&#xA;to the point that it does not cause significant issues.&lt;/p&gt;&#xA;&lt;p&gt;You see here is the thing, its average.  With a little bit of context it can do&#xA;average work.  It is not an expert.  On the surface this feels fine, making&#xA;crud endpoints has been done for decades, and average developers crush these&#xA;things every day no problem.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It’s Average at best&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;You know what is not average?  Your knowledge of the use case you are solving.&#xA;You may not feel like an expert, but given that there are likely about 5 people&#xA;working in your codebase, you are a fukin expert at that thing.  The average&#xA;person off the street takes time to onboard, often months, or years for someone&#xA;to really understand the business you are working in.  These things don’t have&#xA;that.&lt;/p&gt;&#xA;&lt;h2 id=&#34;im-not-letting-it-in-shit-that-i-care-avout&#34;&gt;I’m not letting it in shit that I care avout &lt;a href=&#34;#im-not-letting-it-in-shit-that-i-care-avout&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I was early to the game to codeium, even used the predecessor for awhile, I was&#xA;early to chat gpt, I was early to windsurf and the possibilities that agentic&#xA;ides brought.  I will be late on letting agents touch my production code bases.&#xA;The few times I’ve tried for changes that seem easy enough, but more work than&#xA;what I want to do at the time, I’ve regretted it.  It’s only left behind a mess&#xA;that it cant deal with anymore, runs in circles trying to solve any problem,&#xA;and I’m left with shit that feels like a house of cards that breaks anytime you&#xA;touch it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;i-will-continue-to-poc&#34;&gt;I will continue to POC &lt;a href=&#34;#i-will-continue-to-poc&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As much of a mess as these things, make they are super useful to vibe code&#xA;ideas, move quickly and try different approaches to a problem.  They let you&#xA;make a proof of concept that you can get in front of team mates, bosses, or&#xA;users.&lt;/p&gt;&#xA;&lt;p&gt;Honestly I still prefer the chat interface.  It feels like a nice balance of&#xA;using my brain, and knowing that I am punting on something.  Do I need to know&#xA;the whole &lt;code&gt;ffmpeg&lt;/code&gt; interface to grab a thumbnail for my webapp, no, would I&#xA;actually like to learn it someday, yes, but I don’t need to right now I just&#xA;need a goddamn thumbnail.&lt;/p&gt;&#xA;&lt;p&gt;For the most part I am still slotting these things into the codebase myself,&#xA;but occasionally I have it do an entire module, and even more rare I pull out&#xA;agents and have it do all the work.  The further away from the code I get, the&#xA;less I care about it and just want it done.&lt;/p&gt;&#xA;&lt;h2 id=&#34;i-will-laugh-at-this-post-in-2-years&#34;&gt;I will laugh at this post in 2 years &lt;a href=&#34;#i-will-laugh-at-this-post-in-2-years&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The way I see it agentic coding is not here to stay, it sucks.  There is one&#xA;two ways to go this was a blip in the radar that we laugh at for giving ai&#xA;companies all our data for free so they could fuck up our products.  Or they&#xA;actually get pretty good and we all become architects that peek at the code if&#xA;we really need to.  I think for the second to become true its going to take a&#xA;lot of time, consumer hardware will need to catch up, local llms will need to&#xA;work a lot better than they do now.  Even if we still need to call out to the&#xA;big boys for some heavy work getting the context right for them locally would&#xA;make a huge difference.  Currently local llms are too slow and dumb.&lt;/p&gt;&#xA;&lt;p&gt;So will this bubble pop or explode, we can only wait to find out.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Doing Some Keeb Modeling And Thought This Was Cool</title>
    <id>https://waylonwalker.com/shots/doing-some-keeb-modeling-and-thought-this-was-cool/</id>
    <updated>2025-08-26T20:33:37Z</updated>
    <published>2025-08-26T20:33:37Z</published>
    <link href="https://waylonwalker.com/shots/doing-some-keeb-modeling-and-thought-this-was-cool/" rel="alternate" type="text/html"></link>
    <summary type="text">The inside of a keyboard before the tools are used to cut away switch cutouts in the board.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/615149f8-82ea-4c09-b5c9-36ee8b31c73d.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/615149f8-82ea-4c09-b5c9-36ee8b31c73d.png&#34; alt=&#34;Doing some keeb modeling and thought this was cool&#34;/ data-glightbox=&#34;description: Doing some keeb modeling and thought this was cool&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The inside of a keyboard before the tools are used to cut away switch cutouts in the board.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ChrisBuilds terminaltexteffects</title>
    <id>https://waylonwalker.com/chrisbuilds-terminaltexteffects/</id>
    <updated>2025-08-26T19:38:14Z</updated>
    <published>2025-08-26T19:38:14Z</published>
    <link href="https://waylonwalker.com/chrisbuilds-terminaltexteffects/" rel="alternate" type="text/html"></link>
    <summary type="text">I like ChrisBuilds&#39;s project terminaltexteffects.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/ChrisBuilds&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ChrisBuilds’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/ChrisBuilds/terminaltexteffects&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;terminaltexteffects&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;TerminalTextEffects (TTE) is a terminal visual effects engine, application, and Python library.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ miguelgrinberg python-socketio</title>
    <id>https://waylonwalker.com/miguelgrinberg-python-socketio/</id>
    <updated>2025-08-26T13:07:08Z</updated>
    <published>2025-08-26T13:07:08Z</published>
    <link href="https://waylonwalker.com/miguelgrinberg-python-socketio/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered python-socketio by miguelgrinberg, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/miguelgrinberg/python-socketio&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;python-socketio&lt;/a&gt; by &lt;a href=&#34;https://github.com/miguelgrinberg&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;miguelgrinberg&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;Python Socket.IO server and client&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>modd</title>
    <id>https://waylonwalker.com/modd/</id>
    <updated>2025-08-25T10:48:01Z</updated>
    <published>2025-08-25T10:48:01Z</published>
    <link href="https://waylonwalker.com/modd/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I gave modd a try, and it seems like a good file watcher executor. I tried using libnotify to send desktop notifications, but all I got was modd, I...</summary>
    <content type="html">&lt;p&gt;Today I gave &lt;a href=&#34;https://github.com/cortesi/modd&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;modd&lt;/a&gt; a try, and it seems like a&#xA;good file watcher executor.  I tried using libnotify to send desktop&#xA;notifications, but all I got was modd, I might not have notifications setup&#xA;right on the awesomewm machine.&lt;/p&gt;&#xA;&lt;p&gt;config goes in &lt;code&gt;modd.conf&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-config&#34;&gt;**/*.py {&#xA;  # check formatting via ruff&#xA;  prep: ruff format --check .&#xA;&#xA;  # check docstring formatting&#xA;  prep: pydocstyle .&#xA;  #&#xA;  # # check type hints via ty&#xA;  prep: ty check .&#xA;  #&#xA;  # # run linter via ruff&#xA;  prep: ruff check .&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I installed it using installer from jpillora, pulling pre-built binaries right&#xA;out of the github repo.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl https://i.jpillora.com/cortesi/modd &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then you can install it, and on file change it will run the commands you&#xA;configured.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;modd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-25 Notes</title>
    <id>https://waylonwalker.com/2025-08-25-notes/</id>
    <updated>2025-08-25T10:45:08Z</updated>
    <published>2025-08-25T10:45:08Z</published>
    <link href="https://waylonwalker.com/2025-08-25-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">Gave modd a try and it seems pretty good, will likely be slotting it in next to my justfile usage.</summary>
    <content type="html">&lt;p&gt;Gave &lt;a href=&#34;/modd/&#34; class=&#34;wikilink&#34; data-title=&#34;modd&#34; data-description=&#34;Today I gave modd a try, and it seems like a good file watcher executor. I tried using libnotify to send desktop notifications, but all I got was modd, I...&#34; data-date=&#34;2025-08-25&#34; data-preview=&#34;Today I gave modd a try, and it seems like a good file watcher executor. I tried using libnotify to send desktop notifications, but all I got was modd, I...&#34;&gt;modd&lt;/a&gt; a try and it seems pretty good, will likely be slotting it in&#xA;next to my &lt;a href=&#34;https://just.systems/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/just.systems.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/just.systems.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;justfile&lt;/a&gt; usage.&lt;/p&gt;&#xA;&lt;p&gt;Gave &lt;a href=&#34;https://github.com/nkantar/sus&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sus&lt;/a&gt; a try, but it lacked the&#xA;configurability and flexibility I was looking for.  For now I will stick to&#xA;&lt;a href=&#34;https://markata.dev/markata/plugins/redirects/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/markata.dev.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/markata.dev.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;markata-redirects&lt;/a&gt; plugin.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-23 Notes</title>
    <id>https://waylonwalker.com/2025-08-23-notes/</id>
    <updated>2025-08-23T19:27:05Z</updated>
    <published>2025-08-23T19:27:05Z</published>
    <link href="https://waylonwalker.com/2025-08-23-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">Today, some great work on the knife sharpener re-design. I&#39;ve been using the same one since I first got my ender 3 3d printer, and have wanted to make some...</summary>
    <content type="html">&lt;h2 id=&#34;knife-sharpener&#34;&gt;Knife Sharpener &lt;a href=&#34;#knife-sharpener&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Today, some great work on the knife sharpener re-design.  I’ve been using the&#xA;same one since I first got my ender 3 3d printer, and have wanted to make some&#xA;changes ever since.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/4cf7ea72-ad4b-421e-92ad-9d08e47b469a.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/4cf7ea72-ad4b-421e-92ad-9d08e47b469a.png&#34; alt=&#34;Helmet Hidden In Design&#34;/ data-glightbox=&#34;description: Helmet Hidden In Design&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Wyatt sat with me through the design, I probably would not have gone this deep without him, he thought the helmet look was hilarious&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/30335f07-9cac-4e66-b908-f0e3cfbf7582.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/30335f07-9cac-4e66-b908-f0e3cfbf7582.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/30335f07-9cac-4e66-b908-f0e3cfbf7582.mp4&#34; type=&#34;video/mp4&#34;&gt;Knife Sharpener Double Hinge First Try&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Notice one of the biggest problems with this one here is how much is slides around&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/27b5c23f-69a3-4e7b-a468-5a6767e1cb2e.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/27b5c23f-69a3-4e7b-a468-5a6767e1cb2e.png&#34; alt=&#34;Knife Sharpener Double Hinge Wing Nut&#34;/ data-glightbox=&#34;description: Knife Sharpener Double Hinge Wing Nut&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This wing nut really set it apart&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;hollow-knight&#34;&gt;Hollow Knight &lt;a href=&#34;#hollow-knight&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Progress on the Hollow Knight Keeb Run.  SILKSONG in 2 WEEKS!!&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/2ea5790c-66d7-401d-95c7-c81a2bccb743.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/2ea5790c-66d7-401d-95c7-c81a2bccb743.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/2ea5790c-66d7-401d-95c7-c81a2bccb743.mp4&#34; type=&#34;video/mp4&#34;&gt;Getting The Lumafly Lantern In My Hollow Knight Keeb Run&lt;/video&gt;&lt;/a&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/3713bdd1-c645-46c5-85d2-451356383842.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/3713bdd1-c645-46c5-85d2-451356383842.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/3713bdd1-c645-46c5-85d2-451356383842.mp4&#34; type=&#34;video/mp4&#34;&gt;Unlocking Royal Waterways In Hollow Knight Keeb Run&lt;/video&gt;&lt;/a&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/58235f4d-701f-4ddc-a26d-ab5f9e0bdbfc.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/58235f4d-701f-4ddc-a26d-ab5f9e0bdbfc.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/58235f4d-701f-4ddc-a26d-ab5f9e0bdbfc.mp4&#34; type=&#34;video/mp4&#34;&gt;Entering Royal Waterway Hollow Knight Keeb Run&lt;/video&gt;&lt;/a&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/bdf1985b-6a32-4bf4-9f9a-d6f814db7136.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/bdf1985b-6a32-4bf4-9f9a-d6f814db7136.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/bdf1985b-6a32-4bf4-9f9a-d6f814db7136.mp4&#34; type=&#34;video/mp4&#34;&gt;Unlock Royal Waterway Bench In Hollow Knight Keeb&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;todays-script&#34;&gt;todays script &lt;a href=&#34;#todays-script&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Made a little script to grab these&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;post&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;feeds&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;today&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;posts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;image&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;![&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;title&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;](&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;image&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;)&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;[&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;title&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;](&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;url&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;)&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Knife Sharpener Double Hinge Wing Nut</title>
    <id>https://waylonwalker.com/shots/knife-sharpener-double-hinge-wing-nut/</id>
    <updated>2025-08-23T19:23:55Z</updated>
    <published>2025-08-23T19:23:55Z</published>
    <link href="https://waylonwalker.com/shots/knife-sharpener-double-hinge-wing-nut/" rel="alternate" type="text/html"></link>
    <summary type="text">A 3 lobed wing nut perfectly hiding the m4 cap screw underneath of it, flooded in uv resin.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/27b5c23f-69a3-4e7b-a468-5a6767e1cb2e.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/27b5c23f-69a3-4e7b-a468-5a6767e1cb2e.png&#34; alt=&#34;knife sharpener double hinge wing nut&#34;/ data-glightbox=&#34;description: knife sharpener double hinge wing nut&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A 3 lobed wing nut perfectly hiding the m4 cap screw underneath of it, flooded in uv resin.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Knife Sharpener Double Hinge First Try</title>
    <id>https://waylonwalker.com/shots/knife-sharpener-double-hinge-first-try/</id>
    <updated>2025-08-23T19:21:49Z</updated>
    <published>2025-08-23T19:21:49Z</published>
    <link href="https://waylonwalker.com/shots/knife-sharpener-double-hinge-first-try/" rel="alternate" type="text/html"></link>
    <summary type="text">Testing out the double hinge knife sharpener holder for the first time.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/30335f07-9cac-4e66-b908-f0e3cfbf7582.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/30335f07-9cac-4e66-b908-f0e3cfbf7582.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/30335f07-9cac-4e66-b908-f0e3cfbf7582.mp4&#34; type=&#34;video/mp4&#34;&gt;knife sharpener double hinge first try&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Testing out the double hinge knife sharpener holder for the first time.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Knife Sharpenter Double Hinge Mid Print</title>
    <id>https://waylonwalker.com/shots/knife-sharpenter-double-hinge-mid-print/</id>
    <updated>2025-08-23T18:44:28Z</updated>
    <published>2025-08-23T18:44:28Z</published>
    <link href="https://waylonwalker.com/shots/knife-sharpenter-double-hinge-mid-print/" rel="alternate" type="text/html"></link>
    <summary type="text">A bambu A1 printer printing my double hinge mid print under a uv light</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/ed5c4cae-8608-4b11-aa03-866bf550bc25.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/ed5c4cae-8608-4b11-aa03-866bf550bc25.png&#34; alt=&#34;knife sharpenter double hinge mid print&#34;/ data-glightbox=&#34;description: knife sharpenter double hinge mid print&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A bambu A1 printer printing my double hinge mid print under a uv light&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Kings Station In Hollow Knight Keeb Run</title>
    <id>https://waylonwalker.com/shots/kings-station-in-hollow-knight-keeb-run/</id>
    <updated>2025-08-23T11:01:07Z</updated>
    <published>2025-08-23T11:01:07Z</published>
    <link href="https://waylonwalker.com/shots/kings-station-in-hollow-knight-keeb-run/" rel="alternate" type="text/html"></link>
    <summary type="text">Unlocking Kings station in my hollow knight keyboard only run</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/3651c0e1-6d99-4b54-95eb-5b955323a2e9.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/3651c0e1-6d99-4b54-95eb-5b955323a2e9.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/3651c0e1-6d99-4b54-95eb-5b955323a2e9.mp4&#34; type=&#34;video/mp4&#34;&gt;Kings Station in Hollow Knight Keeb run&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Unlocking Kings station in my hollow knight keyboard only run&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Defeating The Dung Defender In Hollow Knight Keeb Run</title>
    <id>https://waylonwalker.com/shots/defeating-the-dung-defender-in-hollow-knight-keeb-run/</id>
    <updated>2025-08-23T11:00:03Z</updated>
    <published>2025-08-23T11:00:03Z</published>
    <link href="https://waylonwalker.com/shots/defeating-the-dung-defender-in-hollow-knight-keeb-run/" rel="alternate" type="text/html"></link>
    <summary type="text">The final blow to the Dung Defender as he admits defeat and allows the little knight to access the valve in the royal waterways.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/982091a0-a65a-44a4-aca6-fbffcff9ed90.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/982091a0-a65a-44a4-aca6-fbffcff9ed90.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/982091a0-a65a-44a4-aca6-fbffcff9ed90.mp4&#34; type=&#34;video/mp4&#34;&gt;Defeating the Dung Defender in hollow knight keeb run&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The final blow to the Dung Defender as he admits defeat and allows the little knight to access the valve in the royal waterways.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Unlock Royal Waterway Bench In Hollow Knight Keeb</title>
    <id>https://waylonwalker.com/shots/unlock-royal-waterway-bench-in-hollow-knight-keeb/</id>
    <updated>2025-08-23T09:48:08Z</updated>
    <published>2025-08-23T09:48:08Z</published>
    <link href="https://waylonwalker.com/shots/unlock-royal-waterway-bench-in-hollow-knight-keeb/" rel="alternate" type="text/html"></link>
    <summary type="text">Using desolate dive to unlock the Royal Waterway bench in my Hollow Knight keeb only run.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/bdf1985b-6a32-4bf4-9f9a-d6f814db7136.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/bdf1985b-6a32-4bf4-9f9a-d6f814db7136.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/bdf1985b-6a32-4bf4-9f9a-d6f814db7136.mp4&#34; type=&#34;video/mp4&#34;&gt;unlock royal waterway bench in hollow knight keeb&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Using desolate dive to unlock the Royal Waterway bench in my Hollow Knight keeb only run.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Entering Royal Waterway Hollow Knight Keeb Run</title>
    <id>https://waylonwalker.com/shots/entering-royal-waterway-hollow-knight-keeb-run/</id>
    <updated>2025-08-23T09:46:21Z</updated>
    <published>2025-08-23T09:46:21Z</published>
    <link href="https://waylonwalker.com/shots/entering-royal-waterway-hollow-knight-keeb-run/" rel="alternate" type="text/html"></link>
    <summary type="text">Entering the royal waterway during my hollow knight keeb only run.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/58235f4d-701f-4ddc-a26d-ab5f9e0bdbfc.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/58235f4d-701f-4ddc-a26d-ab5f9e0bdbfc.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/58235f4d-701f-4ddc-a26d-ab5f9e0bdbfc.mp4&#34; type=&#34;video/mp4&#34;&gt;entering royal waterway hollow knight keeb run&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Entering the royal waterway during my hollow knight keeb only run.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Unlocking Royal Waterways In Hollow Knight Keeb Run</title>
    <id>https://waylonwalker.com/shots/unlocking-royal-waterways-in-hollow-knight-keeb-run/</id>
    <updated>2025-08-23T09:45:20Z</updated>
    <published>2025-08-23T09:45:20Z</published>
    <link href="https://waylonwalker.com/shots/unlocking-royal-waterways-in-hollow-knight-keeb-run/" rel="alternate" type="text/html"></link>
    <summary type="text">Using the simple key to unlock the Royal Waterway in Hollow Knight during my keeb only run.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/3713bdd1-c645-46c5-85d2-451356383842.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/3713bdd1-c645-46c5-85d2-451356383842.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/3713bdd1-c645-46c5-85d2-451356383842.mp4&#34; type=&#34;video/mp4&#34;&gt;unlocking royal waterways in hollow knight keeb run&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Using the simple key to unlock the Royal Waterway in Hollow Knight during my keeb only run.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Getting The Lumafly Lantern In My Hollow Knight Keeb Run</title>
    <id>https://waylonwalker.com/shots/getting-the-lumafly-lantern-in-my-hollow-knight-keeb-run/</id>
    <updated>2025-08-23T09:43:36Z</updated>
    <published>2025-08-23T09:43:36Z</published>
    <link href="https://waylonwalker.com/shots/getting-the-lumafly-lantern-in-my-hollow-knight-keeb-run/" rel="alternate" type="text/html"></link>
    <summary type="text">Purchasing the Lumafly Lanten from Sly&#39;s shop in Dirtmouth during my Hollow Knight keeb only run.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/2ea5790c-66d7-401d-95c7-c81a2bccb743.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/2ea5790c-66d7-401d-95c7-c81a2bccb743.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/2ea5790c-66d7-401d-95c7-c81a2bccb743.mp4&#34; type=&#34;video/mp4&#34;&gt;getting the lumafly lantern in my hollow knight keeb run&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Purchasing the Lumafly Lanten from Sly’s shop in Dirtmouth during my Hollow Knight keeb only run.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Helmet Hidden In Design</title>
    <id>https://waylonwalker.com/shots/helmet-hidden-in-design/</id>
    <updated>2025-08-23T09:26:38Z</updated>
    <published>2025-08-23T09:26:38Z</published>
    <link href="https://waylonwalker.com/shots/helmet-hidden-in-design/" rel="alternate" type="text/html"></link>
    <summary type="text">A CAD design for a movable hinge that turned out looking like a space helmet.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/4cf7ea72-ad4b-421e-92ad-9d08e47b469a.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/4cf7ea72-ad4b-421e-92ad-9d08e47b469a.png&#34; alt=&#34;helmet hidden in design&#34;/ data-glightbox=&#34;description: helmet hidden in design&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A CAD design for a movable hinge that turned out looking like a space helmet.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>bash timestamp</title>
    <id>https://waylonwalker.com/bash-timestamp/</id>
    <updated>2025-08-22T15:35:36Z</updated>
    <published>2025-08-22T15:35:36Z</published>
    <link href="https://waylonwalker.com/bash-timestamp/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I needed to make a backup of some config. I wanted to add a timestamp so that I knew when the backup was made. This would make unique backups easy, and...</summary>
    <content type="html">&lt;p&gt;Today I needed to make a backup of some config.  I wanted to add a timestamp so&#xA;that I knew when the backup was made.  This would make unique backups easy, and&#xA;I could tell when they were made.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp configfile configfile.backup.&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;date %s&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you want to decrypt the timestamp into something more human readable.  You&#xA;can list backup files, strip out the timestamp, and then convert it to a human&#xA;readable date.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/bin/ls &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep backup &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sed &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/configfile.backup.//&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -I &lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt; date -d @&lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;or just throw it to the date command by hand.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;date -d @1755895402&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-21 Notes</title>
    <id>https://waylonwalker.com/2025-08-21-notes/</id>
    <updated>2025-08-21T07:43:49Z</updated>
    <published>2025-08-21T07:43:49Z</published>
    <link href="https://waylonwalker.com/2025-08-21-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/-EYRzF0zp3U?si=mKCPlMDecrqzvjuF</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/-EYRzF0zp3U?si=mKCPlMDecrqzvjuF&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://youtu.be/-EYRzF0zp3U?si=mKCPlMDecrqzvjuF&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Is ai in 2025 like a Roomba vacuum?  The ads make it look fantastic but after some time it becomes worthless and needs constant monitoring.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtube.com/shorts/iIDVm_J-JxU?si=WRiLXASnXlqqidLi&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://youtube.com/shorts/iIDVm_J-JxU?si=WRiLXASnXlqqidLi&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;For some reason the first one has kinda stuck with me.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;You think youre thinking, but you’re mostly remembering. Your thoughts are just loops your nervous system finds familiar, your not making decisions, your repeating emotional echos.  Unless you interrupt the loop your future is your past in disguise.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ panphora overtype</title>
    <id>https://waylonwalker.com/panphora-overtype/</id>
    <updated>2025-08-21T00:47:17Z</updated>
    <published>2025-08-21T00:47:17Z</published>
    <link href="https://waylonwalker.com/panphora-overtype/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on overtype by panphora.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/panphora/overtype&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;overtype&lt;/a&gt; by &lt;a href=&#34;https://github.com/panphora&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;panphora&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The markdown editor that’s just a textarea &lt;a href=&#34;https://overtype.dev&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/overtype.dev.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/overtype.dev.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://overtype.dev&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-17 Notes</title>
    <id>https://waylonwalker.com/2025-08-17-notes/</id>
    <updated>2025-08-17T12:21:47Z</updated>
    <published>2025-08-17T12:21:47Z</published>
    <link href="https://waylonwalker.com/2025-08-17-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">After a long time I begrudgingly setup window rules for hyprland. What I wanted was the ability to log out and jump back into work with a freshened work...</summary>
    <content type="html">&lt;p&gt;After a long time I begrudgingly setup window rules for hyprland.  What I&#xA;wanted was the ability to log out and jump back into work with a freshened work&#xA;space.  Right now I’m running on low ram and disk on hyprland and sometimes I&#xA;need to just quit everything and get back to work quick.  So I setup exec-once&#xA;to start my terminal, browser, and chat.  These are my main applications that&#xA;run on my power fingers 456 (which are on a layer that present under jkl).  I&#xA;use them every time I log in and will need them no matter what I do.  When I&#xA;exec once them, they just dump onto one workspace, you can pick it but no&#xA;matter the timing, you end up with race conditions that end up with you on&#xA;different workspaces.&lt;/p&gt;&#xA;&lt;p&gt;So I setup window rules.  I avoided this for a long time, because of my&#xA;workflow on awesomewm, I thought this manual workspace selection was superior.&#xA;What I really think happened was that awesomewm was a little trickier for me to&#xA;figure out what things were named and to actually get the rules setup&#xA;correctly.&lt;/p&gt;&#xA;&lt;p&gt;hyprland makes this pretty simple with its great cli.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hyprctl clients -j &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; jq &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep class&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now that I can see attributes of these windows as I open them I can set up&#xA;rules for them to go onto the correct workspace, or to float them.  I have a&#xA;couple of things like a file picker coming from a browser showing up in the&#xA;tiled layout, when a file picker like this shows up, just cover everything up&#xA;its temporary, no need to squeeze it into the tiled layout.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;the file picker float also fixed an issue I had where they would not show up,&#xA;and lock up brave when its in full screen mode and I don’t realize it.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-conf&#34;&gt;windowrulev2 = workspace 1, class:^(steam)$&#xA;windowrulev2 = workspace 4, class:^(kitty)$&#xA;windowrulev2 = workspace 5, class:^(firefox)$&#xA;windowrulev2 = workspace 5, class:^(brave-browser)$&#xA;windowrulev2 = workspace 5, class:^(google-chrome)$&#xA;windowrulev2 = workspace 6, class:^(Signal)$&#xA;windowrulev2 = workspace 2, class:^(krita)$&#xA;windowrulev2 = workspace 8, class:^(brave-chat.openai.com__-Default)$&#xA;windowrulev2 = workspace 8, class:^(brave-youtube.com__-Default)$&#xA;windowrulev2 = float, class:^(org.pulseaudio.pavucontrol)$&#xA;windowrulev2 = workspace 9, class:^(org.prismlauncher.PrismLauncher)$&#xA;windowrulev2 = float, class:^(org.prismlauncher.PrismLauncher)$, title:^(Console window.*)&#xA;windowrulev2 = float, class:^(xdg-desktop-portal-gtk)$&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Wyatt Drew A Watertower In Aesprite</title>
    <id>https://waylonwalker.com/shots/wyatt-drew-a-watertower-in-aesprite/</id>
    <updated>2025-08-17T10:21:08Z</updated>
    <published>2025-08-17T10:21:08Z</published>
    <link href="https://waylonwalker.com/shots/wyatt-drew-a-watertower-in-aesprite/" rel="alternate" type="text/html"></link>
    <summary type="text">A post apocolptic water tower sitting on a rock drawn in blues and greens with moss hanging from it, including a rusty red top and legs. Drew by Wyatt.</summary>
    <content type="html">&lt;p&gt;Little dude has some talent.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/029b271a-a1dd-4951-a7ba-7124ddb00965.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/029b271a-a1dd-4951-a7ba-7124ddb00965.png&#34; alt=&#34;Wyatt drew a water tower in aesprite&#34;/ data-glightbox=&#34;description: Wyatt drew a water tower in aesprite&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A post apocalyptic water tower sitting on a rock drawn in blues and greens with moss hanging from it, including a rusty red top and legs.  Drew by Wyatt.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-16 Notes</title>
    <id>https://waylonwalker.com/2025-08-16-notes/</id>
    <updated>2025-08-16T10:07:21Z</updated>
    <published>2025-08-16T10:07:21Z</published>
    <link href="https://waylonwalker.com/2025-08-16-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">[x] remove nextcloud - [x] pause photoprism - [x] pause syncthing - [x] move data to walkershare - [x] filepermissions 1000:1000 all of it - [x] organize how...</summary>
    <content type="html">&lt;h2 id=&#34;&lt;a href=&#34;/homelab/&#34; class=&#34;glossary-term&#34; title=&#34;A place to self host applications. For me this is primarily self built web applications, and applications for sharing files with my family. Techno Tim has a...&#34;&gt;homelab&lt;/a&gt;-cleanup-day&#34;&gt;HomeLab cleanup day &lt;a href=&#34;#homelab-cleanup-day&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;/&gt; remove nextcloud&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;/&gt; pause photoprism&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;/&gt; pause syncthing&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;/&gt; move data to walkershare&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;/&gt; filepermissions 1000:1000 all of it&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;/&gt; organize how I want&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;/&gt; resume photoprism&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;/&gt; resume syncthing - update share locations&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;/&gt; expose to mac over smb&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;/&gt; ensure mac can write over smb&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;/&gt; expose to archlinux oversmb&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;/&gt; ensure archlinux can write over smb&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;/&gt; expose to syncthing over pvc&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;/&gt; expose to my terminal over pvc&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;wishlist&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;/&gt; Forgejo repos&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;/&gt; Forgejo runners&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;/&gt; explore moving from docker repository to repoflow&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-14 Notes</title>
    <id>https://waylonwalker.com/2025-08-14-notes/</id>
    <updated>2025-08-14T20:15:54Z</updated>
    <published>2025-08-14T20:15:54Z</published>
    <link href="https://waylonwalker.com/2025-08-14-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">Huge progress on shots not to be confused with shots inspired by . I&#39;m building out my own instagram grid design, right now its 4 wide, but I wonder if it...</summary>
    <content type="html">&lt;p&gt;Huge progress on &lt;a href=&#34;https://waylonwalker.com/shots/&#34;&gt;shots&lt;/a&gt; not to be confused&#xA;with &lt;a href=&#34;https://shots.waylonwalker.com&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/shots.waylonwalker.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/shots.waylonwalker.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;shots&lt;/a&gt; inspired by&#xA;&lt;a href=&#34;https://justin.searls.co/shots/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/justin.searls.co.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/justin.searls.co.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://justin.searls.co/shots/&lt;/a&gt;.  I’m building out my own instagram grid&#xA;design, right now its 4 wide, but I wonder if it should be 3 wide to match up&#xA;with the old instagram grid designs, and I could do cool crops like instagram&#xA;used to.&lt;/p&gt;&#xA;&lt;p&gt;I went through a bunch of old &lt;a href=&#34;/gratitude/&#34; class=&#34;wikilink&#34;&gt;gratitude&lt;/a&gt; posts and pulled images from all&#xA;of them, and update all of the images to use dropper while I was at it.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;More work after kids bed time and came up with a great concept that needs to go&#xA;into markata, yes its more configuration.  &lt;a href=&#34;/markata/&#34; class=&#34;wikilink&#34; data-title=&#34;markata&#34; data-description=&#34;This post is a work in progress.&#34; data-date=&#34;2024-05-30&#34; data-preview=&#34;This post is a work in progress.&#34;&gt;markata&lt;/a&gt; is quickly becoming&#xA;death by config.  What I wanted was the ability to make different cards&#xA;different sizes.&lt;/p&gt;&#xA;&lt;p&gt;What I came up with was adding “card_classes” to the front matter of the&#xA;markdown file.  This is a list of classes that will be added to the card div&#xA;when the card is rendered.  This way I can make cards different sizes.  Here&#xA;are a couple of good results I had.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/c946a174-ee0f-43fb-90d7-c6440c0ed708.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/c946a174-ee0f-43fb-90d7-c6440c0ed708.png&#34; alt=&#34;screenshot-2025-08-15T01-35-08-108Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-08-15T01-35-08-108Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A landscape shot of quarry lake&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/fe5ea8de-2d45-4b9b-966e-85d65cea6151.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/fe5ea8de-2d45-4b9b-966e-85d65cea6151.png&#34; alt=&#34;screenshot-2025-08-15T01-35-48-593Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-08-15T01-35-48-593Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;An image of Rhiannon and I at sunset&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;Made a bit of cyberbrink crane progress, glued in a few cables and put the cab&#xA;on top of the tower.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ vrtmrz obsidian-livesync</title>
    <id>https://waylonwalker.com/vrtmrz-obsidian-livesync/</id>
    <updated>2025-08-14T13:29:15Z</updated>
    <published>2025-08-14T13:29:15Z</published>
    <link href="https://waylonwalker.com/vrtmrz-obsidian-livesync/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on obsidian-livesync, created by vrtmrz.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/vrtmrz/obsidian-livesync&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;obsidian-livesync&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/vrtmrz&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vrtmrz&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ syncthing syncthing</title>
    <id>https://waylonwalker.com/syncthing-syncthing/</id>
    <updated>2025-08-14T03:47:05Z</updated>
    <published>2025-08-14T03:47:05Z</published>
    <link href="https://waylonwalker.com/syncthing-syncthing/" rel="alternate" type="text/html"></link>
    <summary type="text">I like syncthing&#39;s project syncthing.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/syncthing&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;syncthing’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/syncthing/syncthing&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;syncthing&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Open Source Continuous File Synchronization&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-13 Notes</title>
    <id>https://waylonwalker.com/2025-08-13-notes/</id>
    <updated>2025-08-13T21:23:24Z</updated>
    <published>2025-08-13T21:23:24Z</published>
    <link href="https://waylonwalker.com/2025-08-13-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">Inspired by Justin Searls Shots, I made started my own shots feed for self hosted Instagram style photos. The layout could use a lot of work, the feed seems...</summary>
    <content type="html">&lt;p&gt;Inspired by &lt;a href=&#34;https://justin.searls.co/shots/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/justin.searls.co.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/justin.searls.co.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Justin Searls Shots&lt;/a&gt;, I made&#xA;started &lt;a href=&#34;https://waylonwalker.com/shots/&#34;&gt;my own shots feed&lt;/a&gt; for &lt;a href=&#34;/self-host/&#34; class=&#34;glossary-term&#34; title=&#34;Self hosting is the act of hosting your own applications and services without using a SAS provider. This is typically done with your own hardware, but there...&#34;&gt;self hosted&lt;/a&gt;&#xA;Instagram style photos.  The layout could use a lot of work, the feed seems&#xA;like its breaking on rebuild due to some cache issues, but its there and kind&#xA;of works and eventually will get a proper prominently placed link, for now its&#xA;an idea for anyone who sees this.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/shots/&#34;&gt;https://waylonwalker.com/shots/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;By the way what a boss domain searls.co is.  I’ve seen Chris Coyier just got&#xA;&lt;a href=&#34;https://chriscoyier.net/2025/07/01/coyier-com/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/chriscoyier.net.jpg&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/chriscoyier.net.jpg&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;coyer.com&lt;/a&gt; and talked about&#xA;being able to use it as a family domain.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-12 Notes</title>
    <id>https://waylonwalker.com/2025-08-12-notes/</id>
    <updated>2025-08-12T16:46:31Z</updated>
    <published>2025-08-12T16:46:31Z</published>
    <link href="https://waylonwalker.com/2025-08-12-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">Sad day yesterday. We discovered that our freezer was left cracked over a day or so. Kids self serviced themselves to some sausage dogs at some point and...</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/3b6cadef-301b-4c90-9b06-4cbc1405bced.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/3b6cadef-301b-4c90-9b06-4cbc1405bced.jpg&#34; alt=&#34;17550430467561838968532746154870.jpg&#34;/ data-glightbox=&#34;description: 17550430467561838968532746154870.jpg&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Sad day yesterday.  We discovered that our freezer was left cracked over a day&#xA;or so.  Kids self serviced themselves to some sausage dogs at some point and&#xA;wedged the box in the door.  Everything was over 40F and done.&lt;/p&gt;&#xA;&lt;p&gt;Lessons learned for everyone.  For the kids, see something say something, food&#xA;should not come out of a freezer soft and barely fridge temp.  For the parents,&#xA;don’t get in a rush when loading the freezer.  If something doesn’t quite look&#xA;like it’s going to stay out, it probably won’t and next person to use it will&#xA;pay… Or you will pay when they don’t notice.  Last lesson for everyone, when&#xA;you come home late and tired from a family trip to Grandma’s and hear beeping&#xA;it’s probably important and investigate.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/4751d638-b056-42bd-bc5b-4a7e94e4569f.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/4751d638-b056-42bd-bc5b-4a7e94e4569f.jpg&#34; alt=&#34;17550498066131861258207337996278.jpg&#34;/ data-glightbox=&#34;description: 17550498066131861258207337996278.jpg&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;I need some more ram… Was waiting out prime day, prices went up and haven’t&#xA;gone down.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://forgejo.org/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/forgejo.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/forgejo.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;forgejo&lt;/a&gt; is pretty dope, played with it for awhile today&#xA;locally, create repos with curl, &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; push, actions working with multiple&#xA;runners.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>trying forgejo</title>
    <id>https://waylonwalker.com/trying-forgejo/</id>
    <updated>2025-08-12T11:57:42Z</updated>
    <published>2025-08-12T11:57:42Z</published>
    <link href="https://waylonwalker.com/trying-forgejo/" rel="alternate" type="text/html"></link>
    <summary type="text">WIP</summary>
    <content type="html">&lt;p&gt;WIP&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;networks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;forgejo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;external&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;services&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;codeberg.org/forgejo/forgejo:11&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;container_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;forgejo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;USER_UID=1000&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;USER_GID=1000&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;restart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;always&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;networks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;forgejo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;./forgejo:/data&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;s1&#34;&gt;&amp;#39;3000:3000&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;s1&#34;&gt;&amp;#39;2222:22&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;docker-in-docker&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;docker:dind&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;container_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;docker_dind&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;privileged&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;dockerd&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;-H&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;tcp://0.0.0.0:2375&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;--tls=false&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;restart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;unless-stopped&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;networks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;l&#34;&gt;forgejo]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;runner&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data.forgejo.org/forgejo/runner:4.0.0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;container_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;forgejo-runner&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;1001:1001&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;depends_on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;docker-in-docker&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;DOCKER_HOST&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;tcp://docker-in-docker:2375&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;./runner-data:/data:Z,U&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# will hold .runner + cache&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;/bin/sh -c &amp;#34;while :; do sleep 1; done&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;restart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;unless-stopped&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;networks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;l&#34;&gt;forgejo]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pythops impala</title>
    <id>https://waylonwalker.com/pythops-impala/</id>
    <updated>2025-08-10T17:53:51Z</updated>
    <published>2025-08-10T17:53:51Z</published>
    <link href="https://waylonwalker.com/pythops-impala/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out pythops and their project impala.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/pythops&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pythops&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/pythops/impala&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;impala&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;🛜 TUI for managing wifi on Linux&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ yarrick iodine</title>
    <id>https://waylonwalker.com/yarrick-iodine/</id>
    <updated>2025-08-10T17:09:19Z</updated>
    <published>2025-08-10T17:09:19Z</published>
    <link href="https://waylonwalker.com/yarrick-iodine/" rel="alternate" type="text/html"></link>
    <summary type="text">iodine by yarrick is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/yarrick/iodine&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;iodine&lt;/a&gt; by &lt;a href=&#34;https://github.com/yarrick&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;yarrick&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;Official &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; repo for iodine dns tunnel&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Termix-SSH Termix</title>
    <id>https://waylonwalker.com/termix-ssh-termix/</id>
    <updated>2025-08-09T14:50:37Z</updated>
    <published>2025-08-09T14:50:37Z</published>
    <link href="https://waylonwalker.com/termix-ssh-termix/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered Termix by Termix-SSH, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/Termix-SSH/Termix&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Termix&lt;/a&gt; by &lt;a href=&#34;https://github.com/Termix-SSH&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Termix-SSH&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;Termix is a web-based server management platform with SSH terminal, tunneling, and file editing capabilities.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-08 Notes</title>
    <id>https://waylonwalker.com/2025-08-08-notes/</id>
    <updated>2025-08-08T19:28:06Z</updated>
    <published>2025-08-08T19:28:06Z</published>
    <link href="https://waylonwalker.com/2025-08-08-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">I found this post from miriam.codes while reading dbushell&#39;s notes. I kinda agree with Miriam and David here. AI is really making me feel like an old...</summary>
    <content type="html">&lt;h2 id=&#34;this-web-aint-what-it-used-to-be&#34;&gt;This Web ain’t what it used to be &lt;a href=&#34;#this-web-aint-what-it-used-to-be&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I found this &lt;a href=&#34;https://bsky.app/profile/miriam.codes/post/3lvuib52f7222&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/bsky.app.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/bsky.app.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;post&lt;/a&gt;&#xA;from &lt;a href=&#34;https://miriam.codes&#34;&gt;miriam.codes&lt;/a&gt; while reading &lt;a href=&#34;https://dbushell.com/notes/2025-08-08T05:38Z/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/dbushell.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/dbushell.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dbushell’s&#xA;notes&lt;/a&gt;.  I kinda agree with&#xA;Miriam and David here.  AI is really making me feel like an old curmudgeon.&#xA;Every day it gets more enshitified, filled with more nonsense, more hate, more&#xA;“fake news” which all news gets labeled as these days, nothing is credible to&#xA;anyone anymore.&lt;/p&gt;&#xA;&lt;p&gt;What I’m here for is still plugging away at my own site, trying harder than&#xA;ever to find real people with real websites, who write real content that I&#xA;enjoy.  I’m going to continue staying in my lane, making notes that no one will&#xA;read, leaving thoughts no one will read, writing blog posts that might reach&#xA;10s of people who really care.&lt;/p&gt;&#xA;&lt;p&gt;YouTube still feels like a safe place.  I see more and  more &lt;a href=&#34;/ai-slop/&#34; class=&#34;glossary-term&#34; title=&#34;AI slop is unwanted AI content, generally shared by someone who did not review the output and is considered highly offensive and rude.&#34;&gt;AI slop&lt;/a&gt; popping up&#xA;and off, but it doesn’t hit my feed, happy for that so far.  I do see a lot of&#xA;creators using AI thumbnails, Most look obvious, but some feel like uncanny&#xA;faces of the people I follow and it’s weird.  I think I follow the exact&#xA;average of the 2025 YT watcher, I watch a handful of the top 100 channels, and&#xA;a bunch of sub 1M average joes.  These all feel like people just sharing their&#xA;story.  A lot of them have Orange County Choppers Season 1 vibes, we are just&#xA;making good content about trying to make it in the world.  They haven’t yet&#xA;descended into the madness that OCC became in its later seasons that was all&#xA;about building drama that tore the family apart.&lt;/p&gt;&#xA;&lt;h2 id=&#34;moss-knight-from-a-hrefhollow-knight-home-row-layout-classwikilink-data-titlehollow-knight-home-row-layout-data-descriptioni-just-made-it-past-100-in-my-main-hollow-knight-run-so-now-i-will-allow-myself-to-get-silksong-when-it-comes-out-i-did-this-with-a-little-bit-of-yt-data-date2025-05-05hollow-knight-home-row-layouta&#34;&gt;Moss Knight from &lt;a href=&#34;/hollow-knight-home-row-layout/&#34; class=&#34;wikilink&#34; data-title=&#34;hollow knight home row layout&#34; data-description=&#34;I just made it past 100% in my main hollow knight run, so now I will allow myself to get silksong when it comes out. I did this with a little bit of YT...&#34; data-date=&#34;2025-05-05&#34; data-preview=&#34;I just made it past 100% in my main hollow knight run, so now I will allow myself to get silksong when it comes out. I did this with a little bit of YT...&#34;&gt;hollow knight home row layout&lt;/a&gt; &lt;a href=&#34;#moss-knight-from-a-hrefhollow-knight-home-row-layout-classwikilink-data-titlehollow-knight-home-row-layout-data-descriptioni-just-made-it-past-100-in-my-main-hollow-knight-run-so-now-i-will-allow-myself-to-get-silksong-when-it-comes-out-i-did-this-with-a-little-bit-of-yt-data-date2025-05-05hollow-knight-home-row-layouta&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I took a break for awhile on the game, my son got bored and moved on.  He tends&#xA;to switch out games a lot faster than me.  I came back to it tonight after a&#xA;few months off and just got some geo from the moss knights for awhile.  I got&#xA;this decent clip of clearing them, I’m no pro, but getting better at timing on&#xA;the keeb layout.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/d8571451-7a1e-4997-85eb-b5ce2cfdc209.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/d8571451-7a1e-4997-85eb-b5ce2cfdc209.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/d8571451-7a1e-4997-85eb-b5ce2cfdc209.mp4&#34; type=&#34;video/mp4&#34;&gt;hollow-knight-keeb-moss-knight.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;cyberbrick-crane-progress&#34;&gt;Cyberbrick Crane Progress &lt;a href=&#34;#cyberbrick-crane-progress&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Made some progress on the cyberbrick crane that I am building with Wyatt.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/038e01d4-d2c8-4635-83d2-43a04c076ab6.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/038e01d4-d2c8-4635-83d2-43a04c076ab6.png&#34; alt=&#34;screenshot-2025-08-09T01-11-50-464Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-08-09T01-11-50-464Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nwg-piotr nwg-look</title>
    <id>https://waylonwalker.com/nwg-piotr-nwg-look/</id>
    <updated>2025-08-08T15:04:28Z</updated>
    <published>2025-08-08T15:04:28Z</published>
    <link href="https://waylonwalker.com/nwg-piotr-nwg-look/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on nwg-look, created by nwg-piotr.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/nwg-piotr/nwg-look&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nwg-look&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/nwg-piotr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nwg-piotr&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;GTK3 settings editor adapted to work in the wlroots environment&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-08-05 Notes</title>
    <id>https://waylonwalker.com/2025-08-05-notes/</id>
    <updated>2025-08-05T09:00:57Z</updated>
    <published>2025-08-05T09:00:57Z</published>
    <link href="https://waylonwalker.com/2025-08-05-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">Yesterday I started building out some qrcode tooling for myself starting with qrcode.waylonwalker.com. This is part of my tinyapps project.</summary>
    <content type="html">&lt;p&gt;Yesterday I started building out some qrcode tooling for myself starting with&#xA;&lt;a href=&#34;https://qrcode.waylonwalker.com/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/qrcode.waylonwalker.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/qrcode.waylonwalker.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;qrcode.waylonwalker.com&lt;/a&gt;.  This is part of&#xA;my &lt;a href=&#34;/tinyapps/&#34; class=&#34;wikilink&#34; data-title=&#34;tinyapps&#34; data-description=&#34;I&amp;#39;m working on replacing my usage of google inline search apps with real apps, these are ones that I create and host on my own homelab. The first three that...&#34; data-date=&#34;2025-05-22&#34; data-preview=&#34;I&amp;#39;m working on replacing my usage of google inline search apps with real apps, these are ones that I create and host on my own homelab. The first three that...&#34;&gt;tinyapps&lt;/a&gt; project.&lt;/p&gt;&#xA;&lt;p&gt;Also dug into &lt;a href=&#34;/qr-codes-in-python/&#34; class=&#34;wikilink&#34; data-title=&#34;qr codes in python&#34; data-description=&#34;I have a couple of use cases for simple qr codes in python coming up. One is for blog posts, the other is for auth into a new server application logged to a...&#34; data-date=&#34;2025-08-05&#34; data-preview=&#34;I have a couple of use cases for simple qr codes in python coming up. One is for blog posts, the other is for auth into a new server application logged to a...&#34;&gt;qr codes in python&lt;/a&gt; to try to get some easy and small&#xA;qrcodes that I could add to my blog posts for others who find a post on desktop&#xA;and want to open on mobile.&lt;/p&gt;&#xA;&lt;p&gt;This is what I am going for with qrcodes on my blog posts.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/29b54d73-d4bc-4505-85f4-1b303f7e7bcc.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/29b54d73-d4bc-4505-85f4-1b303f7e7bcc.png&#34; alt=&#34;screenshot-2025-08-05T14-45-25-598Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-08-05T14-45-25-598Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;If you want fancier qrcodes check out &lt;a href=&#34;https://mydigitalharbor.com/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/mydigitalharbor.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/mydigitalharbor.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://mydigitalharbor.com/&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>qr codes in python</title>
    <id>https://waylonwalker.com/qr-codes-in-python/</id>
    <updated>2025-08-05T08:32:12Z</updated>
    <published>2025-08-05T08:32:12Z</published>
    <link href="https://waylonwalker.com/qr-codes-in-python/" rel="alternate" type="text/html"></link>
    <summary type="text">I have a couple of use cases for simple qr codes in python coming up. One is for blog posts, the other is for auth into a new server application logged to a...</summary>
    <content type="html">&lt;p&gt;I have a couple of use cases for simple qr codes in python coming up.  One is&#xA;for blog posts, the other is for auth into a new server application logged to a&#xA;terminal.  I tried the &lt;a href=&#34;https://pypi.org/project/qrcode/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/pypi.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/pypi.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;&lt;code&gt;qrcode&lt;/code&gt;&lt;/a&gt; library&#xA;and it does not look as nice to me and I found&#xA;&lt;a href=&#34;https://pypi.org/project/pyqrcode/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/pypi.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/pypi.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;&lt;code&gt;pyqrcode&lt;/code&gt;&lt;/a&gt; to be quite nice.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;import pyqrcode&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;url&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; pyqrcode.create&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https://waylonwalker.com/qr-codes-in-python&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;url.svg&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;qr-codes-in-python.svg&amp;#39;&lt;/span&gt;, &lt;span class=&#34;nv&#34;&gt;scale&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;8&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;print&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;url.terminal&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;quiet_zone&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;1&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;url.svg&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;qr-codes-in-python.svg&amp;#39;&lt;/span&gt;, &lt;span class=&#34;nv&#34;&gt;scale&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;12&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;url.svg&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;qr-codes-in-python.svg&amp;#39;&lt;/span&gt;, &lt;span class=&#34;nv&#34;&gt;omithw&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;True&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# width is controlled by the container&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;url.svg&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;qr-codes-in-python.svg&amp;#39;&lt;/span&gt;, &lt;span class=&#34;nv&#34;&gt;omithw&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;True, &lt;span class=&#34;nv&#34;&gt;module_color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#ffd119&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;url.svg&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;qr-codes-in-python.svg&amp;#39;&lt;/span&gt;, &lt;span class=&#34;nv&#34;&gt;omithw&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;True, &lt;span class=&#34;nv&#34;&gt;module_color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#ff69b4&amp;#39;&lt;/span&gt;, &lt;span class=&#34;nv&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#2b034c&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;result&#34;&gt;result &lt;a href=&#34;#result&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is the final svg result.&lt;/p&gt;&#xA;&lt;!--?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?--&gt;&#xA;&lt;p&gt;&lt;svg xmlns=&#34;http://www.w3.org/2000/svg&#34; viewBox=&#34;0 0 45 45&#34; class=&#34;pyqrcode&#34;&gt;&lt;path fill=&#34;#2b034c&#34; d=&#34;M0 0h45v45h-45z&#34;&gt;&lt;/path&gt;&lt;path stroke=&#34;#ff69b4&#34; class=&#34;pyqrline&#34; d=&#34;M4 4.5h7m2 0h1m1 0h3m3 0h3m5 0h2m3 0h7m-37 1h1m5 0h1m1 0h2m3 0h1m3 0h1m2 0h2m2 0h2m2 0h1m1 0h1m5 0h1m-37 1h1m1 0h3m1 0h1m1 0h1m2 0h2m1 0h2m1 0h1m1 0h1m1 0h1m2 0h2m2 0h1m1 0h1m1 0h3m1 0h1m-37 1h1m1 0h3m1 0h1m1 0h1m1 0h1m2 0h1m1 0h2m1 0h1m3 0h6m2 0h1m1 0h3m1 0h1m-37 1h1m1 0h3m1 0h1m1 0h1m1 0h1m1 0h2m1 0h1m2 0h1m1 0h2m1 0h1m2 0h1m1 0h1m1 0h1m1 0h3m1 0h1m-37 1h1m5 0h1m1 0h5m2 0h1m2 0h1m3 0h1m1 0h1m3 0h1m1 0h1m5 0h1m-37 1h7m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h1m1 0h7m-27 1h2m1 0h1m1 0h1m4 0h3m4 0h2m-27 1h1m2 0h5m2 0h2m1 0h4m1 0h5m3 0h2m1 0h5m-36 1h1m7 0h2m2 0h1m1 0h5m4 0h3m1 0h5m1 0h2m1 0h1m-37 1h2m1 0h1m2 0h6m1 0h7m1 0h1m1 0h2m2 0h4m1 0h1m1 0h1m1 0h1m-37 1h1m1 0h1m2 0h1m1 0h1m2 0h3m1 0h1m2 0h2m1 0h1m1 0h2m2 0h1m1 0h1m2 0h3m1 0h2m-34 1h1m2 0h1m2 0h1m1 0h1m3 0h1m1 0h1m1 0h2m3 0h1m2 0h2m1 0h1m2 0h1m1 0h2m-33 1h1m3 0h2m1 0h2m1 0h4m2 0h3m1 0h1m1 0h6m2 0h1m1 0h1m-37 1h1m1 0h1m1 0h6m1 0h1m1 0h1m1 0h2m1 0h4m3 0h1m1 0h1m2 0h1m2 0h2m1 0h1m-35 1h1m1 0h2m1 0h3m1 0h2m1 0h1m1 0h1m1 0h3m3 0h1m1 0h1m1 0h6m1 0h1m-36 1h1m3 0h1m1 0h1m4 0h2m6 0h1m1 0h2m5 0h1m1 0h1m4 0h1m-36 1h4m3 0h3m2 0h1m1 0h3m3 0h1m1 0h1m1 0h5m1 0h2m1 0h2m1 0h1m-35 1h1m2 0h2m1 0h2m2 0h3m8 0h2m2 0h5m1 0h2m1 0h1m-35 1h4m1 0h1m1 0h1m1 0h1m1 0h1m7 0h2m1 0h1m1 0h1m1 0h2m1 0h3m1 0h2m-37 1h3m1 0h3m1 0h1m1 0h2m3 0h1m1 0h3m2 0h1m1 0h1m3 0h1m1 0h1m2 0h1m1 0h1m-36 1h1m1 0h2m1 0h1m4 0h1m2 0h1m1 0h2m1 0h1m2 0h1m1 0h1m1 0h1m1 0h1m1 0h3m1 0h2m1 0h1m-37 1h1m1 0h1m1 0h1m1 0h1m2 0h2m1 0h4m1 0h3m1 0h3m3 0h6m2 0h2m-35 1h2m1 0h1m1 0h2m1 0h2m3 0h3m4 0h1m3 0h2m3 0h1m1 0h1m1 0h2m-37 1h4m1 0h2m4 0h2m1 0h4m1 0h1m4 0h1m5 0h2m1 0h1m1 0h2m-36 1h3m3 0h5m1 0h1m1 0h1m1 0h1m1 0h2m1 0h1m1 0h1m2 0h4m3 0h1m1 0h1m-37 1h4m1 0h2m1 0h3m1 0h1m3 0h3m2 0h1m2 0h1m2 0h1m1 0h3m2 0h1m1 0h1m-33 1h1m6 0h1m2 0h6m2 0h3m1 0h1m2 0h5m2 0h1m-37 1h5m1 0h6m1 0h1m6 0h1m1 0h1m5 0h6m-26 1h1m1 0h1m1 0h1m1 0h1m2 0h2m2 0h1m1 0h2m3 0h1m3 0h2m1 0h2m-37 1h7m1 0h1m1 0h5m2 0h2m1 0h1m1 0h2m2 0h1m1 0h1m1 0h1m1 0h3m1 0h1m-37 1h1m5 0h1m1 0h2m1 0h1m1 0h1m1 0h2m2 0h2m3 0h1m3 0h1m3 0h2m1 0h1m-36 1h1m1 0h3m1 0h1m3 0h1m2 0h1m2 0h2m1 0h3m1 0h2m1 0h7m2 0h2m-37 1h1m1 0h3m1 0h1m4 0h1m2 0h2m1 0h1m1 0h1m1 0h1m6 0h1m3 0h3m1 0h1m-37 1h1m1 0h3m1 0h1m1 0h1m1 0h1m1 0h4m1 0h1m1 0h7m1 0h2m2 0h2m2 0h2m-37 1h1m5 0h1m3 0h4m1 0h2m2 0h2m1 0h3m3 0h1m2 0h1m1 0h1m-34 1h7m4 0h2m1 0h1m3 0h2m4 0h1m3 0h1m1 0h1m2 0h1m2 0h1&#34;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/p&gt;&#xA;&lt;p&gt;Here is what it looks like in the terminal.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/c644bd34-b5da-48a3-b6cf-c89efb546114.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/c644bd34-b5da-48a3-b6cf-c89efb546114.png&#34; alt=&#34;screenshot-2025-08-05T13-53-17-368Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-08-05T13-53-17-368Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;If you want fancier qrcodes check out &lt;a href=&#34;https://mydigitalharbor.com/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/mydigitalharbor.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/mydigitalharbor.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://mydigitalharbor.com/&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ rushter selectolax</title>
    <id>https://waylonwalker.com/rushter-selectolax/</id>
    <updated>2025-08-04T13:45:54Z</updated>
    <published>2025-08-04T13:45:54Z</published>
    <link href="https://waylonwalker.com/rushter-selectolax/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on selectolax, created by rushter.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/rushter/selectolax&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;selectolax&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/rushter&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rushter&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Python binding to Modest and Lexbor engines (fast HTML5 parser with CSS selectors).&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ rqlite rqlite</title>
    <id>https://waylonwalker.com/rqlite-rqlite/</id>
    <updated>2025-08-04T01:17:07Z</updated>
    <published>2025-08-04T01:17:07Z</published>
    <link href="https://waylonwalker.com/rqlite-rqlite/" rel="alternate" type="text/html"></link>
    <summary type="text">I like rqlite&#39;s project rqlite.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/rqlite&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rqlite’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/rqlite/rqlite&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rqlite&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The lightweight, user-friendly, distributed relational database built on SQLite.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Dolphin Remote Storage Previews</title>
    <id>https://waylonwalker.com/dolphin-remote-storage-previews/</id>
    <updated>2025-08-02T14:58:09Z</updated>
    <published>2025-08-02T14:58:09Z</published>
    <link href="https://waylonwalker.com/dolphin-remote-storage-previews/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve got a few samba shares going in my homelab, and I&#39;m struggling finding a great app to scroll through vacation photos with my wife. I want something...</summary>
    <content type="html">&lt;p&gt;I’ve got a few samba shares going in my &lt;a href=&#34;/homelab/&#34; class=&#34;glossary-term&#34; title=&#34;A place to self host applications. For me this is primarily self built web applications, and applications for sharing files with my family. Techno Tim has a...&#34;&gt;homelab&lt;/a&gt;, and I’m struggling finding a&#xA;great app to scroll through vacation photos with my wife.  I want something&#xA;intuitive, non intimidating, and just works.  Turns out that the default file&#xA;browser application for hyprland works great, but you need to enable previews&#xA;for remote storage for it to work for my use case here.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/3940267e-3727-4e7b-8f7f-aebb49d79326.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/3940267e-3727-4e7b-8f7f-aebb49d79326.png&#34; alt=&#34;3940267e-3727-4e7b-8f7f-aebb49d79326.png&#34;/ data-glightbox=&#34;description: 3940267e-3727-4e7b-8f7f-aebb49d79326.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Homelab Update Jul 2025</title>
    <id>https://waylonwalker.com/shots/homelab-update-jul-2025/</id>
    <updated>2025-07-28T08:19:37Z</updated>
    <published>2025-07-28T08:19:37Z</published>
    <link href="https://waylonwalker.com/shots/homelab-update-jul-2025/" rel="alternate" type="text/html"></link>
    <summary type="text">Basement shelf with 3 computers, a network switch, an uninterubptable power supply, one monitor underneath, and a wifi access point to the right.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/32ea8118-9ec5-4865-b3b4-8ccd14f23268.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/32ea8118-9ec5-4865-b3b4-8ccd14f23268.jpg&#34; alt=&#34;Homelab update Jul 2025&#34;/ data-glightbox=&#34;description: Homelab update Jul 2025&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Basement shelf with 3 computers, a network switch, an uninterubptable power supply, one monitor underneath, and a wifi access point to the right.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-27 Notes</title>
    <id>https://waylonwalker.com/2025-07-27-notes/</id>
    <updated>2025-07-27T01:25:33Z</updated>
    <published>2025-07-27T01:25:33Z</published>
    <link href="https://waylonwalker.com/2025-07-27-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">Today Wyatt and I conquered cathulu in Cat quest III.</summary>
    <content type="html">&lt;p&gt;Today Wyatt and I conquered cathulu in Cat quest III.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/b64aacf2-5f33-4f68-be93-469c4139c192.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/b64aacf2-5f33-4f68-be93-469c4139c192.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/b64aacf2-5f33-4f68-be93-469c4139c192.mp4&#34; type=&#34;video/mp4&#34;&gt;cathulu.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Which then lead us to finish Mama Milk’s quest line.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/418e5653-4322-4e43-beda-c11db711d4bf.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/418e5653-4322-4e43-beda-c11db711d4bf.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/418e5653-4322-4e43-beda-c11db711d4bf.mp4&#34; type=&#34;video/mp4&#34;&gt;mama-milk.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;archlinux-btw-devtainer&#34;&gt;archlinux BTW devtainer &lt;a href=&#34;#archlinux-btw-devtainer&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Made some progress on moving my devtainer back from ubuntu to arch, it’s&#xA;somewhat pertinent because a few of the things I use are now outdated and I&#xA;just want to use a package manager and not have to build things from scratch.&lt;/p&gt;&#xA;&lt;h2 id=&#34;kubernetes-development-environment&#34;&gt;Kubernetes Development Environment &lt;a href=&#34;#kubernetes-development-environment&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I also setup a dev environment in kubernetes, already using this new arch&#xA;image, its great so far, writing this post from it.&lt;/p&gt;&#xA;&lt;p&gt;As a challenge how much of my workflow could be done from kubernetes, docker&#xA;build, and run would be hard, but I bet I could come up with something.  The&#xA;clipboard part of my workflow would need a major change, especially for&#xA;grabbing previous terminal outputs.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>blender donut tutorial 2025</title>
    <id>https://waylonwalker.com/blender-donut-tutorial-2025/</id>
    <updated>2025-07-25T08:29:27Z</updated>
    <published>2025-07-25T08:29:27Z</published>
    <link href="https://waylonwalker.com/blender-donut-tutorial-2025/" rel="alternate" type="text/html"></link>
    <summary type="text">_</summary>
    <content type="html">&lt;h2 id=&#34;first-launch&#34;&gt;First Launch &lt;a href=&#34;#first-launch&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/ecd7349a-b04c-4496-8b34-3f2c82bdd790.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/ecd7349a-b04c-4496-8b34-3f2c82bdd790.png&#34; alt=&#34;screenshot-2025-07-25T13-29-06-029Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-07-25T13-29-06-029Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;my-setup&#34;&gt;my setup &lt;a href=&#34;#my-setup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/0baedcf5-9b6a-4ee3-b18f-76e695e00a8c.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/0baedcf5-9b6a-4ee3-b18f-76e695e00a8c.png&#34; alt=&#34;screenshot-2025-07-25T13-30-22-340Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-07-25T13-30-22-340Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;add&#34;&gt;Add &lt;a href=&#34;#add&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;shift A&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;bump-resolution-scale&#34;&gt;bump resolution scale &lt;a href=&#34;#bump-resolution-scale&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;edit -&amp;gt; preferences -&amp;gt; interface -&amp;gt; resolution scale 1.25&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/d2c9fc7c-c689-4f6f-b2db-96bd8bb59ab3.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/d2c9fc7c-c689-4f6f-b2db-96bd8bb59ab3.png&#34; alt=&#34;screenshot-2025-07-25T13-35-20-580Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-07-25T13-35-20-580Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;orbit-without-middle-mouse-button&#34;&gt;orbit without middle mouse button &lt;a href=&#34;#orbit-without-middle-mouse-button&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/239a709b-7242-4a75-b100-f3a8cc533364.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/239a709b-7242-4a75-b100-f3a8cc533364.png&#34; alt=&#34;screenshot-2025-07-25T13-36-32-690Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-07-25T13-36-32-690Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;viewport-shading-rendered&#34;&gt;viewport shading rendered &lt;a href=&#34;#viewport-shading-rendered&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/cea5c464-53b2-4926-ab02-31107d84d23f.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/cea5c464-53b2-4926-ab02-31107d84d23f.png&#34; alt=&#34;screenshot-2025-07-25T13-37-52-174Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-07-25T13-37-52-174Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-24 Notes</title>
    <id>https://waylonwalker.com/2025-07-24-notes/</id>
    <updated>2025-07-24T20:58:17Z</updated>
    <published>2025-07-24T20:58:17Z</published>
    <link href="https://waylonwalker.com/2025-07-24-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">Completed the 8-bit dungeon in Cat Quest III with wyatt today.</summary>
    <content type="html">&lt;p&gt;Completed the 8-bit dungeon in Cat Quest III with &lt;a href=&#34;https://wyattbubbylee.com&#34;&gt;wyatt&lt;/a&gt; today.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/7fa41850-8303-4f7c-9a09-0ed05ef13139.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/7fa41850-8303-4f7c-9a09-0ed05ef13139.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/7fa41850-8303-4f7c-9a09-0ed05ef13139.mp4&#34; type=&#34;video/mp4&#34;&gt;8-bit-dungeon.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-23 Notes</title>
    <id>https://waylonwalker.com/2025-07-23-notes/</id>
    <updated>2025-07-23T20:37:04Z</updated>
    <published>2025-07-23T20:37:04Z</published>
    <link href="https://waylonwalker.com/2025-07-23-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I set up hypridle on my hyprland desktop build. It was not too bad, I&#39;m probably going to tweak it as it I go if it bothers me, for now I&#39;m giving it a...</summary>
    <content type="html">&lt;p&gt;Today I set up hypridle on my hyprland desktop build.  It was not too bad, I’m&#xA;probably going to tweak it as it I go if it bothers me, for now I’m giving it a&#xA;shot.  My monitor is sometimes a PITA to get to wake up, that is my main&#xA;concern.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;paru -S hypridle&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here is the config I landed on.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-conf&#34;&gt;# dim screen&#xA;general {&#xA;    lock_cmd = pidof hyprlock || hyprlock       # avoid starting multiple hyprlock instances.&#xA;    before_sleep_cmd = loginctl lock-session    # lock before suspend.&#xA;    after_sleep_cmd = hyprctl dispatch dpms on &amp;amp;&amp;amp; ddcutil setvcp 10 100  # to avoid having to press a key twice to turn on the display.&#xA;}&#xA;&#xA;listener {&#xA;    timeout = 120                            # in seconds.&#xA;    on-timeout = ddcutil setvcp 10 5 # command to run when timeout has passed.&#xA;    on-resume = ddcutil setvcp 10 100  # command to run when activity is detected after timeout has fired.&#xA;}&#xA;&#xA;# screen off&#xA;listener {&#xA;    timeout = 3600&#xA;    on-timeout = hyprctl dispatch dpms off&#xA;    on-resume = hyprctl dispatch dpms on&#xA;}&#xA;&#xA;# warning screen is about to go off&#xA;listener {&#xA;    timeout = 315                            # in seconds.&#xA;    on-timeout = notify-send &amp;#34;You are idle!&amp;#34; # command to run when timeout has passed.&#xA;}&#xA;&#xA;listener {&#xA;    timeout = 330                            # in seconds.&#xA;    on-timeout = loginctl lock-session&#xA;}&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;learned about &lt;code&gt;walker&lt;/code&gt; launcher and &lt;code&gt;wev&lt;/code&gt; wayland event debgugger.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;Ended the day destroying the duck of doom in cat quest III.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/5ee1296c-7bf9-485a-9e94-d5c30310af95.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/5ee1296c-7bf9-485a-9e94-d5c30310af95.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/5ee1296c-7bf9-485a-9e94-d5c30310af95.mp4&#34; type=&#34;video/mp4&#34;&gt;duck-of-doom.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-22 Notes</title>
    <id>https://waylonwalker.com/2025-07-22-notes/</id>
    <updated>2025-07-22T08:01:51Z</updated>
    <published>2025-07-22T08:01:51Z</published>
    <link href="https://waylonwalker.com/2025-07-22-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">Next I ripped a calendar from the docs. When hovered I get a full year calendar, right click gives me only the current month.</summary>
    <content type="html">&lt;h2 id=&#34;waybar-ricing&#34;&gt;Waybar ricing &lt;a href=&#34;#waybar-ricing&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;format&amp;#34;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;{:%a %b %d %I:%M %p}&amp;#34;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Next I ripped a calendar from the docs.  When hovered I get a full year&#xA;calendar, right click gives me only the current month.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;clock&amp;#34;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;format&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;{:%a %b %d %I:%M %p}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;format-alt&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;{:%A, %B %d, %Y (%R)}  &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;tooltip-format&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;tt&amp;gt;&amp;lt;small&amp;gt;{calendar}&amp;lt;/small&amp;gt;&amp;lt;/tt&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;calendar&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              &lt;span class=&#34;nt&#34;&gt;&amp;#34;mode&amp;#34;&lt;/span&gt;          &lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;year&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              &lt;span class=&#34;nt&#34;&gt;&amp;#34;mode-mon-col&amp;#34;&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              &lt;span class=&#34;nt&#34;&gt;&amp;#34;weeks-pos&amp;#34;&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;right&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              &lt;span class=&#34;nt&#34;&gt;&amp;#34;on-scroll&amp;#34;&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              &lt;span class=&#34;nt&#34;&gt;&amp;#34;format&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                          &lt;span class=&#34;nt&#34;&gt;&amp;#34;months&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;     &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;span color=&amp;#39;#ffead3&amp;#39;&amp;gt;&amp;lt;b&amp;gt;{}&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                          &lt;span class=&#34;nt&#34;&gt;&amp;#34;days&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;       &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;span color=&amp;#39;#ecc6d9&amp;#39;&amp;gt;&amp;lt;b&amp;gt;{}&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                          &lt;span class=&#34;nt&#34;&gt;&amp;#34;weeks&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;      &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;span color=&amp;#39;#99ffdd&amp;#39;&amp;gt;&amp;lt;b&amp;gt;W{}&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                          &lt;span class=&#34;nt&#34;&gt;&amp;#34;weekdays&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;   &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;span color=&amp;#39;#ffcc66&amp;#39;&amp;gt;&amp;lt;b&amp;gt;{}&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                          &lt;span class=&#34;nt&#34;&gt;&amp;#34;today&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;      &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;span color=&amp;#39;#ff6699&amp;#39;&amp;gt;&amp;lt;b&amp;gt;&amp;lt;u&amp;gt;{}&amp;lt;/u&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;/span&amp;gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                          &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;actions&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              &lt;span class=&#34;nt&#34;&gt;&amp;#34;on-click-right&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;mode&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              &lt;span class=&#34;nt&#34;&gt;&amp;#34;on-scroll-up&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;tz_up&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              &lt;span class=&#34;nt&#34;&gt;&amp;#34;on-scroll-down&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;tz_down&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              &lt;span class=&#34;nt&#34;&gt;&amp;#34;on-scroll-up&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;shift_up&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              &lt;span class=&#34;nt&#34;&gt;&amp;#34;on-scroll-down&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;shift_down&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I still want to change up the colors, but I’m happy with the usefulness of this&#xA;for now.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/a4fb1285-2830-4ccd-a974-347d0acf5fd5.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/a4fb1285-2830-4ccd-a974-347d0acf5fd5.png&#34; alt=&#34;screenshot-2025-07-22T13-01-20-275Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-07-22T13-01-20-275Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-21 Notes</title>
    <id>https://waylonwalker.com/2025-07-21-notes/</id>
    <updated>2025-07-21T20:30:21Z</updated>
    <published>2025-07-21T20:30:21Z</published>
    <link href="https://waylonwalker.com/2025-07-21-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">In my adventure to rice out hyprland I set up a sddm theme today, and it looks sick by only changing the wallpaper. I tried out one theme and was pretty...</summary>
    <content type="html">&lt;p&gt;In my adventure to rice out hyprland I set up a sddm theme today, and it looks&#xA;sick by only changing the wallpaper.  I tried out one theme and was pretty&#xA;happy with the results.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/f89bc45e-aa10-473e-ae7b-85c0813850c6.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/f89bc45e-aa10-473e-ae7b-85c0813850c6.png&#34; alt=&#34;screenshot-2025-07-22T01-30-03-700Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-07-22T01-30-03-700Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Alright, I ended up ricing out some more, looks so much better than the default sddm theme.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/4bf76e68-9a8a-4aa1-b7e9-2df48e63b963.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/4bf76e68-9a8a-4aa1-b7e9-2df48e63b963.png&#34; alt=&#34;screenshot-2025-07-22T01-42-51-608Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-07-22T01-42-51-608Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Default sddm.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/f5c2a31a-63e0-4133-b33b-cdad936eb921.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/f5c2a31a-63e0-4133-b33b-cdad936eb921.png&#34; alt=&#34;screenshot-2025-07-22T01-43-40-329Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-07-22T01-43-40-329Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;My only hiccup was the wallpaper needed to be in a path relative to the theme&#xA;root directory and not an absolute path to my home directory.&lt;/p&gt;&#xA;&lt;p&gt;This command was super helpful for testing greeter themes.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sddm-greeter-qt6 --test-mode --theme /usr/share/sddm/themes/eucalyptus-drop&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-19 Notes</title>
    <id>https://waylonwalker.com/2025-07-19-notes/</id>
    <updated>2025-07-19T17:12:15Z</updated>
    <published>2025-07-19T17:12:15Z</published>
    <link href="https://waylonwalker.com/2025-07-19-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">Progress on markata themes, I&#39;m able to get feedback in the terminal. I&#39;m building out a custom color model that will be able to mix and blend colors with...</summary>
    <content type="html">&lt;p&gt;Progress on markata themes, I’m able to get feedback in the terminal.  I’m&#xA;building out a custom color model that will be able to mix and blend colors&#xA;with intent of this having the ability to work inside of a jinja template, so&#xA;rather than needing to lean into transparency for mixing I can mix colors with&#xA;intent.&lt;/p&gt;&#xA;&lt;p&gt;Now with color mixing we can do subtle changes to things like headings.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/f0063cc3-ec40-4658-be06-83ad9e8b8589.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/f0063cc3-ec40-4658-be06-83ad9e8b8589.png&#34; alt=&#34;screenshot-2025-07-20T01-22-16-799Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-07-20T01-22-16-799Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;themes-console-printout&#34;&gt;Themes console printout &lt;a href=&#34;#themes-console-printout&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre style=&#34;line-height:1.22; font-family:Menlo,&amp;#39;DejaVu Sans Mono&amp;#39;,consolas,&amp;#39;Courier New&amp;#39;,monospace&#34;&gt;&lt;code style=&#34;font-family:inherit&#34;&gt;&#xA;&#xA;&lt;span style=&#34;color: #f3f4f6; text-decoration-color: #f3f4f6; background-color: #1a1b26; font-weight: bold&#34;&gt;Tokyo-Night Theme&lt;/span&gt;&#xA;&#xA;&lt;span style=&#34;font-weight: bold&#34;&gt;Light Theme&lt;/span&gt;&#xA;text &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #111827&#34;&gt; #111827 &lt;/span&gt;&#xA;muted &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #6b7280&#34;&gt; #6b7280 &lt;/span&gt;&#xA;heading &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #000000&#34;&gt; #000 &lt;/span&gt;&#xA;accent &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #4f46e5&#34;&gt; #4f46e5 &lt;/span&gt;&#xA;accent_alt &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #9333ea&#34;&gt; #9333ea &lt;/span&gt;&#xA;background &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #ffffff&#34;&gt; #fff &lt;/span&gt;&#xA;surface &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #f9fafb&#34;&gt; #f9fafb &lt;/span&gt;&#xA;code_bg &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #f3f4f6&#34;&gt; #f3f4f6 &lt;/span&gt;&#xA;blockquote_bg &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #f3f4f6&#34;&gt; #f3f4f6 &lt;/span&gt;&#xA;blockquote_border &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #a5b4fc&#34;&gt; #a5b4fc &lt;/span&gt;&#xA;link_hover &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #000000&#34;&gt; #000 &lt;/span&gt;&#xA;selection_bg &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #e0e7ff&#34;&gt; #e0e7ff &lt;/span&gt;&#xA;selection_text &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #111827&#34;&gt; #111827 &lt;/span&gt;&#xA;border &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #e5e7eb&#34;&gt; #e5e7eb &lt;/span&gt;&#xA;&#xA;&lt;span style=&#34;font-weight: bold&#34;&gt;Dark Theme&lt;/span&gt;&#xA;text &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #f3f4f6&#34;&gt; #f3f4f6 &lt;/span&gt;&#xA;muted &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #9ca3af&#34;&gt; #9ca3af &lt;/span&gt;&#xA;heading &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #ffffff&#34;&gt; #fff &lt;/span&gt;&#xA;accent &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #818cf8&#34;&gt; #818cf8 &lt;/span&gt;&#xA;accent_alt &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #c084fc&#34;&gt; #c084fc &lt;/span&gt;&#xA;background &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #1a1b26&#34;&gt; #1a1b26 &lt;/span&gt;&#xA;surface &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #222436&#34;&gt; #222436 &lt;/span&gt;&#xA;code_bg &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #2f3549&#34;&gt; #2f3549 &lt;/span&gt;&#xA;blockquote_bg &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #1f2335&#34;&gt; #1f2335 &lt;/span&gt;&#xA;blockquote_border &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #6366f1&#34;&gt; #6366f1 &lt;/span&gt;&#xA;link_hover &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #ffffff&#34;&gt; #fff &lt;/span&gt;&#xA;selection_bg &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #2f3549&#34;&gt; #2f3549 &lt;/span&gt;&#xA;selection_text &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #ffffff&#34;&gt; #fff &lt;/span&gt;&#xA;border &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #3b4261&#34;&gt; #3b4261 &lt;/span&gt;&#xA;&#xA;&lt;span style=&#34;color: #fecdd3; text-decoration-color: #fecdd3; background-color: #1e1e28; font-weight: bold&#34;&gt;Catppuccin Theme&lt;/span&gt;&#xA;&#xA;&lt;span style=&#34;font-weight: bold&#34;&gt;Light Theme&lt;/span&gt;&#xA;text &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #881337&#34;&gt; #881337 &lt;/span&gt;&#xA;muted &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #f43f5e&#34;&gt; #f43f5e &lt;/span&gt;&#xA;heading &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #9f1239&#34;&gt; #9f1239 &lt;/span&gt;&#xA;accent &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #ec4899&#34;&gt; #ec4899 &lt;/span&gt;&#xA;accent_alt &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #c084fc&#34;&gt; #c084fc &lt;/span&gt;&#xA;background &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #fff1f2&#34;&gt; #fff1f2 &lt;/span&gt;&#xA;surface &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #ffe4e6&#34;&gt; #ffe4e6 &lt;/span&gt;&#xA;code_bg &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #ffe4e6&#34;&gt; #ffe4e6 &lt;/span&gt;&#xA;blockquote_bg &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #fecdd3&#34;&gt; #fecdd3 &lt;/span&gt;&#xA;blockquote_border &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #f472b6&#34;&gt; #f472b6 &lt;/span&gt;&#xA;link_hover &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #9d174d&#34;&gt; #9d174d &lt;/span&gt;&#xA;selection_bg &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #fda4af&#34;&gt; #fda4af &lt;/span&gt;&#xA;selection_text &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #881337&#34;&gt; #881337 &lt;/span&gt;&#xA;border &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #fda4af&#34;&gt; #fda4af &lt;/span&gt;&#xA;&#xA;&lt;span style=&#34;font-weight: bold&#34;&gt;Dark Theme&lt;/span&gt;&#xA;text &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #fecdd3&#34;&gt; #fecdd3 &lt;/span&gt;&#xA;muted &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #fb7185&#34;&gt; #fb7185 &lt;/span&gt;&#xA;heading &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #ffe4e6&#34;&gt; #ffe4e6 &lt;/span&gt;&#xA;accent &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #f472b6&#34;&gt; #f472b6 &lt;/span&gt;&#xA;accent_alt &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #c4b5fd&#34;&gt; #c4b5fd &lt;/span&gt;&#xA;background &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #1e1e28&#34;&gt; #1e1e28 &lt;/span&gt;&#xA;surface &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #2a2a38&#34;&gt; #2a2a38 &lt;/span&gt;&#xA;code_bg &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #2c2c3a&#34;&gt; #2c2c3a &lt;/span&gt;&#xA;blockquote_bg &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #2b2b3a&#34;&gt; #2b2b3a &lt;/span&gt;&#xA;blockquote_border &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #ec4899&#34;&gt; #ec4899 &lt;/span&gt;&#xA;link_hover &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #ffffff&#34;&gt; #fff &lt;/span&gt;&#xA;selection_bg &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #403d52&#34;&gt; #403d52 &lt;/span&gt;&#xA;selection_text &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #fff1f2&#34;&gt; #fff1f2 &lt;/span&gt;&#xA;border &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #4e4e5a&#34;&gt; #4e4e5a &lt;/span&gt;&#xA;&#xA;&lt;span style=&#34;color: #dcfce7; text-decoration-color: #dcfce7; background-color: #2b3339; font-weight: bold&#34;&gt;Everforest Theme&lt;/span&gt;&#xA;&#xA;&lt;span style=&#34;font-weight: bold&#34;&gt;Light Theme&lt;/span&gt;&#xA;text &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #14532d&#34;&gt; #14532d &lt;/span&gt;&#xA;muted &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #22c55e&#34;&gt; #22c55e &lt;/span&gt;&#xA;heading &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #166534&#34;&gt; #166534 &lt;/span&gt;&#xA;accent &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #16a34a&#34;&gt; #16a34a &lt;/span&gt;&#xA;accent_alt &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #84cc16&#34;&gt; #84cc16 &lt;/span&gt;&#xA;background &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #f0fdf4&#34;&gt; #f0fdf4 &lt;/span&gt;&#xA;surface &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #dcfce7&#34;&gt; #dcfce7 &lt;/span&gt;&#xA;code_bg &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #dcfce7&#34;&gt; #dcfce7 &lt;/span&gt;&#xA;blockquote_bg &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #bbf7d0&#34;&gt; #bbf7d0 &lt;/span&gt;&#xA;blockquote_border &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #4ade80&#34;&gt; #4ade80 &lt;/span&gt;&#xA;link_hover &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #166534&#34;&gt; #166534 &lt;/span&gt;&#xA;selection_bg &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #bbf7d0&#34;&gt; #bbf7d0 &lt;/span&gt;&#xA;selection_text &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #14532d&#34;&gt; #14532d &lt;/span&gt;&#xA;border &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #86efac&#34;&gt; #86efac &lt;/span&gt;&#xA;&#xA;&lt;span style=&#34;font-weight: bold&#34;&gt;Dark Theme&lt;/span&gt;&#xA;text &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #dcfce7&#34;&gt; #dcfce7 &lt;/span&gt;&#xA;muted &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #4ade80&#34;&gt; #4ade80 &lt;/span&gt;&#xA;heading &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #86efac&#34;&gt; #86efac &lt;/span&gt;&#xA;accent &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #4ade80&#34;&gt; #4ade80 &lt;/span&gt;&#xA;accent_alt &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #a3e635&#34;&gt; #a3e635 &lt;/span&gt;&#xA;background &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #2b3339&#34;&gt; #2b3339 &lt;/span&gt;&#xA;surface &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #374045&#34;&gt; #374045 &lt;/span&gt;&#xA;code_bg &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #3b444a&#34;&gt; #3b444a &lt;/span&gt;&#xA;blockquote_bg &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #3d484f&#34;&gt; #3d484f &lt;/span&gt;&#xA;blockquote_border &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #22c55e&#34;&gt; #22c55e &lt;/span&gt;&#xA;link_hover &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #ffffff&#34;&gt; #fff &lt;/span&gt;&#xA;selection_bg &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #475258&#34;&gt; #475258 &lt;/span&gt;&#xA;selection_text &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #ffffff&#34;&gt; #fff &lt;/span&gt;&#xA;border &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #517d90&#34;&gt; #517d90 &lt;/span&gt;&#xA;&#xA;&lt;span style=&#34;color: #ffedd5; text-decoration-color: #ffedd5; background-color: #282828; font-weight: bold&#34;&gt;Gruvbox Theme&lt;/span&gt;&#xA;&#xA;&lt;span style=&#34;font-weight: bold&#34;&gt;Light Theme&lt;/span&gt;&#xA;text &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #7c2d12&#34;&gt; #7c2d12 &lt;/span&gt;&#xA;muted &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #fb923c&#34;&gt; #fb923c &lt;/span&gt;&#xA;heading &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #713f12&#34;&gt; #713f12 &lt;/span&gt;&#xA;accent &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #ea580c&#34;&gt; #ea580c &lt;/span&gt;&#xA;accent_alt &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #eab308&#34;&gt; #eab308 &lt;/span&gt;&#xA;background &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #ffffff&#34;&gt; #fff &lt;/span&gt;&#xA;surface &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #fff7ed&#34;&gt; #fff7ed &lt;/span&gt;&#xA;code_bg &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #ffedd5&#34;&gt; #ffedd5 &lt;/span&gt;&#xA;blockquote_bg &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #fed7aa&#34;&gt; #fed7aa &lt;/span&gt;&#xA;blockquote_border &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #fdba74&#34;&gt; #fdba74 &lt;/span&gt;&#xA;link_hover &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #9a3412&#34;&gt; #9a3412 &lt;/span&gt;&#xA;selection_bg &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #fed7aa&#34;&gt; #fed7aa &lt;/span&gt;&#xA;selection_text &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #7c2d12&#34;&gt; #7c2d12 &lt;/span&gt;&#xA;border &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #fdba74&#34;&gt; #fdba74 &lt;/span&gt;&#xA;&#xA;&lt;span style=&#34;font-weight: bold&#34;&gt;Dark Theme&lt;/span&gt;&#xA;text &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #ffedd5&#34;&gt; #ffedd5 &lt;/span&gt;&#xA;muted &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #fb923c&#34;&gt; #fb923c &lt;/span&gt;&#xA;heading &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #fef9c3&#34;&gt; #fef9c3 &lt;/span&gt;&#xA;accent &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #fb923c&#34;&gt; #fb923c &lt;/span&gt;&#xA;accent_alt &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #facc15&#34;&gt; #facc15 &lt;/span&gt;&#xA;background &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #282828&#34;&gt; #282828 &lt;/span&gt;&#xA;surface &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #3c3836&#34;&gt; #3c3836 &lt;/span&gt;&#xA;code_bg &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #504945&#34;&gt; #504945 &lt;/span&gt;&#xA;blockquote_bg &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #3a3634&#34;&gt; #3a3634 &lt;/span&gt;&#xA;blockquote_border &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #f97316&#34;&gt; #f97316 &lt;/span&gt;&#xA;link_hover &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #ffffff&#34;&gt; #fff &lt;/span&gt;&#xA;selection_bg &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #665c54&#34;&gt; #665c54 &lt;/span&gt;&#xA;selection_text &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #fff7ed&#34;&gt; #fff7ed &lt;/span&gt;&#xA;border &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #7c6f64&#34;&gt; #7c6f64 &lt;/span&gt;&#xA;&#xA;&lt;span style=&#34;color: #f1f5f9; text-decoration-color: #f1f5f9; background-color: #1f2335; font-weight: bold&#34;&gt;Kanagwa Theme&lt;/span&gt;&#xA;&#xA;&lt;span style=&#34;font-weight: bold&#34;&gt;Light Theme&lt;/span&gt;&#xA;text &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #0f172a&#34;&gt; #0f172a &lt;/span&gt;&#xA;muted &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #94a3b8&#34;&gt; #94a3b8 &lt;/span&gt;&#xA;heading &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #1e293b&#34;&gt; #1e293b &lt;/span&gt;&#xA;accent &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #2563eb&#34;&gt; #2563eb &lt;/span&gt;&#xA;accent_alt &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #6366f1&#34;&gt; #6366f1 &lt;/span&gt;&#xA;background &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #f8fafc&#34;&gt; #f8fafc &lt;/span&gt;&#xA;surface &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #f1f5f9&#34;&gt; #f1f5f9 &lt;/span&gt;&#xA;code_bg &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #f1f5f9&#34;&gt; #f1f5f9 &lt;/span&gt;&#xA;blockquote_bg &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #e2e8f0&#34;&gt; #e2e8f0 &lt;/span&gt;&#xA;blockquote_border &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #93c5fd&#34;&gt; #93c5fd &lt;/span&gt;&#xA;link_hover &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #1e40af&#34;&gt; #1e40af &lt;/span&gt;&#xA;selection_bg &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #dbeafe&#34;&gt; #dbeafe &lt;/span&gt;&#xA;selection_text &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #0f172a&#34;&gt; #0f172a &lt;/span&gt;&#xA;border &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #cbd5e1&#34;&gt; #cbd5e1 &lt;/span&gt;&#xA;&#xA;&lt;span style=&#34;font-weight: bold&#34;&gt;Dark Theme&lt;/span&gt;&#xA;text &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #f1f5f9&#34;&gt; #f1f5f9 &lt;/span&gt;&#xA;muted &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #94a3b8&#34;&gt; #94a3b8 &lt;/span&gt;&#xA;heading &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #f8fafc&#34;&gt; #f8fafc &lt;/span&gt;&#xA;accent &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #60a5fa&#34;&gt; #60a5fa &lt;/span&gt;&#xA;accent_alt &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #818cf8&#34;&gt; #818cf8 &lt;/span&gt;&#xA;background &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #1f2335&#34;&gt; #1f2335 &lt;/span&gt;&#xA;surface &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #2a2e3e&#34;&gt; #2a2e3e &lt;/span&gt;&#xA;code_bg &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #3a3f52&#34;&gt; #3a3f52 &lt;/span&gt;&#xA;blockquote_bg &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #2e3440&#34;&gt; #2e3440 &lt;/span&gt;&#xA;blockquote_border &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #3b82f6&#34;&gt; #3b82f6 &lt;/span&gt;&#xA;link_hover &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #ffffff&#34;&gt; #fff &lt;/span&gt;&#xA;selection_bg &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #394260&#34;&gt; #394260 &lt;/span&gt;&#xA;selection_text &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #ffffff&#34;&gt; #fff &lt;/span&gt;&#xA;border &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #4b5162&#34;&gt; #4b5162 &lt;/span&gt;&#xA;&#xA;    &lt;span style=&#34;color: #cffafe; text-decoration-color: #cffafe; background-color: #2e3440; font-weight: bold&#34;&gt;Nord Theme&lt;/span&gt;&#xA;&#xA;&lt;span style=&#34;font-weight: bold&#34;&gt;Light Theme&lt;/span&gt;&#xA;text &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #164e63&#34;&gt; #164e63 &lt;/span&gt;&#xA;muted &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #22d3ee&#34;&gt; #22d3ee &lt;/span&gt;&#xA;heading &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #155e75&#34;&gt; #155e75 &lt;/span&gt;&#xA;accent &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #0891b2&#34;&gt; #0891b2 &lt;/span&gt;&#xA;accent_alt &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #3b82f6&#34;&gt; #3b82f6 &lt;/span&gt;&#xA;background &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #a5f3fc&#34;&gt; #a5f3fc &lt;/span&gt;&#xA;surface &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #cffafe&#34;&gt; #cffafe &lt;/span&gt;&#xA;code_bg &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #ecfeff&#34;&gt; #ecfeff &lt;/span&gt;&#xA;blockquote_bg &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #a5f3fc&#34;&gt; #a5f3fc &lt;/span&gt;&#xA;blockquote_border &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #67e8f9&#34;&gt; #67e8f9 &lt;/span&gt;&#xA;link_hover &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #155e75&#34;&gt; #155e75 &lt;/span&gt;&#xA;selection_bg &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #a5f3fc&#34;&gt; #a5f3fc &lt;/span&gt;&#xA;selection_text &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #164e63&#34;&gt; #164e63 &lt;/span&gt;&#xA;border &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #67e8f9&#34;&gt; #67e8f9 &lt;/span&gt;&#xA;&#xA;&lt;span style=&#34;font-weight: bold&#34;&gt;Dark Theme&lt;/span&gt;&#xA;text &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #cffafe&#34;&gt; #cffafe &lt;/span&gt;&#xA;muted &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #22d3ee&#34;&gt; #22d3ee &lt;/span&gt;&#xA;heading &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #ecfeff&#34;&gt; #ecfeff &lt;/span&gt;&#xA;accent &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #22d3ee&#34;&gt; #22d3ee &lt;/span&gt;&#xA;accent_alt &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #93c5fd&#34;&gt; #93c5fd &lt;/span&gt;&#xA;background &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #2e3440&#34;&gt; #2e3440 &lt;/span&gt;&#xA;surface &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #3b4252&#34;&gt; #3b4252 &lt;/span&gt;&#xA;code_bg &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #434c5e&#34;&gt; #434c5e &lt;/span&gt;&#xA;blockquote_bg &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #4c566a&#34;&gt; #4c566a &lt;/span&gt;&#xA;blockquote_border &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #06b6d4&#34;&gt; #06b6d4 &lt;/span&gt;&#xA;link_hover &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #ffffff&#34;&gt; #fff &lt;/span&gt;&#xA;selection_bg &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #5e81ac&#34;&gt; #5e81ac &lt;/span&gt;&#xA;selection_text &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #ecfeff&#34;&gt; #ecfeff &lt;/span&gt;&#xA;border &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #6b7d97&#34;&gt; #6b7d97 &lt;/span&gt;&#xA;&#xA;&lt;span style=&#34;color: #ff00ff; text-decoration-color: #ff00ff; background-color: #2d0036; font-weight: bold&#34;&gt;Synthwave-&lt;/span&gt;&lt;span style=&#34;color: #ff00ff; text-decoration-color: #ff00ff; background-color: #2d0036; font-weight: bold&#34;&gt;84&lt;/span&gt;&lt;span style=&#34;color: #ff00ff; text-decoration-color: #ff00ff; background-color: #2d0036; font-weight: bold&#34;&gt; Theme&lt;/span&gt;&#xA;&#xA;&lt;span style=&#34;font-weight: bold&#34;&gt;Light Theme&lt;/span&gt;&#xA;text &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #581c87&#34;&gt; #581c87 &lt;/span&gt;&#xA;muted &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #ec4899&#34;&gt; #ec4899 &lt;/span&gt;&#xA;heading &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #86198f&#34;&gt; #86198f &lt;/span&gt;&#xA;accent &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #ec4899&#34;&gt; #ec4899 &lt;/span&gt;&#xA;accent_alt &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #d946ef&#34;&gt; #d946ef &lt;/span&gt;&#xA;background &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #fdf2f8&#34;&gt; #fdf2f8 &lt;/span&gt;&#xA;surface &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #fce7f3&#34;&gt; #fce7f3 &lt;/span&gt;&#xA;code_bg &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #fce7f3&#34;&gt; #fce7f3 &lt;/span&gt;&#xA;blockquote_bg &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #fbcfe8&#34;&gt; #fbcfe8 &lt;/span&gt;&#xA;blockquote_border &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #f472b6&#34;&gt; #f472b6 &lt;/span&gt;&#xA;link_hover &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #6b21a8&#34;&gt; #6b21a8 &lt;/span&gt;&#xA;selection_bg &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #f5d0fe&#34;&gt; #f5d0fe &lt;/span&gt;&#xA;selection_text &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #581c87&#34;&gt; #581c87 &lt;/span&gt;&#xA;border &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #f9a8d4&#34;&gt; #f9a8d4 &lt;/span&gt;&#xA;&#xA;&lt;span style=&#34;font-weight: bold&#34;&gt;Dark Theme&lt;/span&gt;&#xA;text &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #ff00ff&#34;&gt; #f0f &lt;/span&gt;&#xA;muted &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #c060c0&#34;&gt; #c060c0 &lt;/span&gt;&#xA;heading &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #ff66ff&#34;&gt; #f6f &lt;/span&gt;&#xA;accent &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #f472b6&#34;&gt; #f472b6 &lt;/span&gt;&#xA;accent_alt &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #e879f9&#34;&gt; #e879f9 &lt;/span&gt;&#xA;background &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #2d0036&#34;&gt; #2d0036 &lt;/span&gt;&#xA;surface &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #440055&#34;&gt; #405 &lt;/span&gt;&#xA;code_bg &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #3d0047&#34;&gt; #3d0047 &lt;/span&gt;&#xA;blockquote_bg &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #520066&#34;&gt; #520066 &lt;/span&gt;&#xA;blockquote_border &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #ec4899&#34;&gt; #ec4899 &lt;/span&gt;&#xA;link_hover &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #ffffff&#34;&gt; #fff &lt;/span&gt;&#xA;selection_bg &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #8800aa&#34;&gt; #80a &lt;/span&gt;&#xA;selection_text &lt;span style=&#34;color: #000000; text-decoration-color: #000000; background-color: #ffffff&#34;&gt; #fff &lt;/span&gt;&#xA;border &lt;span style=&#34;color: #ffffff; text-decoration-color: #ffffff; background-color: #ff00ff&#34;&gt; #f0f &lt;/span&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-18 Notes</title>
    <id>https://waylonwalker.com/2025-07-18-notes/</id>
    <updated>2025-07-18T19:27:18Z</updated>
    <published>2025-07-18T19:27:18Z</published>
    <link href="https://waylonwalker.com/2025-07-18-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">fc is pretty great.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;/fc/&#34; class=&#34;wikilink&#34; data-title=&#34;fc&#34; data-description=&#34;I am a linux user through and through. Desktop, server, vms, containers, everything except my phone is linux. With this I spend a lot of time in the...&#34; data-date=&#34;2025-07-18&#34; data-preview=&#34;I am a linux user through and through. Desktop, server, vms, containers, everything except my phone is linux. With this I spend a lot of time in the...&#34;&gt;fc&lt;/a&gt; is pretty great.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;Markata themes progress, setting up some visual feedback in the terminal for&#xA;myself to show themes.  Trying to think through how to blend colors to get more&#xA;automated variations and to get good colors without needing to use&#xA;transparancy, I was running into issues already trying to lean into&#xA;transparancy with text bleed.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/d069e806-e3c7-4549-a1c0-12d8a25c1394.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/d069e806-e3c7-4549-a1c0-12d8a25c1394.png&#34; alt=&#34;screenshot-2025-07-19T01-16-55-168Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-07-19T01-16-55-168Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>fc</title>
    <id>https://waylonwalker.com/fc/</id>
    <updated>2025-07-18T07:52:53Z</updated>
    <published>2025-07-18T07:52:53Z</published>
    <link href="https://waylonwalker.com/fc/" rel="alternate" type="text/html"></link>
    <summary type="text">I am a linux user through and through. Desktop, server, vms, containers, everything except my phone is linux. With this I spend a lot of time in the...</summary>
    <content type="html">&lt;p&gt;I am a linux user through and through.  Desktop, server, vms, containers,&#xA;everything except my phone is linux.  With this I spend a lot of time in the&#xA;terminal, and have been a long time user of &lt;code&gt;!!&lt;/code&gt; to rerun the last command, but&#xA;with the ability to tack something on at the beginning or end.&lt;/p&gt;&#xA;&lt;p&gt;TIL about &lt;code&gt;fc&lt;/code&gt;, which opens the last command in your shell history in your&#xA;&lt;code&gt;$EDITOR&lt;/code&gt; or pass in your editor &lt;code&gt;-e nvim&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://manned.org/fc&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/manned.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/manned.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;man fc&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;rcap-of-how--works&#34;&gt;Rcap of how !! works &lt;a href=&#34;#rcap-of-how--works&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;!!&lt;/code&gt; pronounces &lt;code&gt;bang bang&lt;/code&gt; and will run the last command in your history.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls -l&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;!! &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; wc -l&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ls -l | wc -l&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo !!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# sudo ls -l | wc -l&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;!!:s/-l/-l &lt;span class=&#34;se&#34;&gt;\/&lt;/span&gt;tmp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# sudo ls -l /tmp | wc -l&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;fc-enters-the-chat&#34;&gt;&lt;code&gt;fc&lt;/code&gt; enters the chat &lt;a href=&#34;#fc-enters-the-chat&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now making complex edits in your shell can be a bit of a chore, so &lt;code&gt;fc&lt;/code&gt; moves&#xA;this work to your &lt;code&gt;$EDITOR&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;fc&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This pops open your $EDITOR with the last command in your history.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;sudo&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ls&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;l&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;wc&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;l&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/9d624d65-de40-459b-9566-6e5c833cabcc.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/9d624d65-de40-459b-9566-6e5c833cabcc.png&#34; alt=&#34;screenshot-2025-07-18T13-21-46-775Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-07-18T13-21-46-775Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;shell-history&#34;&gt;Shell History &lt;a href=&#34;#shell-history&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;fc&lt;/code&gt; shows up in shell history, but &lt;code&gt;!!&lt;/code&gt; does not, &lt;code&gt;!!&lt;/code&gt; gets replaced by the&#xA;command that it becomes.&lt;/p&gt;&#xA;&lt;h2 id=&#34;up-arrow&#34;&gt;Up Arrow &lt;a href=&#34;#up-arrow&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;yaya yaya, I know you can also &lt;code&gt;up-arrow c-e&lt;/code&gt;, but what fun is that, it’s barely a&#xA;flex.  &lt;code&gt;fc&lt;/code&gt; just looks big brained and like you really know what you are doing.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-17 Notes</title>
    <id>https://waylonwalker.com/2025-07-17-notes/</id>
    <updated>2025-07-17T19:54:05Z</updated>
    <published>2025-07-17T19:54:05Z</published>
    <link href="https://waylonwalker.com/2025-07-17-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">TIL pygments-htmlformatter is a big win for markata, didn&#39;t have a chance to take notes yesterday, but I&#39;m really working on templates and themes. It&#39;s...</summary>
    <content type="html">&lt;p&gt;TIL &lt;a href=&#34;/pygments-htmlformatter/&#34; class=&#34;wikilink&#34; data-title=&#34;pygments htmlformatter&#34; data-description=&#34;I&amp;#39;ve been a long user of pygments, it&amp;#39;s been the thing that injects with funny little class names like and into the code blocks of my website. I&amp;#39;ve even gone...&#34; data-date=&#34;2025-07-17&#34; data-preview=&#34;I&amp;#39;ve been a long user of pygments, it&amp;#39;s been the thing that injects with funny little class names like and into the code blocks of my website. I&amp;#39;ve even gone...&#34;&gt;pygments htmlformatter&lt;/a&gt; is a big win for &lt;a href=&#34;/markata/&#34; class=&#34;wikilink&#34; data-title=&#34;markata&#34; data-description=&#34;This post is a work in progress.&#34; data-date=&#34;2024-05-30&#34; data-preview=&#34;This post is a work in progress.&#34;&gt;markata&lt;/a&gt;, didn’t have a&#xA;chance to take notes yesterday, but I’m really working on templates and themes.&#xA;It’s becoming more important for me as I get more users, i.e. family members&#xA;blog sites up and running.  No one wants to look default, they all want to look&#xA;unique, learning how to change out themes like this is a good win.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;Still working on searchcraft integrations and holy shit is it fast.  I’m&#xA;searching and scrubbing through logs out of cloudwatch at 2ms/search rather&#xA;than their dogwater 30s+ broken ui not loading, not showing me the logs I want.&#xA;This is not even apples to apples, cloudwatch chokes on one job worth of logs,&#xA;I’ve got 500 jobs of logs and searchcraft is eating them up like nothin.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>pygments htmlformatter</title>
    <id>https://waylonwalker.com/pygments-htmlformatter/</id>
    <updated>2025-07-17T19:45:19Z</updated>
    <published>2025-07-17T19:45:19Z</published>
    <link href="https://waylonwalker.com/pygments-htmlformatter/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been a long user of pygments, it&#39;s been the thing that injects with funny little class names like and into the code blocks of my website. I&#39;ve even gone...</summary>
    <content type="html">&lt;p&gt;I’ve been a long user of pygments, it’s been the thing that injects &lt;code&gt;&amp;lt;spans&amp;gt;&lt;/code&gt;&#xA;with funny little class names like &lt;code&gt;sc&lt;/code&gt; and &lt;code&gt;si&lt;/code&gt; into the code blocks of my&#xA;website.  I’ve even gone as far as implementing a &lt;a href=&#34;https://github.com/WaylonWalker/markata/blob/main/markata/plugins/md_it_highlight_code.py&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;plugin for&#xA;md-it&lt;/a&gt;,&#xA;but I had no idea how to re-style it.  I long ago got a theme that looked good&#xA;enough from somewhere and just used it, maybe I pulled something from their&#xA;docs site and forgot.  Today I learned you can list all the themes easily from&#xA;the library itself, and render out new css.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pygments.styles&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_all_styles&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_all_styles&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# [&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;abap&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;algol_nu&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;algol&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;arduino&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;autumn&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;borland&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;bw&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;colorful&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;default&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;dracula&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;emacs&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;friendly_grayscale&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;friendly&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;fruity&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;github-dark&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;gruvbox-dark&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;gruvbox-light&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;igor&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;inkpot&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;lightbulb&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;lilypond&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;lovelace&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;manni&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;material&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;monokai&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;murphy&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;native&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;nord-darker&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;nord&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;one-dark&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;paraiso-dark&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;paraiso-light&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;pastie&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;perldoc&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;rainbow_dash&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;rrt&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;sas&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;solarized-dark&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;solarized-light&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;staroffice&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;stata-dark&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;stata-light&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;stata&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;tango&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;trac&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;vim&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;vs&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;xcode&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#39;zenburn&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pygments.formatters&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HtmlFormatter&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pygments.styles&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_style_by_name&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;style&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_style_by_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;monokai&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;formatter&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HtmlFormatter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;formatter&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_style_defs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;.highlight&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And now you get styles that you can add to your css and be any theme from the&#xA;list above.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;pre&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;line-height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;125&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;td&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;linenos&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;normal&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;inherit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;transparent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;padding-left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;padding-right&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;linenos&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;inherit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;transparent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;padding-left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;padding-right&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;td&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;linenos&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;special&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#000000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#ffffc0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;padding-left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;padding-right&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;linenos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;special&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#000000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#ffffc0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;padding-left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;padding-right&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;hll&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#49483e&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#272822&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#f8f8f2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;c&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#959077&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Comment */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;err&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#ed007e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#1e0010&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Error */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;esc&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#f8f8f2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Escape */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;g&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#f8f8f2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Generic */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;k&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#66d9ef&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Keyword */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;l&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#ae81ff&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Literal */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#f8f8f2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Name */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;o&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#ff4689&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Operator */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#f8f8f2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Other */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;p&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#f8f8f2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Punctuation */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;ch&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#959077&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Comment.Hashbang */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;cm&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#959077&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Comment.Multiline */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;cp&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#959077&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Comment.Preproc */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;cpf&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#959077&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Comment.PreprocFile */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;c1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#959077&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Comment.Single */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;cs&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#959077&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Comment.Special */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;gd&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#ff4689&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Generic.Deleted */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;ge&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#f8f8f2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;font-style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;italic&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Generic.Emph */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;ges&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#f8f8f2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;font-weight&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;bold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;font-style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;italic&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Generic.EmphStrong */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;gr&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#f8f8f2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Generic.Error */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;gh&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#f8f8f2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Generic.Heading */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;gi&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#a6e22e&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Generic.Inserted */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;go&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#66d9ef&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Generic.Output */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;gp&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#ff4689&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;font-weight&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;bold&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Generic.Prompt */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;gs&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#f8f8f2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;font-weight&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;bold&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Generic.Strong */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;gu&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#959077&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Generic.Subheading */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;gt&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#f8f8f2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Generic.Traceback */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;kc&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#66d9ef&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Keyword.Constant */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;kd&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#66d9ef&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Keyword.Declaration */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;kn&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#ff4689&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Keyword.Namespace */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;kp&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#66d9ef&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Keyword.Pseudo */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;kr&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#66d9ef&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Keyword.Reserved */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;kt&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#66d9ef&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Keyword.Type */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;ld&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#e6db74&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Literal.Date */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;m&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#ae81ff&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Literal.Number */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#e6db74&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Literal.String */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;na&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#a6e22e&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Name.Attribute */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;nb&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#f8f8f2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Name.Builtin */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;nc&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#a6e22e&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Name.Class */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;no&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#66d9ef&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Name.Constant */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;nd&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#a6e22e&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Name.Decorator */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;ni&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#f8f8f2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Name.Entity */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;ne&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#a6e22e&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Name.Exception */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;nf&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#a6e22e&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Name.Function */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;nl&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#f8f8f2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Name.Label */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;nn&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#f8f8f2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Name.Namespace */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;nx&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#a6e22e&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Name.Other */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;py&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#f8f8f2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Name.Property */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;nt&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#ff4689&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Name.Tag */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;nv&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#f8f8f2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Name.Variable */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;ow&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#ff4689&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Operator.Word */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;pm&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#f8f8f2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Punctuation.Marker */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;w&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#f8f8f2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Text.Whitespace */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;mb&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#ae81ff&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Literal.Number.Bin */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;mf&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#ae81ff&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Literal.Number.Float */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;mh&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#ae81ff&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Literal.Number.Hex */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;mi&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#ae81ff&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Literal.Number.Integer */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;mo&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#ae81ff&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Literal.Number.Oct */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;sa&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#e6db74&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Literal.String.Affix */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;sb&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#e6db74&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Literal.String.Backtick */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;sc&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#e6db74&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Literal.String.Char */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;dl&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#e6db74&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Literal.String.Delimiter */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;sd&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#e6db74&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Literal.String.Doc */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;s2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#e6db74&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Literal.String.Double */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;se&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#ae81ff&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Literal.String.Escape */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;sh&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#e6db74&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Literal.String.Heredoc */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;si&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#e6db74&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Literal.String.Interpol */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;sx&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#e6db74&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Literal.String.Other */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;sr&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#e6db74&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Literal.String.Regex */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;s1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#e6db74&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Literal.String.Single */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;ss&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#e6db74&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Literal.String.Symbol */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;bp&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#f8f8f2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Name.Builtin.Pseudo */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;fm&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#a6e22e&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Name.Function.Magic */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;vc&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#f8f8f2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Name.Variable.Class */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;vg&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#f8f8f2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Name.Variable.Global */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;vi&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#f8f8f2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Name.Variable.Instance */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;vm&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#f8f8f2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Name.Variable.Magic */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;il&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#ae81ff&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* Literal.Number.Integer.Long */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ caelestia-dots shell</title>
    <id>https://waylonwalker.com/caelestia-dots-shell/</id>
    <updated>2025-07-16T00:32:16Z</updated>
    <published>2025-07-16T00:32:16Z</published>
    <link href="https://waylonwalker.com/caelestia-dots-shell/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? shell by caelestia-dots.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/caelestia-dots/shell&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;shell&lt;/a&gt; by &lt;a href=&#34;https://github.com/caelestia-dots&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;caelestia-dots&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A very segsy desktop shell&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-15 Notes</title>
    <id>https://waylonwalker.com/2025-07-15-notes/</id>
    <updated>2025-07-15T10:57:37Z</updated>
    <published>2025-07-15T10:57:37Z</published>
    <link href="https://waylonwalker.com/2025-07-15-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m working on hyprland, one thing I am missing from my awesomewm setup is rofi list all running windows. Sometimes I put a browser instance in a different...</summary>
    <content type="html">&lt;p&gt;I’m working on hyprland, one thing I am missing from my awesomewm setup is rofi&#xA;list all running windows.  Sometimes I put a browser instance in a different&#xA;workspace and I cant find it, especially if I’ve full screened something over&#xA;top of it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;first-pass&#34;&gt;first pass &lt;a href=&#34;#first-pass&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;look for brave and go to it or make one&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/usr/bin/env bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;addr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;hyprctl clients -j &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; jq -r &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;&#x9;&lt;span class=&#34;s1&#34;&gt;&amp;#39;.[] | select(.class == &amp;#34;brave-browser&amp;#34;) | .address&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; head -n1&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$addr&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;c1&#34;&gt;# Focus the existing browser window&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;hyprctl dispatch focuswindow address:&lt;span class=&#34;nv&#34;&gt;$addr&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;c1&#34;&gt;# Launch a new browser window&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;brave --password-store&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;basic &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;second-pass&#34;&gt;second pass &lt;a href=&#34;#second-pass&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If there are more than one cycle between them.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Get current window address&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;current_addr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;hyprctl activewindow -j &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; jq -r &lt;span class=&#34;s1&#34;&gt;&amp;#39;.address&amp;#39;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Get all Brave window addresses&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;brave_windows&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;hyprctl clients -j &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; jq -r &lt;span class=&#34;s1&#34;&gt;&amp;#39;.[] | select(.class == &amp;#34;brave-browser&amp;#34;) | .address&amp;#39;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;num_windows&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${#&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;brave_windows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[@]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;num_windows&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; 0&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;c1&#34;&gt;# No Brave windows, launch it&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;brave --password-store&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;basic &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Find the index of the current window in brave_windows&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;current_index&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;-1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; i in &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;!brave_windows[@]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;brave_windows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$current_addr&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&lt;span class=&#34;nv&#34;&gt;current_index&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&lt;span class=&#34;nb&#34;&gt;break&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# If we&amp;#39;re already in a Brave window, switch to the next one (wrap around)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;((&lt;/span&gt;current_index !&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; -1&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;nv&#34;&gt;next_index&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$((&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;current_index &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;%&lt;/span&gt; num_windows&lt;span class=&#34;k&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;hyprctl dispatch focuswindow address:&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;brave_windows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$next_index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;c1&#34;&gt;# Not currently in a Brave window — focus the first one&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;hyprctl dispatch focuswindow address:&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;brave_windows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[0]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;third-pass&#34;&gt;third pass &lt;a href=&#34;#third-pass&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Generalize it so that I can make keybindings for any app that I can figure out&#xA;the classname of and provide a start command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/usr/bin/env bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -euo pipefail&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Args&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;:-&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;shift&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;start_command&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$*&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; -z &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$class&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; -z &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$start_command&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Usage: &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$0&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &amp;lt;class&amp;gt; &amp;lt;start-command...&amp;gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Current active window&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;current_addr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;hyprctl activewindow -j &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; jq -r &lt;span class=&#34;s1&#34;&gt;&amp;#39;.address&amp;#39;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# All windows with matching class&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;matching_windows&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;hyprctl clients -j &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; jq -r --arg class &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$class&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;.[] | select(.class == $class) | .address&amp;#39;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;num_windows&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${#&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;matching_windows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[@]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;num_windows&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; 0&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;c1&#34;&gt;# None running — start it&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;nb&#34;&gt;eval&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$start_command&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# See if currently focused window is in matching list&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;current_index&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;-1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; i in &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;!matching_windows[@]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;matching_windows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$current_addr&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&lt;span class=&#34;nv&#34;&gt;current_index&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&lt;span class=&#34;nb&#34;&gt;break&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Cycle to next window if already in one&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;((&lt;/span&gt;current_index !&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; -1&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;nv&#34;&gt;next_index&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$((&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;current_index &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;%&lt;/span&gt; num_windows&lt;span class=&#34;k&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;hyprctl dispatch focuswindow address:&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;matching_windows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$next_index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;c1&#34;&gt;# Not in one — focus first&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;hyprctl dispatch focuswindow address:&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;matching_windows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[0]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;finding-the-classname&#34;&gt;finding the classname &lt;a href=&#34;#finding-the-classname&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ hyprctl clients -j &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; jq &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep kitty&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;class&amp;#34;&lt;/span&gt;: &lt;span class=&#34;s2&#34;&gt;&amp;#34;kitty&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;initialClass&amp;#34;&lt;/span&gt;: &lt;span class=&#34;s2&#34;&gt;&amp;#34;kitty&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;initialTitle&amp;#34;&lt;/span&gt;: &lt;span class=&#34;s2&#34;&gt;&amp;#34;kitty&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-12 Notes</title>
    <id>https://waylonwalker.com/2025-07-12-notes/</id>
    <updated>2025-07-12T15:19:20Z</updated>
    <published>2025-07-12T15:19:20Z</published>
    <link href="https://waylonwalker.com/2025-07-12-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">Starting the polkit agent for hyperland arch to handle permission elevation for desktop applications.</summary>
    <content type="html">&lt;p&gt;Starting the polkit agent for hyperland arch to handle permission elevation for&#xA;desktop applications.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition error&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Error&lt;/p&gt;&#xA;&lt;p&gt;An error occurred while accessing ‘bazzite-nvidia_razorcrest’, the system&#xA;responded: Cannot request authentication for this action. The PolicyKit&#xA;authentication system appears to be not available.: Not authorized to&#xA;perform operation&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-config&#34;&gt;exec-once = waybar &amp;amp; hyprpaper &amp;amp; $terminal &amp;amp; polkit &amp;amp; swaync &amp;amp; /usr/lib/polkit-kde-authentication-agent-1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;!!! GIPPITY&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;🧠 Why this happens:&#xA;Polkit handles permission elevation for desktop apps.&#xA;&#xA;Dolphin uses udisks2 to mount drives, which asks Polkit for permission.&#xA;&#xA;If you don&amp;#39;t run a Polkit agent, you won&amp;#39;t be able to authorize mount actions from the GUI.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;div class=&#34;admonition error&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Error&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;❯ just build&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Error: configure storage: kernel does not support overlay fs: ‘overlay’ is not supported over btrfs at “/home/waylon/.local/share/containers/storage/overlay”: backing file system is unsupported for this graph driver&#xA;error: Recipe build failed with exit code 125&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;paru -S fuse-overlayfs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p ~/.config/containers&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvim ~/.config/containers/storage.conf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;storage&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;driver&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;overlay&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;storage&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;mount_program&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/usr/bin/fuse-overlayfs&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;hr/&gt;&#xA;&lt;p&gt;Wyatt and I tried 3 times to beat the ice tower on our second run of Cat Quest&#xA;III and failed, its tough.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/c3050a32-b914-489d-9bf3-c9a1adf2bc46.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/c3050a32-b914-489d-9bf3-c9a1adf2bc46.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/c3050a32-b914-489d-9bf3-c9a1adf2bc46.mp4&#34; type=&#34;video/mp4&#34;&gt;ice-tower-fail.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-11 Notes</title>
    <id>https://waylonwalker.com/2025-07-11-notes/</id>
    <updated>2025-07-11T08:06:23Z</updated>
    <published>2025-07-11T08:06:23Z</published>
    <link href="https://waylonwalker.com/2025-07-11-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">Continuing my exploration of Searchcraft I loaded all of my blog into it. It fully posted, indexed, and had my content ready for search in a literal blink....</summary>
    <content type="html">&lt;p&gt;Continuing my exploration of &lt;a href=&#34;https://searchcraft.com&#34;&gt;Searchcraft&lt;/a&gt; I loaded&#xA;all of my blog into it.  It fully posted, indexed, and had my content ready for&#xA;search in a literal blink.  It was like the experience of python devs running&#xA;ruff for the first time, and having the no way you just did that experience.&lt;/p&gt;&#xA;&lt;p&gt;Ok so semantic search is so freaking cool, does not compare to fuzzy search at&#xA;all.  I don’t have to include parts of the title or something to find a post.&#xA;I don’t have to spell things right, I dont even have to get the thing right.  I&#xA;can ask “create a mycraft server in kibinerers” and it takes me to the post&#xA;about running Minecraft in containers.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;asyncio&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;httpx&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;SEARCHCRAFT_URL&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;http://0.0.0.0:8000&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;INDEX_NAME&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;creation_test&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;upload_documents&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;documents&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s2&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;slug&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s2&#34;&gt;&amp;#34;title&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s2&#34;&gt;&amp;#34;body&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;post&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;posts&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;httpx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Client&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;url&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SEARCHCRAFT_URL&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/index/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;INDEX_NAME&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/documents&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;documents&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;raise_for_status&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Upload:&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# Commit changes&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;commit_url&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SEARCHCRAFT_URL&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/index/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;INDEX_NAME&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/commit&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;commit_resp&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;commit_url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;commit_resp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;raise_for_status&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Committed:&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;commit_resp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;markata&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Markata&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Markata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;upload_documents&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-10 Notes</title>
    <id>https://waylonwalker.com/2025-07-10-notes/</id>
    <updated>2025-07-10T20:10:58Z</updated>
    <published>2025-07-10T20:10:58Z</published>
    <link href="https://waylonwalker.com/2025-07-10-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">[](https://www.youtube.com/watch?v=VFlLRH3ifcM)</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=VFlLRH3ifcM&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://i.ytimg.com/vi/VFlLRH3ifcM/maxresdefault.jpg&#34; alt=&#34;Lightspeed search built for devs | Don MacKinnon on the future of content search&#34;/ data-glightbox=&#34;description: Lightspeed search built for devs | Don MacKinnon on the future of content search&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Spent the day working through &lt;a href=&#34;https://www.youtube.com/watch?v=VFlLRH3ifcM&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Lightspeed search built for devs | Don MacKinnon&#xA;on the future of content search&lt;/a&gt;,&#xA;this episode of the changelog about searchcraft.  It was really interesting,&lt;/p&gt;&#xA;&lt;p&gt;Then found this demo loading all of wikipedia and getting really sick search&#xA;results out of it!&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=SjuPn6_yl2s&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://www.youtube.com/watch?v=SjuPn6_yl2s&lt;/a&gt;&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;podman run --name searchcraft -p 8000:8000 searchcraftinc/searchcraft-core:latest&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# create an index&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -X POST -H &lt;span class=&#34;s2&#34;&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; --data &lt;span class=&#34;s1&#34;&gt;&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;  &amp;#34;index&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    &amp;#34;name&amp;#34;: &amp;#34;creation_test&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    &amp;#34;search_fields&amp;#34;: [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;#34;title&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;#34;body&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    ],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    &amp;#34;fields&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;#34;id&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;type&amp;#34;: &amp;#34;text&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;required&amp;#34;: true,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;stored&amp;#34;: true,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;indexed&amp;#34;: false&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;#34;created_at&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;type&amp;#34;: &amp;#34;datetime&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;fast&amp;#34;: true,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;stored&amp;#34;: true,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;indexed&amp;#34;: true&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;#34;title&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;type&amp;#34;: &amp;#34;text&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;stored&amp;#34;: true&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;#34;body&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;type&amp;#34;: &amp;#34;text&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;stored&amp;#34;: true&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;#34;active&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;type&amp;#34;: &amp;#34;bool&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;fast&amp;#34;: true,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;stored&amp;#34;: true&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;#34;rating&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;type&amp;#34;: &amp;#34;f64&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;stored&amp;#34;: true,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;fast&amp;#34;: true&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;#34;reviews&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;type&amp;#34;: &amp;#34;u64&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;stored&amp;#34;: true,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;fast&amp;#34;: true&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;#34;tags&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;type&amp;#34;: &amp;#34;text&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;stored&amp;#34;: true,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;multi&amp;#34;: true&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;#34;category&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;type&amp;#34;: &amp;#34;facet&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;stored&amp;#34;: true&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;#34;formats&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;type&amp;#34;: &amp;#34;facet&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;stored&amp;#34;: true,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;multi&amp;#34;: true&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;#34;url&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;type&amp;#34;: &amp;#34;text&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        &amp;#34;stored&amp;#34;: true&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    &amp;#34;weight_multipliers&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;#34;title&amp;#34;: 2,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;#34;body&amp;#34;: 0.7&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt; http://0.0.0.0:8000/index&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# put a document in the index&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -X POST -H &lt;span class=&#34;s2&#34;&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt;   --data &lt;span class=&#34;s1&#34;&gt;&amp;#39;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    &amp;#34;document&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;#34;id&amp;#34;: &amp;#34;doc-001&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;#34;created_at&amp;#34;: &amp;#34;2024-07-10T12:00:00Z&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;#34;title&amp;#34;: &amp;#34;Hello World&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;#34;body&amp;#34;: &amp;#34;This is your first Searchcraft document!&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;#34;url&amp;#34;: &amp;#34;https://searchcraft.com&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;#34;active&amp;#34;: true,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;#34;rating&amp;#34;: 4.5,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;#34;reviews&amp;#34;: 3,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;#34;tags&amp;#34;: [&amp;#34;demo&amp;#34;, &amp;#34;test&amp;#34;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;#34;category&amp;#34;: &amp;#34;/demo&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;#34;formats&amp;#34;: [&amp;#34;/pdf&amp;#34;, &amp;#34;/markdown&amp;#34;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;  }&amp;#39;&lt;/span&gt; http://0.0.0.0:8000/document/creation_test&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# commit the changes&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -X POST http://0.0.0.0:8000/index/creation_test/commit&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;## search&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -X POST -H &lt;span class=&#34;s2&#34;&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; --data &lt;span class=&#34;s1&#34;&gt;&amp;#39;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;  &amp;#34;limit&amp;#34;: 5,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;  &amp;#34;offset&amp;#34;: 0,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;  &amp;#34;query&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    &amp;#34;fuzzy&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;      &amp;#34;ctx&amp;#34;: &amp;#34;searchcraft&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;}&amp;#39;&lt;/span&gt; http://0.0.0.0:8000/index/creation_test/search&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;results&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;data&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;hits&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;doc&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;nt&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;doc-001&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;nt&#34;&gt;&amp;#34;formats&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s2&#34;&gt;&amp;#34;/pdf&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s2&#34;&gt;&amp;#34;/markdown&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;nt&#34;&gt;&amp;#34;active&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;nt&#34;&gt;&amp;#34;reviews&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;nt&#34;&gt;&amp;#34;tags&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s2&#34;&gt;&amp;#34;demo&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s2&#34;&gt;&amp;#34;test&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;nt&#34;&gt;&amp;#34;created_at&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;2024-07-10T12:00:00Z&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;nt&#34;&gt;&amp;#34;category&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/demo&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;nt&#34;&gt;&amp;#34;rating&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;4.5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;nt&#34;&gt;&amp;#34;title&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Hello World&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;nt&#34;&gt;&amp;#34;body&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;This is your first Searchcraft document!&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;document_id&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;13964682816361504761&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;score&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.90137744&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;source_index&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;creation_test&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;count&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;time_taken&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.000679577&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;facets&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;category&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;path&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/demo&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;count&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;formats&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;path&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/markdown&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;count&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;path&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/pdf&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;count&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-09 Notes</title>
    <id>https://waylonwalker.com/2025-07-09-notes/</id>
    <updated>2025-07-09T08:14:47Z</updated>
    <published>2025-07-09T08:14:47Z</published>
    <link href="https://waylonwalker.com/2025-07-09-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">What a nightmare this glossary plugin turns out to be, it broke my site. I had it really close, then one more change asked for to the llm, an LGTM and did...</summary>
    <content type="html">&lt;p&gt;What a nightmare this glossary plugin turns out to be, it broke my site.  I had&#xA;it really close, then one more change asked for to the llm, an LGTM and did not&#xA;look close, it rewrote the whole thing and started rendering markdown with its&#xA;own renderer not my configured markdown renderer.  Its close to working not but&#xA;moved to post_render and using &lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;html&lt;/a&gt;/beautifulsoup rather than the raw markdown.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ kyantech Palmr</title>
    <id>https://waylonwalker.com/kyantech-palmr/</id>
    <updated>2025-07-08T13:56:21Z</updated>
    <published>2025-07-08T13:56:21Z</published>
    <link href="https://waylonwalker.com/kyantech-palmr/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out kyantech and their project Palmr.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/kyantech&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kyantech&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/kyantech/Palmr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Palmr&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;🌴 Palmr. is an open-source file-sharing platform focused on privacy and security. It enables users to upload, manage, and share files with features like password protection, custom links, and access control without tracking or limitations. Designed for seamless and secure sharing, Palmr. is completely free.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-08 Notes</title>
    <id>https://waylonwalker.com/2025-07-08-notes/</id>
    <updated>2025-07-08T11:27:07Z</updated>
    <published>2025-07-08T11:27:07Z</published>
    <link href="https://waylonwalker.com/2025-07-08-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">Setting up the hyprland run launcher to not be case sensitive.</summary>
    <content type="html">&lt;p&gt;Setting up the hyprland run launcher to not be case sensitive.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$menu&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; wofi --show drun --insensitive&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;hr/&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-07 Notes</title>
    <id>https://waylonwalker.com/2025-07-07-notes/</id>
    <updated>2025-07-07T23:13:36Z</updated>
    <published>2025-07-07T23:13:36Z</published>
    <link href="https://waylonwalker.com/2025-07-07-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">leaning into the rediculous rainbow borders instead of getting rid of them in hyprland.</summary>
    <content type="html">&lt;p&gt;leaning into the rediculous rainbow borders instead of getting rid of them in hyprland.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-conf&#34;&gt;col.active_border = rgba(ff77ffcc) rgba(33ccffee) rgba(aa00ffee) rgba(00ff99ee) rgba(ff77ffcc) rgba(33ccffee) rgba(aa00ffee) rgba(00ff99ee) 45deg&#xA;col.inactive_border = rgba(111111aa) rgba(2a2a2aaa) rgba(111111aa) rgba(fafafaaa) rgba(fafafaaa) rgba(fafafaaa) rgba(111111aa) rgba(2a2a2aaa) 90deg&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/abe9fec8-ce1c-4fdd-8975-2667f87df9ba.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/abe9fec8-ce1c-4fdd-8975-2667f87df9ba.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux clipboard on hyprland</title>
    <id>https://waylonwalker.com/tmux-clipboard-on-hyprland/</id>
    <updated>2025-07-06T20:45:47Z</updated>
    <published>2025-07-06T20:45:47Z</published>
    <link href="https://waylonwalker.com/tmux-clipboard-on-hyprland/" rel="alternate" type="text/html"></link>
    <summary type="text">Smooth clipboard settings for tmux is critical for my workflow. I&#39;m often grabbing snippets of terminal output to paste into team chats, blog posts, or llm...</summary>
    <content type="html">&lt;p&gt;Smooth clipboard settings for tmux is critical for my workflow.  I’m often&#xA;grabbing snippets of terminal output to paste into team chats, blog posts, or&#xA;llm prompts.  Admittedly, I’m often doing this with the mouse, unless it’s&#xA;coming from neovim, which I generally do with motions.  Moving from an &lt;code&gt;xorg&lt;/code&gt;&#xA;based setup to hyprland has required me to reconfigure my tmux clipboard&#xA;settings.  This is what I did.&lt;/p&gt;&#xA;&lt;p&gt;First install wl-clipboard with &lt;a href=&#34;/paru/&#34; class=&#34;glossary-term&#34; title=&#34;paru is a package manager for archlinux that installs packages from the &lt;a href=&#34;/aur/&#34; class=&#34;glossary-term&#34; title=&#34;Arch User Repository, a collection of community maintained packages for archlinux.&#34;&gt;AUR&lt;/a&gt;.&#34;&gt;paru&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;paru -S wl-clipboard&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Next add this to your tmux config.  I’ve long had this config, but with only&#xA;the &lt;code&gt;xorg&lt;/code&gt;/&lt;code&gt;xclip&lt;/code&gt; setup, now this checks for wl-copy, uses it, or falls back to&#xA;my old &lt;code&gt;xclip&lt;/code&gt; setup.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel &lt;span class=&#34;s2&#34;&gt;&amp;#34;bash -c &amp;#39;command -v wl-copy &amp;gt;/dev/null &amp;amp;&amp;amp; wl-copy || xclip -i -f -selection primary | xclip -i -selection clipboard&amp;#39;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;set-option -s set-clipboard off&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel &lt;span class=&#34;s2&#34;&gt;&amp;#34;bash -c &amp;#39;command -v wl-copy &amp;gt;/dev/null &amp;amp;&amp;amp; wl-copy || xclip -i -f -selection primary | xclip -i -selection clipboard&amp;#39;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>command palettes are overrated</title>
    <id>https://waylonwalker.com/command-palettes-are-overrated/</id>
    <updated>2025-07-06T12:37:40Z</updated>
    <published>2025-07-06T12:37:40Z</published>
    <link href="https://waylonwalker.com/command-palettes-are-overrated/" rel="alternate" type="text/html"></link>
    <summary type="text">Command palettes are slow, and overrated, you should treat yourself better. You probably installed VSC*** out of the box and your co-workers see you using...</summary>
    <content type="html">&lt;p&gt;Command palettes are slow, and overrated, you should treat yourself better.&#xA;You probably installed VSC*** out of the box and your co-workers see you using&#xA;the mouse and reprimanded you as they should.  Mouse usage is not OK if you are&#xA;a software dev, you should have the cheap ass free mouse that came with your&#xA;cousins dell machine five years ago and only use if for emergencies.  If you&#xA;want to be fast you cannot do that by moving cursors to imprecise locations and&#xA;clicking with your hand.  You are not a caveman, put down the stones and get&#xA;with the damn times.  You need to be moving with precision.&lt;/p&gt;&#xA;&lt;h2 id=&#34;stage-one-the-command-palette&#34;&gt;Stage One, the command palette &lt;a href=&#34;#stage-one-the-command-palette&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;So you are taking your first few baby steps away from that Logitech MX Master&#xA;and you need to get shit done, during these infant months the command palette&#xA;is your friend.  Use it you will be 10x faster than Razer Naga Ron from&#xA;accounting.  If you are in an IDE like &lt;code&gt;VSC***&lt;/code&gt; or a JEttedBrains editor they&#xA;come with a command palette for running commands and fuzy finding files, use&#xA;it.  If you are in nvim, move on you probably don’t need this, unless you are&#xA;still teething on &lt;code&gt;VSC***&lt;/code&gt;, during that tim use &lt;code&gt;:Telescope commands&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;close-the-fn-tree&#34;&gt;Close the fn Tree &lt;a href=&#34;#close-the-fn-tree&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You don’t need a goddamn file tree open all the goddamn time, its taking up&#xA;screen space and filling your brain with useless shit.  They can be a helpful&#xA;tool to move, rename, refactor files, or familiarize yourself with a codebase,&#xA;but you don’t use one if you want to walk someday, so just like the command&#xA;palette we are going to give it up for fuzzy find.  If you are in nvim you are&#xA;going to want to use &lt;code&gt;:Telescope find_files&lt;/code&gt;  those other big brained ides have&#xA;things, look up the keybinding.&lt;/p&gt;&#xA;&lt;h2 id=&#34;now-that-we-are-crawling&#34;&gt;Now that we are crawling &lt;a href=&#34;#now-that-we-are-crawling&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As you start to get your legs under you and you can crawl away from mamas teet&#xA;note down the commands that you use all the time, we want to get command&#xA;palette usage way down.  Not to zero, without some sort of fuzzy command picker&#xA;(even &lt;code&gt;:&amp;lt;tab&amp;gt;&lt;/code&gt;) you are probably trying to remember too much and allocating too&#xA;many brain cells to editing text, don’t do that.  Resist over-correcting.&lt;/p&gt;&#xA;&lt;h2 id=&#34;assign-hotkeys&#34;&gt;assign hotkeys &lt;a href=&#34;#assign-hotkeys&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now you need to get yourself some hotkeys going, this is for the hot shit that&#xA;you use several times a minute.  You should be able to do things like swap&#xA;between the current file and the last file in one keystroke without wasting a&#xA;single brain cycle, it should be automatic.  Go to definition, go to reference,&#xA;no searching, searching is slow, find_files is slow.  These are tools for&#xA;exploration we are tyring to get real work done here.&lt;/p&gt;&#xA;&lt;p&gt;Here’s a few things you should be able to do if you want to keep up with your&#xA;Grandma, she’s been slayin these keys for years.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;go to definition&lt;/li&gt;&#xA;&lt;li&gt;go to reference&lt;/li&gt;&#xA;&lt;li&gt;find_files&lt;/li&gt;&#xA;&lt;li&gt;find and replace&lt;/li&gt;&#xA;&lt;li&gt;rename&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; add this file, commit, push&lt;/li&gt;&#xA;&lt;li&gt;go to the last file&lt;/li&gt;&#xA;&lt;li&gt;go up and down the jumplist&lt;/li&gt;&#xA;&lt;li&gt;go up and down the quickfix list&lt;/li&gt;&#xA;&lt;li&gt;list open files&lt;/li&gt;&#xA;&lt;li&gt;harpoon all the files you go to regularly&lt;/li&gt;&#xA;&lt;li&gt;format&lt;/li&gt;&#xA;&lt;li&gt;move around your files&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;fly&#34;&gt;fly &lt;a href=&#34;#fly&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Over time you should be using your command pallete less and less, this is not&#xA;designed to run every goddamn command through.  Note the ones you use a lot and&#xA;add keybinds.  If you are using one of those editors that don’t make it clear&#xA;what the fuck your running when you execute a command ask gippity, it can&#xA;probably knock out that binding in 30s just fine.&lt;/p&gt;&#xA;&lt;h2 id=&#34;inspiration&#34;&gt;inspiration &lt;a href=&#34;#inspiration&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The decline of “vim btw” by Sylvan Franklin.  It’s a pretty incredible video,&#xA;he is crushing these half satire dry humor tech content videos.  He nails that&#xA;with the death of vimBTW we lost the craft of knowing your editor in and out.&#xA;We lost the art of flying through text.  Now we have plugin kitties that say&#xA;vimBtw, but they really aren’t using any vim features past hjkl.&lt;/p&gt;&#xA;&lt;p&gt;[[ thoughts-724 ]]&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=RmnqdAidVeE&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://www.youtube.com/watch?v=RmnqdAidVeE&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-06 Notes</title>
    <id>https://waylonwalker.com/2025-07-06-notes/</id>
    <updated>2025-07-06T09:43:22Z</updated>
    <published>2025-07-06T09:43:22Z</published>
    <link href="https://waylonwalker.com/2025-07-06-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">hyprland volume control, I wasn&#39;t sure if I needed something specific for wayland/pipewire, nope pavucontrol just works.</summary>
    <content type="html">&lt;h2 id=&#34;cat-quest-iii&#34;&gt;Cat Quest III &lt;a href=&#34;#cat-quest-iii&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/b9aeb047-6e64-44f9-b067-0dadd951ad83.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/b9aeb047-6e64-44f9-b067-0dadd951ad83.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/b9aeb047-6e64-44f9-b067-0dadd951ad83.mp4&#34; type=&#34;video/mp4&#34;&gt;getting-ship-key.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;hyprland volume control, I wasn’t sure if I needed something specific for wayland/pipewire, nope pavucontrol just works.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;paru -S pavucontrol&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;hr/&gt;&#xA;&lt;p&gt;thinking about &lt;a href=&#34;/virtual-environment/&#34; class=&#34;glossary-term&#34; title=&#34;Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...&#34;&gt;virtual environment&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-05 Notes</title>
    <id>https://waylonwalker.com/2025-07-05-notes/</id>
    <updated>2025-07-05T10:35:50Z</updated>
    <published>2025-07-05T10:35:50Z</published>
    <link href="https://waylonwalker.com/2025-07-05-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">I might have gpg setup right for kdewallet on hyprland, and I just timed out the request before.</summary>
    <content type="html">&lt;hr/&gt;&#xA;&lt;p&gt;I might have gpg setup right for kdewallet on hyprland, and I just timed out the request before.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/0870a551-75a7-4547-a8a5-6fa1aad30716.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/0870a551-75a7-4547-a8a5-6fa1aad30716.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;Got &lt;code&gt;swaync&lt;/code&gt; working in hyprland.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/86aa4818-934c-4730-83b6-f26c247380f6.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/86aa4818-934c-4730-83b6-f26c247380f6.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;hyprland does not load its plugins by default, I don’t see anything in the&#xA;docs, but it appears that you need to &lt;code&gt;exec-once = hyprpm reload&lt;/code&gt; to reload all&#xA;enabled plugins on startup.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;fix broken waybar fonts&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;paru -S ttf-font-awesome&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;hr/&gt;&#xA;&lt;p&gt;Cat Quest III progress with Wyatt and a new save with Ayla&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/5ce8b10d-2755-4dd7-8049-77149dae8ccd.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/5ce8b10d-2755-4dd7-8049-77149dae8ccd.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;markata-glossary&#34;&gt;Markata Glossary &lt;a href=&#34;#markata-glossary&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Worked on my glossary ui and how it works with markata.  I think I finally got&#xA;something that autodetects glossary terms and swaps them with a hoverable&#xA;element that displays the definition.  getting the definition to remain on the&#xA;screen at all times and not fall of when the term is on one side of the page or&#xA;another was quite tricky.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/d4b3c75b-4d3c-465c-9368-bf66abb7f381.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/d4b3c75b-4d3c-465c-9368-bf66abb7f381.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2025-07-04 Notes</title>
    <id>https://waylonwalker.com/2025-07-04-notes/</id>
    <updated>2025-07-04T16:30:04Z</updated>
    <published>2025-07-04T16:30:04Z</published>
    <link href="https://waylonwalker.com/2025-07-04-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">Failed to gpg-setup-for-kdewallet correctly on hyprland, brave still complains. Maybe someday I&#39;ll figure it out and complete the post.</summary>
    <content type="html">&lt;p&gt;Failed to &lt;a href=&#34;/gpg-setup-for-kdewallet/&#34; class=&#34;wikilink&#34; data-title=&#34;gpg setup for kdewallet&#34; data-description=&#34;I&amp;#39;m trying to setup gpg for kdewallet on archlinux with hyprland so that brave shuts up. I&amp;#39;ve tried this, but brave still complains about the wallet setup,...&#34; data-date=&#34;2025-07-04&#34; data-preview=&#34;I&amp;#39;m trying to setup gpg for kdewallet on archlinux with hyprland so that brave shuts up. I&amp;#39;ve tried this, but brave still complains about the wallet setup,...&#34;&gt;gpg setup for kdewallet&lt;/a&gt; correctly on hyprland, brave still&#xA;complains.  Maybe someday I’ll figure it out and complete the post.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;I installed hyprpm plugins.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/2725367a-5810-4503-a95d-52898ec6afd9.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/2725367a-5810-4503-a95d-52898ec6afd9.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;Failed to fix Wyatt’s bazzite install, I think he is going to move forward with&#xA;hyprland as his main.  Somehow after trying to dual boot hyprland and bazzite&#xA;he ended up with bazzite dumping him into recovery mode on every boot and&#xA;saying the root account is locked.&lt;/p&gt;&#xA;&lt;p&gt;I did learn how to mount and chroot into a bazzite partition that is running&#xA;btrfs and rpm-ostree.  I’m still only partly sure what I’m doing so not really&#xA;worth a post about.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/45e02cfe-8c36-4173-9b48-81a3b7ab3889.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/45e02cfe-8c36-4173-9b48-81a3b7ab3889.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;Continued full detail on our Van, if its going to last we need to keep up on&#xA;it, Car Washes are expencive, aint got no extra $$ in this economy, goddamn I&#xA;sound like an old man.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/e9c7cdb8-5f1e-40d2-b6d3-600f6a878588.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/e9c7cdb8-5f1e-40d2-b6d3-600f6a878588.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>just fucking use kubernetes</title>
    <id>https://waylonwalker.com/just-fucking-use-kubernetes/</id>
    <updated>2025-07-01T12:46:33Z</updated>
    <published>2025-07-01T12:46:33Z</published>
    <link href="https://waylonwalker.com/just-fucking-use-kubernetes/" rel="alternate" type="text/html"></link>
    <summary type="text">You want to run containers?</summary>
    <content type="html">&lt;p&gt;You want to run containers?&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;JUST FUCKING USE KUBERNETES.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition tip&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Obvious satire&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;If you don&amp;#39;t like harsh language this is not the post for you.  Obviously&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;ripping off &lt;a href=&#34;https://motherfuckingwebsite.com/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/motherfuckingwebsite.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/motherfuckingwebsite.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;motherfuckingwebsite&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition warning&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;ThIs is &lt;a href=&#34;/ai-slop/&#34; class=&#34;glossary-term&#34; title=&#34;AI slop is unwanted AI content, generally shared by someone who did not review the output and is considered highly offensive and rude.&#34;&gt;AI SLoP&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;If you don&amp;#39;t like if you can fuck off to the next post, I&amp;#39;m having fun here,&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;but satire is not my strong suit and needed some help.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;but-its-complicated&#34;&gt;“But it’s complicated!” &lt;a href=&#34;#but-its-complicated&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Shut up.  Close twitter and fucking do something.  Life is complicated. You&#xA;know what else is complicated? Email. DNS. Life. Kubernetes is the least&#xA;painful way to orchestrate containers at scale. &lt;strong&gt;Docker Compose is for your&#xA;laptop.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Swarm is dead.&lt;/li&gt;&#xA;&lt;li&gt;Nomad is just sad.&lt;/li&gt;&#xA;&lt;li&gt;Systemd units? Get out of here.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;but-my-app-is-small&#34;&gt;“But my app is small!” &lt;a href=&#34;#but-my-app-is-small&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;SO IS YOUR AMBITION.&lt;/strong&gt;&#xA;You &lt;em&gt;could&lt;/em&gt; write a bunch of bash scripts and hope they work on prod.&#xA;You &lt;em&gt;could&lt;/em&gt; SSH into servers and handcraft your infra like it’s 2011.&#xA;Or you could &lt;strong&gt;just fucking use Kubernetes&lt;/strong&gt; and sleep at night.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;i-can-just-throw-my-script-in-crontab&#34;&gt;I can just throw my script in crontab &lt;a href=&#34;#i-can-just-throw-my-script-in-crontab&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Tell that to your boss when your cronjob failed 16 times in the last week&#xA;without anyone noticing. &lt;strong&gt;kubernete&lt;/strong&gt; makes it fucking simple, want retry ask&#xA;for it.  Hanging script, activeDeadlineSeconds that bitch.  Connecting to six&#xA;other services in your shitty ass infrastructure this shit retries automatically.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;i-dont-need-autoscaling&#34;&gt;“I don’t need autoscaling!” &lt;a href=&#34;#i-dont-need-autoscaling&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Cool. Tell that to your boss when the CEO tweets your link and the site goes&#xA;down harder than your last date.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;but-yaml-is-ugly&#34;&gt;“But YAML is ugly!” &lt;a href=&#34;#but-yaml-is-ugly&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;So is your Terraform, your Ansible, your Prometheus config, your custom CI/CD&#xA;scripts written in Bash, and the spaghetti you called a monolith before you&#xA;went microservices and made it worse.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;kubernetes-is-too-heavy&#34;&gt;“Kubernetes is too heavy!” &lt;a href=&#34;#kubernetes-is-too-heavy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Compared to what?&lt;/p&gt;&#xA;&lt;p&gt;Your handcrafted, artisanal, single-node LXC setup running on an Intel NUC from 2014?&lt;/p&gt;&#xA;&lt;p&gt;Heard of k3s? k0s? No.  These fuckers will have you running kubernetes running&#xA;on your grandpas goddamn gateway 2000 right next to AOL messenger without&#xA;splooging out the the ashes of his Marlboro Reds.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;ssh&#34;&gt;SSH? &lt;a href=&#34;#ssh&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You don’t need no goddam ssh to install your 200lb gorilla editor so you can&#xA;hand edit your init files and carefully contruct your init system.  This is&#xA;kubernetes, you use the fucking api, all you need is a connection and a&#xA;kubeconfig.  This motherfucker runs containers so you can keep your bitch-ass&#xA;editor where it belongs, off the fucking host machine!&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;what-if-its-overkill&#34;&gt;“What if it’s overkill?” &lt;a href=&#34;#what-if-its-overkill&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;What if YOU are underkill?&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;how-do-i-do-zero-downtime-deploys&#34;&gt;“How do I do zero-downtime deploys?” &lt;a href=&#34;#how-do-i-do-zero-downtime-deploys&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Probes my dude, you fucking probe your shit.  Rolling out a new deployment&#xA;kubernets won’t cut over to your broke ass release if that shit don’t pass. No&#xA;more writing janky scripts that SSH into prod and run &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; pull while praying to&#xA;the CI/CD gods.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;what-if-i-still-fuck-it-up---how-do-i-roll-back&#34;&gt;“What if I still fuck it up - How do I roll back?” &lt;a href=&#34;#what-if-i-still-fuck-it-up---how-do-i-roll-back&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;k9s&lt;/code&gt; is your best friend, pop that shit open find your broke ass deployment,&#xA;jump owner to the replicaset and roll that bitch back to the working shit.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;i-need-to-scale&#34;&gt;I need to scale &lt;a href=&#34;#i-need-to-scale&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This shit is built in, add a goddamn replica or 6 for fuck sake, need&#xA;autoscaling use the HPA.  This aint your granpas hand fucking crafted pet&#xA;server, its fucking cattle.  Load balancing just fucking happens, don’t think&#xA;about it just use it, and it will work for your six goddamn friends that&#xA;actually use your shit.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;i-want-gitops&#34;&gt;I want gitops &lt;a href=&#34;#i-want-gitops&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let me introduce you to argocd, this fucker uses helm so one fucking command&#xA;and your ass is on the beach while your dev team deploys their own shit.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;use-kubernetes&#34;&gt;USE KUBERNETES &lt;a href=&#34;#use-kubernetes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It fucking works.&lt;/li&gt;&#xA;&lt;li&gt;Everyone else is using it.&lt;/li&gt;&#xA;&lt;li&gt;There are like 500 open-source projects built just to make it easier.&lt;/li&gt;&#xA;&lt;li&gt;It runs on your laptop, your server, the cloud, and inside your dreams.&lt;/li&gt;&#xA;&lt;li&gt;It &lt;em&gt;will&lt;/em&gt; make your resume better.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;not-convinced&#34;&gt;Not convinced? &lt;a href=&#34;#not-convinced&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here’s your alternative stack:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;A bash script that restarts Docker when it dies.&lt;/li&gt;&#xA;&lt;li&gt;A Makefile that deploys via SCP.&lt;/li&gt;&#xA;&lt;li&gt;A cron job that prays to the log gods.&lt;/li&gt;&#xA;&lt;li&gt;A wiki page explaining how to debug your hand-rolled bullshit.&lt;/li&gt;&#xA;&lt;li&gt;You. Crying.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;so-yeah&#34;&gt;So yeah &lt;a href=&#34;#so-yeah&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Save yourself.&#xA;Save your team.&#xA;Save your infrastructure.&lt;/p&gt;&#xA;&lt;h2 id=&#34;just&#34;&gt;JUST &lt;a href=&#34;#just&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;fucking&#34;&gt;FUCKING &lt;a href=&#34;#fucking&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;use&#34;&gt;USE &lt;a href=&#34;#use&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;kubernetes&#34;&gt;KUBERNETES &lt;a href=&#34;#kubernetes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;(or don’t, and become a DevOps cautionary tale)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition seealso&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Seealso&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://motherfuckingwebsite.com/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/motherfuckingwebsite.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/motherfuckingwebsite.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;motherfuckingwebsite&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.justfuckingcode.com/&#34;&gt;justfuckingcode&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://justfuckingusereact.com/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/justfuckingusereact.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/justfuckingusereact.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;justfuckingusereact&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>markata parallel render</title>
    <id>https://waylonwalker.com/markata-parallel-render/</id>
    <updated>2025-07-01T08:05:58Z</updated>
    <published>2025-07-01T08:05:58Z</published>
    <link href="https://waylonwalker.com/markata-parallel-render/" rel="alternate" type="text/html"></link>
    <content type="html">&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  _._   __/__   __  __ _/_   Recorded: 07:53:56  Samples:  &lt;span class=&#34;m&#34;&gt;71681&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; /_//_/// /_&lt;span class=&#34;se&#34;&gt;\ &lt;/span&gt;/ //_// / //_&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;/ //     Duration: 92.741    CPU time: 91.748&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/_/                      v4.5.1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Program: /home/waylon/git/waylonwalker.com/.venv/bin/markata build --pdb&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;92.740 Markata.run  markata/__init__.py:443&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 92.714 HookCaller.__call__  pluggy/_hooks.py:479&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; frames hidden&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  pluggy&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         92.714 PluginManager._hookexec  pluggy/_manager.py:106&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;- 38.207 wrapper_register  markata/hookspec.py:265&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;- 26.105 render  plugins/link_collector.py:59&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;- 10.012 BeautifulSoup.__init__  bs4/__init__.py:122&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;14&lt;/span&gt; frames hidden&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  bs4, html&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;- 5.599 &amp;lt;listcomp&amp;gt;  plugins/link_collector.py:181&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;- 4.050 &amp;lt;listcomp&amp;gt;  plugins/link_collector.py:173&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;- 3.466 Markata.map  markata/__init__.py:565&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 2.092   markata/__init__.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 0.942 BeautifulSoup.find_all  bs4/element.py:2008&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;        &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; frames hidden&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  bs4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;- 9.107 render  markata/plugins/render_markdown.py:260&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 8.902 result_iterator  concurrent/futures/_base.py:612&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;        &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt; frames hidden&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  concurrent, threading, &amp;lt;built-in&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 2.079 glob  markata/plugins/glob.py:112&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 1.909 &amp;lt;listcomp&amp;gt;  markata/plugins/glob.py:161&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;        &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 1.908 Future.result  concurrent/futures/_base.py:428&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;              &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; frames hidden&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  concurrent, threading, &amp;lt;built-in&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;- 25.708 render  markata/plugins/post_template.py:639&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 25.612 render_article  markata/plugins/post_template.py:404&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;- 22.223 &amp;lt;dictcomp&amp;gt;  markata/plugins/post_template.py:421&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 22.200 render_template  markata/plugins/post_template.py:429&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 22.185 Template.render  jinja2/environment.py:1269&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;        &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 21.210 root  templates/post.html:4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 20.937 root  templates/base.html:4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;              &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 20.455 block_content  templates/post.html:17&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;                 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;- 11.212 root  templates/recent.html:4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;                 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 10.853 root  templates/feed_sm_partial.html:4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;                 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 8.392 Environment.getattr  jinja2/environment.py:480&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;                 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 8.328 Feed.posts  markata/plugins/feeds.py:329&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;                 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;           &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 8.300 Feed.map  markata/plugins/feeds.py:352&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;                 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 7.963 Markata.map  markata/__init__.py:565&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;                 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;                 &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 7.786 &amp;lt;listcomp&amp;gt;  markata/__init__.py:628&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;                 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 6.465   markata/__init__.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;                 &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 8.486 call  jinja2/runtime.py:260&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 8.468 Feed.map  markata/plugins/feeds.py:352&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;                       &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 8.394 Markata.map  markata/__init__.py:565&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 8.326 &amp;lt;listcomp&amp;gt;  markata/__init__.py:628&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;                             &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 7.086   markata/__init__.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 3.015 Cache.set  diskcache/core.py:749&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;           &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; frames hidden&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  diskcache&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;- 7.788 save  markata/plugins/feeds.py:462&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 7.779 create_page  markata/plugins/feeds.py:493&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;- 4.530 Template.render  jinja2/environment.py:1269&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 2.437 root  templates/feed.html:4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 2.360 root  templates/base.html:4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 2.231 block_content  templates/feed.html:17&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;           &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 2.118 root  templates/feed_partial.html:4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 1.298 Environment.getattr  jinja2/environment.py:480&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;                 &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 1.290 Feed.posts  markata/plugins/feeds.py:329&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 1.290 Feed.map  markata/plugins/feeds.py:352&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;                       &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 1.276 Markata.map  markata/__init__.py:565&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;- 1.325 Feed.map  markata/plugins/feeds.py:352&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 1.317 Markata.map  markata/__init__.py:565&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 1.237 Cache.set  diskcache/core.py:749&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;- 7.029 pre_render  markata/plugins/auto_description.py:185&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 6.840 set_description  markata/plugins/auto_description.py:137&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 5.791 get_description  markata/plugins/auto_description.py:107&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;- 4.485 MarkdownIt.parse  markdown_it/main.py:256&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; frames hidden&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  markdown_it&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 1.066 MarkdownIt.__init__  markdown_it/main.py:33&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;- 5.730 pre_render  markata/plugins/analytics.py:102&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;- 2.397 savefig  matplotlib/pyplot.py:1238&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;     &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt; frames hidden&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  matplotlib&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 2.004 heatmap  seaborn/matrix.py:355&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;        &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt; frames hidden&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  seaborn, matplotlib&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;- 1.704 post_render  plugins/permalink_aria.py:40&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 1.588 process_html_content  plugins/permalink_aria.py:13&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;- 1.619 save  markata/plugins/publish_source.py:83&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 1.216 Post.dumps  markata/plugins/post_model.py:333&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 1.203 Post.yaml  markata/plugins/post_model.py:254&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;        &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 1.044 dump  yaml/__init__.py:248&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;              &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; frames hidden&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  yaml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 1.183 post_render  plugins/wikilink_hover.py:104&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;- 1.094 do_hover_links  plugins/wikilink_hover.py:126&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;07:55:38&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; save &lt;span class=&#34;nb&#34;&gt;complete&lt;/span&gt;                                                                            __init__.py:465&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           teardown running                                                                         __init__.py:462&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           teardown &lt;span class=&#34;nb&#34;&gt;complete&lt;/span&gt;                                                                        __init__.py:465&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           lifetime cache hit rate 0.17%                                                            __init__.py:471&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           lifetime cache hits/misses 36/21118                                                      __init__.py:476&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           run cache hit rate 0.17%                                                                 __init__.py:482&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           run cache hits/misses 36/21118                                                           __init__.py:487&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Map Cache Statistics:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Total calls: &lt;span class=&#34;m&#34;&gt;17197&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Cache hits: &lt;span class=&#34;m&#34;&gt;15317&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Cache misses: &lt;span class=&#34;m&#34;&gt;1880&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Hit rate: 89.1%&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Cache size: &lt;span class=&#34;m&#34;&gt;1880&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>principal-engineer-at-meta</title>
    <id>https://waylonwalker.com/principal-engineer-at-meta/</id>
    <updated>2025-06-30T20:22:08Z</updated>
    <published>2025-06-30T20:22:08Z</published>
    <link href="https://waylonwalker.com/principal-engineer-at-meta/" rel="alternate" type="text/html"></link>
    <summary type="text">Jake Bolam principal engineer at Meta, has some of the best career advice for those looking to become principal or just be better at their craft. This video...</summary>
    <content type="html">&lt;p&gt;Jake Bolam principal engineer at Meta, has some of the best career advice for&#xA;those looking to become principal or just be better at their craft.  This&#xA;&lt;a href=&#34;https://www.youtube.com/clip/UgkxFp3xC-SrxNtLw3FW24b26DRhNrMra3m8&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;video&lt;/a&gt; was&#xA;such a banger I had to bring it in as a full post, and not just a thought. It&#xA;was a random YouTube auto play, something that I probably wouldn’t have clicked&#xA;on given title an thumbnail, but turned out to be very impactful.  Jake is such&#xA;a smart guy with a lot of great insights, and I can tell he thinks really quick&#xA;on his feet, he just pulled all of these things out of his head on the fly.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;YT Algorithm Gold&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;I don&amp;#39;t know what it is about this title and thumbnail, but it gives me &amp;#34;ex&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;google, ex facebook, ex microsoft, $100M engineer&amp;#34; vibes in a cringy and&#xA;not satire kind of way.  I would have never clicked on it, it autoplayed&#xA;after a podcast and it hit, immediately I’m like who are these guys? subd&#xA;and started this post it was so good.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;long-on-boarding&#34;&gt;Long On Boarding &lt;a href=&#34;#long-on-boarding&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Jake had a super long period of on boarding at meta, he came in as a seasoned&#xA;leader yet took many months to get going.  This was a phase during or near the&#xA;end of the COVID-19 pandemic and his team was so swamped they were unable to&#xA;give him time to help him.  He felt his on boarding was taking longer than he&#xA;wanted, and found backend work at Instagram.  Moving to Instagram he jumped in&#xA;and starting making impact quick and found his way moving up the ladder serving&#xA;as tech lead for several teams.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I grabbed a ton of clips from this video, but did not for this section as it&#xA;was kinda long.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;always-open-for-a-chat&#34;&gt;Always open for a Chat &lt;a href=&#34;#always-open-for-a-chat&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As busy as Jake is, he leaves “Always open for a chat” on his internal profile.&#xA;He does not care about rank into account, the intern can ask for a coffee chat.&#xA;His key metric is how well is this person receiving information.  If they are&#xA;coming back with the same questions every 3 months he is going to start telling&#xA;them he does not have the time.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtube.com/clip/Ugkxjwsds5Z9qqqIlJonyHNZDy4B_ArcLjNx?si=9Oi-ODqqYR215kJn&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://i.ytimg.com/vi/QUhC5BDZt-E/maxresdefault.jpg&#34; alt=&#34;✂️ Always Open for a Chat&#34;/ data-glightbox=&#34;description: ✂️ Always Open for a Chat&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I’ve had a fair amount of personal experience with this.  Early in my career I&#xA;experience quite a bit of higher ranks feeling untouchable, they were&#xA;impossible to get a hold of, blew you off, and had more meetings than anyone&#xA;could bear.  It made me really look outside the company for inspiration and&#xA;mentorship most of the time.&lt;/p&gt;&#xA;&lt;h2 id=&#34;theres-always-time-for-coffee&#34;&gt;There’s always time for coffee &lt;a href=&#34;#theres-always-time-for-coffee&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;While I don’t have “Always open for a chat” on my&#xA;profile,  I’ve had many of these types of conversations with my peers.  It&#xA;might be about something career related or more often how to implement&#xA;containers, cloud, and good practices into small teams.&lt;/p&gt;&#xA;&lt;p&gt;I remember a course in college shared the famous quote “There’s always time for&#xA;coffee” and it stuck with me.  The demonstration goes that no matter how much&#xA;you fill your day with big rocks and tiny sand particles, there’s always a&#xA;little more room for coffee, and he dumps coffee into a jar that he has already&#xA;filled up.&lt;/p&gt;&#xA;&lt;p&gt;These conversations often become very impactful.  They can lead to having good&#xA;relationships or job opportunities.&lt;/p&gt;&#xA;&lt;h2 id=&#34;if-we-are-not-getting-enough-feedback-move-faster&#34;&gt;If we are not getting enough feedback, move faster &lt;a href=&#34;#if-we-are-not-getting-enough-feedback-move-faster&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtube.com/clip/UgkxBSPjfIERR8JcJXCOVXduYCRyn8VO6Kl0?si=MVaRDQROXC0D7Wn9&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://i.ytimg.com/vi/QUhC5BDZt-E/maxresdefault.jpg&#34; alt=&#34;✂️ rollout faster&#34;/ data-glightbox=&#34;description: ✂️ rollout faster&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;take-down-prod-sometimes&#34;&gt;Take Down Prod Sometimes &lt;a href=&#34;#take-down-prod-sometimes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This was an interesting take.  None of us really want to take down prod.  No&#xA;one is advocating for major outages, but this is is not 2005 shipping out&#xA;software on CD’s anymore.  This take 100% depends on what you do and where you&#xA;work.  Obviously some sectors cannot take any downtime; nuclear power, cloud&#xA;systems supporting nuclear power, navigation systems, idk theres a bunch of&#xA;stuff.  I bet if you are reading this that aint you.  You’re probably writing&#xA;some backend dashboard for the marketing team, or building out a website to&#xA;upload cat photos on … Wait, thats literally what jake is doing here.&lt;/p&gt;&#xA;&lt;p&gt;Idea being if you don’t occasionally cause some small production issues, you&#xA;probably are not taking enough risk.  You are moving too slow, getting feedback&#xA;too late, your competitors just ran past you.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtube.com/clip/Ugkx-Jofyn4OmTOkxFzxU__5_7BAeG3O3IkE?si=8yAj3H_ZB-7vjw0W&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://i.ytimg.com/vi/QUhC5BDZt-E/maxresdefault.jpg&#34; alt=&#34;✂️ take down prod sometimes&#34;/ data-glightbox=&#34;description: ✂️ take down prod sometimes&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;go-where-you-are-rare&#34;&gt;Go where you are rare &lt;a href=&#34;#go-where-you-are-rare&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I find this interesting.  I’ve found myself within non-software companies doing&#xA;sofware and data analysis most of my career, the amount of value you can bring&#xA;by being that one guy that knows some pandas, containerization, how to run a vm&#xA;is massive in an org that uses excel as its primary database.  The rest of the&#xA;org generally has massive knowledge in the business, but greatly slowed down by&#xA;their ability to find value in the data.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtube.com/clip/UgkxZHKW3EHYH9Z8qPvyNlLQYN55BkufhmsJ?si=SwkO7bfrE16WFoyN&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://i.ytimg.com/vi/QUhC5BDZt-E/maxresdefault.jpg&#34; alt=&#34;✂️ go where your rare&#34;/ data-glightbox=&#34;description: ✂️ go where your rare&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;do-work-that-you-dont-get-credit-for&#34;&gt;Do work that you don’t get credit for &lt;a href=&#34;#do-work-that-you-dont-get-credit-for&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’ve worked with a lot of people in my 15 years of professional work, and I can&#xA;tell you the worst ones to work with are the ones that focus too much on value.&#xA;Every ounce of effort they bring needs to be backed by dollars comming into the&#xA;business.  I’ve seen this shake out a number of ways.  You got the guy who sits&#xA;on his ass all of January waiting for goals to be set, you got the guy who&#xA;holds everything he knows close to his chest so that he is the one that can&#xA;take the glory, and you got the guy who wont ever; refactor his code, cleanup,&#xA;lint, update dependencies, and so on; because that does not have direct line to&#xA;dollars coming into the business.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtube.com/clip/UgkxFp3xC-SrxNtLw3FW24b26DRhNrMra3m8?si=5I5JhuxwNFKWZsL7&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://i.ytimg.com/vi/QUhC5BDZt-E/maxresdefault.jpg&#34; alt=&#34;✂️ 20% of time won’t get credit&#34;/ data-glightbox=&#34;description: ✂️ 20% of time won’t get credit&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The clip goes a bit further than this, and hints at things that are going to&#xA;enable you and your org to move faster.  You might shave off 2 minutes off of&#xA;ci, or docker builds.  You might give everyone an easy way to run dev&#xA;containers with production like dependencies in a snap.  You might give them a&#xA;way to clone prod data into a sandbox.  These type of things provide no dollars&#xA;to the company, it’s likely that few will notice but damn they add up to an&#xA;efficient running organization.&lt;/p&gt;&#xA;&lt;h2 id=&#34;work-diary---the-value-of-writing-things-down&#34;&gt;Work Diary - the value of writing things down &lt;a href=&#34;#work-diary---the-value-of-writing-things-down&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This one hits home, for far too long I’ve been in between note taking systems&#xA;and am finally getting [[ marakta ]] setup to build out a really good&#xA;zettelkasten style work notes.  I’ve kinda had this on my blog for a long time,&#xA;but not fully.  I think the piece that I am missing here is the dumping ground.&#xA;I don’t &lt;strong&gt;yet&lt;/strong&gt; have a daily notes implementation that lets me just dump idea&#xA;onto a page that I care little about, but is the process of starting something&#xA;bigger, crosslinking between people, meetings, tasks, and launchdocs.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtube.com/clip/UgkxBC5Y_WL40hiEHY_zqjOVkLwkSQyyYvcC?si=l_tsY238JstdFSaA&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://i.ytimg.com/vi/QUhC5BDZt-E/maxresdefault.jpg&#34; alt=&#34;✂️ work diary&#34;/ data-glightbox=&#34;description: ✂️ work diary&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I hadn’t heard of the term launchdoc before this, but I took it and I am using&#xA;it.  I generally do an ok doc in the changelog of my products and spice it up&#xA;to go to the announcement chat channel, but I don’t fully keep record of it,&#xA;pulling the changelog into a launchdoc gives me that chance to spice it up and&#xA;have the language it needs to go right into chat.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>virt manager on bazzite</title>
    <id>https://waylonwalker.com/virt-manager-on-bazzite/</id>
    <updated>2025-06-27T21:09:05Z</updated>
    <published>2025-06-27T21:09:05Z</published>
    <link href="https://waylonwalker.com/virt-manager-on-bazzite/" rel="alternate" type="text/html"></link>
    <summary type="text">I got virtual machine manager running on two Bazzite machines today. It was a bit tricky, more than I thought actually. I ran into all sorts of...</summary>
    <content type="html">&lt;p&gt;I got virtual machine manager running on two Bazzite machines today.  It was a&#xA;bit tricky, more than I thought actually.  I ran into all sorts of&#xA;virtualisation not setup issues when I tried the flatpak.  Then I found that&#xA;Bazzite comes with a &lt;code&gt;ujust setup-virtualization&lt;/code&gt; command that does all the&#xA;work for me.  I tried that and again virtual machine manager was here, but not&#xA;working, this time it feels like flatpak issues.&lt;/p&gt;&#xA;&lt;p&gt;In a Hail Mary attempt I got it working by using an ubuntu distrobox container&#xA;to run the UI.  And it worked!&lt;/p&gt;&#xA;&lt;h2 id=&#34;from-the-host&#34;&gt;from the host &lt;a href=&#34;#from-the-host&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;From the host we create the container to use from distrobox.  This is an ubuntu&#xA;machine, it can be any os of your choosing, preferably one that you are&#xA;familiar with and contains virt-manager in its package repos.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;distrobox create -i ubuntu&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;distrobox enter ubuntu&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;from-inside-the-distrobox-container&#34;&gt;from inside the distrobox container &lt;a href=&#34;#from-inside-the-distrobox-container&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now that we are in the distrobox we are no longer in an immutable distro and we&#xA;can easily install anything we want.  I actually like this process.  I might&#xA;have shit like this that I use for a month or a few months, on a normal distro,&#xA;this is fully installed on the os, raises the potential of package conflicts&#xA;and lengthens the update time.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt upgrade&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install virtinst virt-manager&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;virt-manager&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;along-the-way&#34;&gt;Along the way &lt;a href=&#34;#along-the-way&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I tried adding myself to the libvirt group, and expicitly setting the socket&#xA;path. After setting up another machine I realized these steps were unnecessary.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo usermod -aG libvirt &lt;span class=&#34;nv&#34;&gt;$USER&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;LIBVIRT_DEFAULT_URI&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;qemu+unix:///system&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls -l /run/libvirt/libvirt-sock&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;virt-install --version&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;After fully reading through `ujust setup-virtualization` I realized that it&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;adds me to the libvirt group, so that’s why it is not needed.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;an-even-better-guide&#34;&gt;An even Better Guide &lt;a href=&#34;#an-even-better-guide&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I later found [[ thoughts-723 ]] there is documentation for setting up virtual&#xA;machine manager in distrobox in the distrobox docs.  It even calls out running&#xA;on an immutable distro like bazzite like it knew I was coming.&lt;/p&gt;&#xA;&lt;h2 id=&#34;full-log&#34;&gt;full log &lt;a href=&#34;#full-log&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;waylon@razorcrest:~$ distrobox create -i ubuntu&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Image ubuntu not found.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Do you want to pull the image now? &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Y/n&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;: y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Resolved &lt;span class=&#34;s2&#34;&gt;&amp;#34;ubuntu&amp;#34;&lt;/span&gt; as an &lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;/etc/containers/registries.conf.d/000-shortnames.conf&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Trying to pull docker.io/library/ubuntu:latest...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Getting image &lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; signatures&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Copying blob d9d352c11bbd &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;   &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Copying config bf16bdcff9 &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;   &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Writing manifest to image destination&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bf16bdcff9c96b76a6d417bd8f0a3abe0e55c0ed9bdb3549e906834e2592fd5f&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Creating &lt;span class=&#34;s1&#34;&gt;&amp;#39;ubuntu&amp;#39;&lt;/span&gt; using image ubuntu  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; OK &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Distrobox &lt;span class=&#34;s1&#34;&gt;&amp;#39;ubuntu&amp;#39;&lt;/span&gt; successfully created.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;To enter, run:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;distrobox enter ubuntu&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;waylon@razorcrest:~$ distrobox enter ubuntu&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Starting container...                     &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; OK &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Installing basic packages...              &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; OK &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up devpts mounts...               &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; OK &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up read-only mounts...            &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; OK &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up read-write mounts...           &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; OK &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up host&lt;span class=&#34;s1&#34;&gt;&amp;#39;s sockets integration...  [ OK ]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;Integrating host&amp;#39;&lt;/span&gt;s themes, icons, fonts...  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; OK &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up distrobox profile...           &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; OK &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up sudo...                        &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; OK &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up user groups...                 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; OK &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up user&lt;span class=&#34;s1&#34;&gt;&amp;#39;s group list...           [ OK ]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;Setting up existing user...               [ OK ]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;Ensuring user&amp;#39;&lt;/span&gt;s access...                 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; OK &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Container Setup Complete!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;📦&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;waylon@ubuntu ~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;$ sudo apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install virtinst&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Hit:1 http://security.ubuntu.com/ubuntu noble-security InRelease&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Hit:2 http://archive.ubuntu.com/ubuntu noble InRelease&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Hit:3 http://archive.ubuntu.com/ubuntu noble-updates InRelease&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Hit:4 http://archive.ubuntu.com/ubuntu noble-backports InRelease&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Reading package lists... Done&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Building dependency tree... Done&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Reading state information... Done&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt; packages can be upgraded. Run &lt;span class=&#34;s1&#34;&gt;&amp;#39;apt list --upgradable&amp;#39;&lt;/span&gt; to see them.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Reading package lists... Done&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Building dependency tree... Done&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Reading state information... Done&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;The following additional packages will be installed:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  gir1.2-freedesktop gir1.2-libosinfo-1.0 glib-networking glib-networking-common glib-networking-services&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  gstreamer1.0-plugins-base i965-va-driver intel-media-va-driver iso-codes libaio1t64 libasyncns0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libboost-iostreams1.83.0 libboost-thread1.83.0 libburn4t64 libcacard0 libcdparanoia0 libcurl3t64-gnutls&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libdaxctl1 libduktape207 libdw1t64 libflac12t64 libfuse3-3 libgstreamer-plugins-base1.0-0 libgstreamer1.0-0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libgtk-vnc-2.0-0 libgvnc-1.0-0 libigdgmm12 libiscsi7 libisoburn1t64 libisofs6t64 libjson-glib-1.0-0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libjson-glib-1.0-common libmp3lame0 libmpg123-0t64 libndctl6 libnfs14 libnspr4 libnss3 libnuma1 libogg0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libopus0 liborc-0.4-0t64 libosinfo-1.0-0 libosinfo-l10n libpcsclite1 libphodav-3.0-0 libphodav-3.0-common&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libpmem1 libpmemobj1 libpolkit-gobject-1-0 libproxy1v5 libpulse0 librados2 librbd1 librdmacm1t64 libsndfile1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libsoup-3.0-0 libsoup-3.0-common libspice-client-glib-2.0-8 libspice-client-gtk-3.0-5 libtheora0 libunwind8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  liburing2 libusb-1.0-0 libusbredirhost1t64 libusbredirparser1t64 libva-x11-2 libva2 libvirt-clients&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libvirt-glib-1.0-0 libvirt-glib-1.0-data libvirt-l10n libvirt0 libvisual-0.4-0 libvorbis0a libvorbisenc2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libvte-2.91-0 libxslt1.1 libyajl2 mesa-va-drivers osinfo-db pci.ids python3-certifi python3-chardet&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  python3-idna python3-libvirt python3-libxml2 python3-pkg-resources python3-requests python3-urllib3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  qemu-block-extra qemu-utils spice-client-glib-usb-acl-helper usb.ids va-driver-all virt-viewer xorriso&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Suggested packages:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  gvfs i965-va-driver-shaders isoquery fuse3 libvisual-0.4-plugins gstreamer1.0-tools opus-tools pcscd pulseaudio&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  gstreamer1.0-libav gstreamer1.0-plugins-bad gstreamer1.0-plugins-good libvirt-clients-qemu libvirt-daemon&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libvirt-login-shell python3-setuptools python3-cryptography python3-openssl python3-socks python-requests-doc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  python3-brotli netcat python3-argcomplete xorriso-tcltk jigit cdck&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;The following NEW packages will be installed:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  gir1.2-freedesktop gir1.2-libosinfo-1.0 glib-networking glib-networking-common glib-networking-services&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  gstreamer1.0-plugins-base i965-va-driver intel-media-va-driver iso-codes libaio1t64 libasyncns0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libboost-iostreams1.83.0 libboost-thread1.83.0 libburn4t64 libcacard0 libcdparanoia0 libcurl3t64-gnutls&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libdaxctl1 libduktape207 libdw1t64 libflac12t64 libfuse3-3 libgstreamer-plugins-base1.0-0 libgstreamer1.0-0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libgtk-vnc-2.0-0 libgvnc-1.0-0 libigdgmm12 libiscsi7 libisoburn1t64 libisofs6t64 libjson-glib-1.0-0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libjson-glib-1.0-common libmp3lame0 libmpg123-0t64 libndctl6 libnfs14 libnspr4 libnss3 libnuma1 libogg0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libopus0 liborc-0.4-0t64 libosinfo-1.0-0 libosinfo-l10n libpcsclite1 libphodav-3.0-0 libphodav-3.0-common&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libpmem1 libpmemobj1 libpolkit-gobject-1-0 libproxy1v5 libpulse0 librados2 librbd1 librdmacm1t64 libsndfile1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libsoup-3.0-0 libsoup-3.0-common libspice-client-glib-2.0-8 libspice-client-gtk-3.0-5 libtheora0 libunwind8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  liburing2 libusb-1.0-0 libusbredirhost1t64 libusbredirparser1t64 libva-x11-2 libva2 libvirt-clients&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libvirt-glib-1.0-0 libvirt-glib-1.0-data libvirt-l10n libvirt0 libvisual-0.4-0 libvorbis0a libvorbisenc2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libvte-2.91-0 libxslt1.1 libyajl2 mesa-va-drivers osinfo-db pci.ids python3-certifi python3-chardet&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  python3-idna python3-libvirt python3-libxml2 python3-pkg-resources python3-requests python3-urllib3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  qemu-block-extra qemu-utils spice-client-glib-usb-acl-helper usb.ids va-driver-all virt-viewer virtinst xorriso&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; upgraded, &lt;span class=&#34;m&#34;&gt;98&lt;/span&gt; newly installed, &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; to remove and &lt;span class=&#34;m&#34;&gt;4&lt;/span&gt; not upgraded.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Need to get 34.2 MB of archives.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;After this operation, &lt;span class=&#34;m&#34;&gt;143&lt;/span&gt; MB of additional disk space will be used.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Do you want to &lt;span class=&#34;k&#34;&gt;continue&lt;/span&gt;? &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Y/n&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:1 http://archive.ubuntu.com/ubuntu noble/main amd64 iso-codes all 4.16.0-1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;3,492 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:2 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 python3-pkg-resources all 68.1.2-2ubuntu1.2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;168&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:3 http://archive.ubuntu.com/ubuntu noble/main amd64 libfuse3-3 amd64 3.14.0-5build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;83.1 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:4 http://archive.ubuntu.com/ubuntu noble/main amd64 libnuma1 amd64 2.0.18-1build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;23.3 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:5 http://archive.ubuntu.com/ubuntu noble/main amd64 libusb-1.0-0 amd64 2:1.0.27-1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;54.0 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:6 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 pci.ids all 0.0~2024.03.31-1ubuntu0.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;275&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:7 http://archive.ubuntu.com/ubuntu noble/main amd64 usb.ids all 2024.03.18-1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;223&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:8 http://archive.ubuntu.com/ubuntu noble/main amd64 gir1.2-freedesktop amd64 1.80.1-1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;49.7 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:9 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libcurl3t64-gnutls amd64 8.5.0-2ubuntu10.6 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;333&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:10 http://archive.ubuntu.com/ubuntu noble/main amd64 libduktape207 amd64 2.7.0+tests-0ubuntu3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;143&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:11 http://archive.ubuntu.com/ubuntu noble/main amd64 libproxy1v5 amd64 0.5.4-4build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;26.5 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:12 http://archive.ubuntu.com/ubuntu noble/main amd64 glib-networking-common all 2.80.0-1build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;6,702 B&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:13 http://archive.ubuntu.com/ubuntu noble/main amd64 glib-networking-services amd64 2.80.0-1build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;12.8 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:14 http://archive.ubuntu.com/ubuntu noble/main amd64 glib-networking amd64 2.80.0-1build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;64.1 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:15 http://archive.ubuntu.com/ubuntu noble/main amd64 libcdparanoia0 amd64 3.10.2+debian-14build3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;48.5 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:16 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libdw1t64 amd64 0.190-1.1ubuntu0.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;261&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:17 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libunwind8 amd64 1.6.2-3build1.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;55.3 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:18 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libgstreamer1.0-0 amd64 1.24.2-1ubuntu0.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;1,165 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:19 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 liborc-0.4-0t64 amd64 1:0.4.38-1ubuntu0.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;207&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:20 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libgstreamer-plugins-base1.0-0 amd64 1.24.2-1ubuntu0.2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;862&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:21 http://archive.ubuntu.com/ubuntu noble/main amd64 libogg0 amd64 1.3.5-3build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;22.7 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:22 http://archive.ubuntu.com/ubuntu noble/main amd64 libopus0 amd64 1.4-1build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;208&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:23 http://archive.ubuntu.com/ubuntu noble/main amd64 libtheora0 amd64 1.1.1+dfsg.1-16.1build3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;211&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:24 http://archive.ubuntu.com/ubuntu noble/main amd64 libvisual-0.4-0 amd64 0.4.2-2build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;115&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:25 http://archive.ubuntu.com/ubuntu noble/main amd64 libvorbis0a amd64 1.3.7-1build3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;97.6 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:26 http://archive.ubuntu.com/ubuntu noble/main amd64 libvorbisenc2 amd64 1.3.7-1build3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;80.8 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:27 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 gstreamer1.0-plugins-base amd64 1.24.2-1ubuntu0.2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;721&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:28 http://archive.ubuntu.com/ubuntu noble/universe amd64 libva2 amd64 2.20.0-2build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;66.2 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:29 http://archive.ubuntu.com/ubuntu noble/universe amd64 libigdgmm12 amd64 22.3.17+ds1-1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;145&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:30 http://archive.ubuntu.com/ubuntu noble/universe amd64 intel-media-va-driver amd64 24.1.0+dfsg1-1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;4,022 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:31 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libaio1t64 amd64 0.3.113-6build1.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;7,210 B&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:32 http://archive.ubuntu.com/ubuntu noble/main amd64 libasyncns0 amd64 0.8-6build4 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;11.3 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:33 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libboost-iostreams1.83.0 amd64 1.83.0-2.1ubuntu3.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;259&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:34 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libboost-thread1.83.0 amd64 1.83.0-2.1ubuntu3.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;276&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:35 http://archive.ubuntu.com/ubuntu noble/main amd64 libburn4t64 amd64 1.5.6-1.1build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;158&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:36 http://archive.ubuntu.com/ubuntu noble/main amd64 libnspr4 amd64 2:4.35-1.1build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;117&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:37 http://archive.ubuntu.com/ubuntu noble/main amd64 libnss3 amd64 2:3.98-1build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;1,445 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:38 http://archive.ubuntu.com/ubuntu noble/main amd64 libpcsclite1 amd64 2.0.3-1build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;21.4 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:39 http://archive.ubuntu.com/ubuntu noble/main amd64 libcacard0 amd64 1:2.8.0-3build4 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;36.5 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:40 http://archive.ubuntu.com/ubuntu noble/main amd64 libdaxctl1 amd64 77-2ubuntu2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;21.4 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:41 http://archive.ubuntu.com/ubuntu noble/main amd64 libflac12t64 amd64 1.4.3+ds-2.1ubuntu2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;197&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:42 http://archive.ubuntu.com/ubuntu noble/main amd64 libmp3lame0 amd64 3.100-6build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;142&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:43 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libmpg123-0t64 amd64 1.32.5-1ubuntu1.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;169&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:44 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libsndfile1 amd64 1.2.2-1ubuntu5.24.04.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;209&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:45 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libpulse0 amd64 1:16.1+dfsg1-2ubuntu10.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;292&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:46 http://archive.ubuntu.com/ubuntu noble/universe amd64 libgvnc-1.0-0 amd64 1.3.1-1build2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;67.1 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:47 http://archive.ubuntu.com/ubuntu noble/universe amd64 libgtk-vnc-2.0-0 amd64 1.3.1-1build2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;28.9 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:48 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 librdmacm1t64 amd64 50.0-2ubuntu0.2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;70.7 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:49 http://archive.ubuntu.com/ubuntu noble/main amd64 libiscsi7 amd64 1.19.0-3build4 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;68.7 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:50 http://archive.ubuntu.com/ubuntu noble/main amd64 libisofs6t64 amd64 1.5.6.pl01-1.1ubuntu2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;220&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:51 http://archive.ubuntu.com/ubuntu noble/main amd64 libisoburn1t64 amd64 1:1.5.6-1.1ubuntu3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;405&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:52 http://archive.ubuntu.com/ubuntu noble/main amd64 libjson-glib-1.0-common all 1.8.0-2build2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;4,244 B&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:53 http://archive.ubuntu.com/ubuntu noble/main amd64 libjson-glib-1.0-0 amd64 1.8.0-2build2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;68.0 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:54 http://archive.ubuntu.com/ubuntu noble/main amd64 libndctl6 amd64 77-2ubuntu2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;62.8 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:55 http://archive.ubuntu.com/ubuntu noble/main amd64 libnfs14 amd64 5.0.2-1build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;109&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:56 http://archive.ubuntu.com/ubuntu noble/universe amd64 libphodav-3.0-common all 3.0-8build3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;14.9 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:57 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libsoup-3.0-common all 3.4.4-5ubuntu0.4 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;11.1 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:58 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libsoup-3.0-0 amd64 3.4.4-5ubuntu0.4 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;290&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:59 http://archive.ubuntu.com/ubuntu noble/universe amd64 libphodav-3.0-0 amd64 3.0-8build3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;29.9 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:60 http://archive.ubuntu.com/ubuntu noble/main amd64 libpmem1 amd64 1.13.1-1.1ubuntu2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;84.8 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:61 http://archive.ubuntu.com/ubuntu noble/main amd64 libpmemobj1 amd64 1.13.1-1.1ubuntu2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;116&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:62 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libpolkit-gobject-1-0 amd64 124-2ubuntu1.24.04.2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;49.1 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:63 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 librados2 amd64 19.2.0-0ubuntu0.24.04.2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;3,972 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:64 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 librbd1 amd64 19.2.0-0ubuntu0.24.04.2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;3,351 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:65 http://archive.ubuntu.com/ubuntu noble/universe amd64 spice-client-glib-usb-acl-helper amd64 0.42-2ubuntu2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;12.5 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:66 http://archive.ubuntu.com/ubuntu noble/main amd64 libusbredirparser1t64 amd64 0.13.0-2.1build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;16.5 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:67 http://archive.ubuntu.com/ubuntu noble/main amd64 libusbredirhost1t64 amd64 0.13.0-2.1build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;20.0 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:68 http://archive.ubuntu.com/ubuntu noble/universe amd64 libspice-client-glib-2.0-8 amd64 0.42-2ubuntu2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;314&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:69 http://archive.ubuntu.com/ubuntu noble/universe amd64 libva-x11-2 amd64 2.20.0-2build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;12.0 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:70 http://archive.ubuntu.com/ubuntu noble/universe amd64 libspice-client-gtk-3.0-5 amd64 0.42-2ubuntu2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;56.6 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:71 http://archive.ubuntu.com/ubuntu noble/main amd64 liburing2 amd64 2.5-1build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;21.1 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:72 http://archive.ubuntu.com/ubuntu noble/main amd64 libyajl2 amd64 2.1.0-5build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;20.2 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:73 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvirt0 amd64 10.0.0-2ubuntu8.7 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;1,826 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:74 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvirt-clients amd64 10.0.0-2ubuntu8.7 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;438&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:75 http://archive.ubuntu.com/ubuntu noble/universe amd64 libvirt-glib-1.0-data all 5.0.0-2build3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;17.3 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:76 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvirt-l10n all 10.0.0-2ubuntu8.7 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;1,150 B&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:77 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvte-2.91-0 amd64 0.76.0-1ubuntu0.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;230&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:78 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libxslt1.1 amd64 1.1.39-0exp1ubuntu0.24.04.2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;167&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:79 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 mesa-va-drivers amd64 24.2.8-1ubuntu1~24.04.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;19.5 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:80 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 osinfo-db all 0.20250124-0ubuntu0.24.04.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;176&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:81 http://archive.ubuntu.com/ubuntu noble/main amd64 python3-certifi all 2023.11.17-1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;165&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:82 http://archive.ubuntu.com/ubuntu noble/main amd64 python3-chardet all 5.2.0+dfsg-1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;117&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:83 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 python3-idna all 3.6-2ubuntu0.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;49.0 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:84 http://archive.ubuntu.com/ubuntu noble/main amd64 python3-libvirt amd64 10.0.0-1build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;164&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:85 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 python3-libxml2 amd64 2.9.14+dfsg-1.3ubuntu3.3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;140&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:86 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 python3-urllib3 all 2.0.7-1ubuntu0.2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;93.3 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:87 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 python3-requests all 2.31.0+dfsg-1ubuntu1.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;50.8 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:88 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 qemu-utils amd64 1:8.2.2+ds-0ubuntu1.7 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;2,220 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:89 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 qemu-block-extra amd64 1:8.2.2+ds-0ubuntu1.7 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;111&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:90 http://archive.ubuntu.com/ubuntu noble/universe amd64 i965-va-driver amd64 2.4.1+dfsg1-1build2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;332&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:91 http://archive.ubuntu.com/ubuntu noble/universe amd64 va-driver-all amd64 2.20.0-2build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;4,844 B&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:92 http://archive.ubuntu.com/ubuntu noble/universe amd64 libvirt-glib-1.0-0 amd64 5.0.0-2build3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;121&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:93 http://archive.ubuntu.com/ubuntu noble/universe amd64 virt-viewer amd64 11.0-3build2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;285&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:94 http://archive.ubuntu.com/ubuntu noble/main amd64 xorriso amd64 1:1.5.6-1.1ubuntu3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;297&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:95 http://archive.ubuntu.com/ubuntu noble/universe amd64 libosinfo-l10n all 1.11.0-2build3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;50.6 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:96 http://archive.ubuntu.com/ubuntu noble/universe amd64 libosinfo-1.0-0 amd64 1.11.0-2build3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;91.5 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:97 http://archive.ubuntu.com/ubuntu noble/universe amd64 gir1.2-libosinfo-1.0 amd64 1.11.0-2build3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;18.6 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:98 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 virtinst all 1:4.1.0-3ubuntu0.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;891&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Fetched 34.2 MB in 3s &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;10.8 MB/s&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Extracting templates from packages: 100%&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package iso-codes.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Reading database ... &lt;span class=&#34;m&#34;&gt;26588&lt;/span&gt; files and directories currently installed.&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../00-iso-codes_4.16.0-1_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking iso-codes &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;4.16.0-1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package python3-pkg-resources.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../01-python3-pkg-resources_68.1.2-2ubuntu1.2_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking python3-pkg-resources &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;68.1.2-2ubuntu1.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libfuse3-3:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../02-libfuse3-3_3.14.0-5build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libfuse3-3:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3.14.0-5build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libnuma1:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../03-libnuma1_2.0.18-1build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libnuma1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.0.18-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libusb-1.0-0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../04-libusb-1.0-0_2%3a1.0.27-1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libusb-1.0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2:1.0.27-1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package pci.ids.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../05-pci.ids_0.0~2024.03.31-1ubuntu0.1_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking pci.ids &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.0~2024.03.31-1ubuntu0.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package usb.ids.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../06-usb.ids_2024.03.18-1_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking usb.ids &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2024.03.18-1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package gir1.2-freedesktop:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../07-gir1.2-freedesktop_1.80.1-1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking gir1.2-freedesktop:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.80.1-1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libcurl3t64-gnutls:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../08-libcurl3t64-gnutls_8.5.0-2ubuntu10.6_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libcurl3t64-gnutls:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;8.5.0-2ubuntu10.6&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libduktape207:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../09-libduktape207_2.7.0+tests-0ubuntu3_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libduktape207:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.7.0+tests-0ubuntu3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libproxy1v5:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../10-libproxy1v5_0.5.4-4build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libproxy1v5:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.5.4-4build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package glib-networking-common.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../11-glib-networking-common_2.80.0-1build1_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking glib-networking-common &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.80.0-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package glib-networking-services.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../12-glib-networking-services_2.80.0-1build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking glib-networking-services &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.80.0-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package glib-networking:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../13-glib-networking_2.80.0-1build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking glib-networking:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.80.0-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libcdparanoia0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../14-libcdparanoia0_3.10.2+debian-14build3_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libcdparanoia0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3.10.2+debian-14build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libdw1t64:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../15-libdw1t64_0.190-1.1ubuntu0.1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libdw1t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.190-1.1ubuntu0.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libunwind8:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../16-libunwind8_1.6.2-3build1.1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libunwind8:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.6.2-3build1.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libgstreamer1.0-0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../17-libgstreamer1.0-0_1.24.2-1ubuntu0.1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libgstreamer1.0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.24.2-1ubuntu0.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package liborc-0.4-0t64:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../18-liborc-0.4-0t64_1%3a0.4.38-1ubuntu0.1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking liborc-0.4-0t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:0.4.38-1ubuntu0.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libgstreamer-plugins-base1.0-0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../19-libgstreamer-plugins-base1.0-0_1.24.2-1ubuntu0.2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libgstreamer-plugins-base1.0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.24.2-1ubuntu0.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libogg0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../20-libogg0_1.3.5-3build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libogg0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.3.5-3build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libopus0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../21-libopus0_1.4-1build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libopus0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.4-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libtheora0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../22-libtheora0_1.1.1+dfsg.1-16.1build3_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libtheora0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.1.1+dfsg.1-16.1build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libvisual-0.4-0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../23-libvisual-0.4-0_0.4.2-2build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libvisual-0.4-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.4.2-2build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libvorbis0a:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../24-libvorbis0a_1.3.7-1build3_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libvorbis0a:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.3.7-1build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libvorbisenc2:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../25-libvorbisenc2_1.3.7-1build3_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libvorbisenc2:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.3.7-1build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package gstreamer1.0-plugins-base:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../26-gstreamer1.0-plugins-base_1.24.2-1ubuntu0.2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking gstreamer1.0-plugins-base:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.24.2-1ubuntu0.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libva2:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../27-libva2_2.20.0-2build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libva2:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.20.0-2build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libigdgmm12:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../28-libigdgmm12_22.3.17+ds1-1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libigdgmm12:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;22.3.17+ds1-1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package intel-media-va-driver:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../29-intel-media-va-driver_24.1.0+dfsg1-1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking intel-media-va-driver:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;24.1.0+dfsg1-1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libaio1t64:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../30-libaio1t64_0.3.113-6build1.1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libaio1t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.3.113-6build1.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libasyncns0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../31-libasyncns0_0.8-6build4_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libasyncns0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.8-6build4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libboost-iostreams1.83.0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../32-libboost-iostreams1.83.0_1.83.0-2.1ubuntu3.1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libboost-iostreams1.83.0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.83.0-2.1ubuntu3.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libboost-thread1.83.0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../33-libboost-thread1.83.0_1.83.0-2.1ubuntu3.1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libboost-thread1.83.0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.83.0-2.1ubuntu3.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libburn4t64:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../34-libburn4t64_1.5.6-1.1build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libburn4t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.5.6-1.1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libnspr4:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../35-libnspr4_2%3a4.35-1.1build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libnspr4:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2:4.35-1.1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libnss3:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../36-libnss3_2%3a3.98-1build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libnss3:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2:3.98-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libpcsclite1:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../37-libpcsclite1_2.0.3-1build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libpcsclite1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.0.3-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libcacard0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../38-libcacard0_1%3a2.8.0-3build4_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libcacard0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:2.8.0-3build4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libdaxctl1:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../39-libdaxctl1_77-2ubuntu2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libdaxctl1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;77-2ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libflac12t64:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../40-libflac12t64_1.4.3+ds-2.1ubuntu2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libflac12t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.4.3+ds-2.1ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libmp3lame0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../41-libmp3lame0_3.100-6build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libmp3lame0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3.100-6build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libmpg123-0t64:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../42-libmpg123-0t64_1.32.5-1ubuntu1.1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libmpg123-0t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.32.5-1ubuntu1.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libsndfile1:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../43-libsndfile1_1.2.2-1ubuntu5.24.04.1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libsndfile1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.2.2-1ubuntu5.24.04.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libpulse0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../44-libpulse0_1%3a16.1+dfsg1-2ubuntu10.1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libpulse0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:16.1+dfsg1-2ubuntu10.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libgvnc-1.0-0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../45-libgvnc-1.0-0_1.3.1-1build2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libgvnc-1.0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.3.1-1build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libgtk-vnc-2.0-0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../46-libgtk-vnc-2.0-0_1.3.1-1build2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libgtk-vnc-2.0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.3.1-1build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package librdmacm1t64:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../47-librdmacm1t64_50.0-2ubuntu0.2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking librdmacm1t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;50.0-2ubuntu0.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libiscsi7:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../48-libiscsi7_1.19.0-3build4_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libiscsi7:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.19.0-3build4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libisofs6t64:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../49-libisofs6t64_1.5.6.pl01-1.1ubuntu2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libisofs6t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.5.6.pl01-1.1ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libisoburn1t64:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../50-libisoburn1t64_1%3a1.5.6-1.1ubuntu3_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libisoburn1t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:1.5.6-1.1ubuntu3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libjson-glib-1.0-common.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../51-libjson-glib-1.0-common_1.8.0-2build2_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libjson-glib-1.0-common &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.8.0-2build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libjson-glib-1.0-0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../52-libjson-glib-1.0-0_1.8.0-2build2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libjson-glib-1.0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.8.0-2build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libndctl6:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../53-libndctl6_77-2ubuntu2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libndctl6:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;77-2ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libnfs14:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../54-libnfs14_5.0.2-1build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libnfs14:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;5.0.2-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libphodav-3.0-common.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../55-libphodav-3.0-common_3.0-8build3_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libphodav-3.0-common &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3.0-8build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libsoup-3.0-common.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../56-libsoup-3.0-common_3.4.4-5ubuntu0.4_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libsoup-3.0-common &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3.4.4-5ubuntu0.4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libsoup-3.0-0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../57-libsoup-3.0-0_3.4.4-5ubuntu0.4_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libsoup-3.0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3.4.4-5ubuntu0.4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libphodav-3.0-0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../58-libphodav-3.0-0_3.0-8build3_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libphodav-3.0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3.0-8build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libpmem1:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../59-libpmem1_1.13.1-1.1ubuntu2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libpmem1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.13.1-1.1ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libpmemobj1:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../60-libpmemobj1_1.13.1-1.1ubuntu2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libpmemobj1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.13.1-1.1ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libpolkit-gobject-1-0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../61-libpolkit-gobject-1-0_124-2ubuntu1.24.04.2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libpolkit-gobject-1-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;124-2ubuntu1.24.04.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package librados2.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../62-librados2_19.2.0-0ubuntu0.24.04.2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking librados2 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;19.2.0-0ubuntu0.24.04.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package librbd1.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../63-librbd1_19.2.0-0ubuntu0.24.04.2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking librbd1 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;19.2.0-0ubuntu0.24.04.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package spice-client-glib-usb-acl-helper.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../64-spice-client-glib-usb-acl-helper_0.42-2ubuntu2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking spice-client-glib-usb-acl-helper &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.42-2ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libusbredirparser1t64:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../65-libusbredirparser1t64_0.13.0-2.1build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libusbredirparser1t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.13.0-2.1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libusbredirhost1t64:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../66-libusbredirhost1t64_0.13.0-2.1build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libusbredirhost1t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.13.0-2.1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libspice-client-glib-2.0-8:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../67-libspice-client-glib-2.0-8_0.42-2ubuntu2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libspice-client-glib-2.0-8:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.42-2ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libva-x11-2:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../68-libva-x11-2_2.20.0-2build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libva-x11-2:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.20.0-2build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libspice-client-gtk-3.0-5:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../69-libspice-client-gtk-3.0-5_0.42-2ubuntu2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libspice-client-gtk-3.0-5:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.42-2ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package liburing2:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../70-liburing2_2.5-1build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking liburing2:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.5-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libyajl2:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../71-libyajl2_2.1.0-5build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libyajl2:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.1.0-5build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libvirt0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../72-libvirt0_10.0.0-2ubuntu8.7_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libvirt0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;10.0.0-2ubuntu8.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libvirt-clients.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../73-libvirt-clients_10.0.0-2ubuntu8.7_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libvirt-clients &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;10.0.0-2ubuntu8.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libvirt-glib-1.0-data.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../74-libvirt-glib-1.0-data_5.0.0-2build3_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libvirt-glib-1.0-data &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;5.0.0-2build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libvirt-l10n.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../75-libvirt-l10n_10.0.0-2ubuntu8.7_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libvirt-l10n &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;10.0.0-2ubuntu8.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libvte-2.91-0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../76-libvte-2.91-0_0.76.0-1ubuntu0.1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libvte-2.91-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.76.0-1ubuntu0.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libxslt1.1:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../77-libxslt1.1_1.1.39-0exp1ubuntu0.24.04.2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libxslt1.1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.1.39-0exp1ubuntu0.24.04.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package mesa-va-drivers:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../78-mesa-va-drivers_24.2.8-1ubuntu1~24.04.1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking mesa-va-drivers:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;24.2.8-1ubuntu1~24.04.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package osinfo-db.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../79-osinfo-db_0.20250124-0ubuntu0.24.04.1_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking osinfo-db &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.20250124-0ubuntu0.24.04.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package python3-certifi.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../80-python3-certifi_2023.11.17-1_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking python3-certifi &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2023.11.17-1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package python3-chardet.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../81-python3-chardet_5.2.0+dfsg-1_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking python3-chardet &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;5.2.0+dfsg-1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package python3-idna.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../82-python3-idna_3.6-2ubuntu0.1_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking python3-idna &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3.6-2ubuntu0.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package python3-libvirt.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../83-python3-libvirt_10.0.0-1build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking python3-libvirt &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;10.0.0-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package python3-libxml2:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../84-python3-libxml2_2.9.14+dfsg-1.3ubuntu3.3_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking python3-libxml2:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.9.14+dfsg-1.3ubuntu3.3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package python3-urllib3.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../85-python3-urllib3_2.0.7-1ubuntu0.2_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking python3-urllib3 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.0.7-1ubuntu0.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package python3-requests.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../86-python3-requests_2.31.0+dfsg-1ubuntu1.1_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking python3-requests &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.31.0+dfsg-1ubuntu1.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package qemu-utils.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../87-qemu-utils_1%3a8.2.2+ds-0ubuntu1.7_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking qemu-utils &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:8.2.2+ds-0ubuntu1.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package qemu-block-extra.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../88-qemu-block-extra_1%3a8.2.2+ds-0ubuntu1.7_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking qemu-block-extra &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:8.2.2+ds-0ubuntu1.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package i965-va-driver:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../89-i965-va-driver_2.4.1+dfsg1-1build2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking i965-va-driver:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.4.1+dfsg1-1build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package va-driver-all:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../90-va-driver-all_2.20.0-2build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking va-driver-all:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.20.0-2build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libvirt-glib-1.0-0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../91-libvirt-glib-1.0-0_5.0.0-2build3_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libvirt-glib-1.0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;5.0.0-2build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package virt-viewer.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../92-virt-viewer_11.0-3build2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking virt-viewer &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;11.0-3build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package xorriso.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../93-xorriso_1%3a1.5.6-1.1ubuntu3_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking xorriso &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:1.5.6-1.1ubuntu3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libosinfo-l10n.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../94-libosinfo-l10n_1.11.0-2build3_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libosinfo-l10n &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.11.0-2build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libosinfo-1.0-0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../95-libosinfo-1.0-0_1.11.0-2build3_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libosinfo-1.0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.11.0-2build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package gir1.2-libosinfo-1.0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../96-gir1.2-libosinfo-1.0_1.11.0-2build3_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking gir1.2-libosinfo-1.0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.11.0-2build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package virtinst.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../97-virtinst_1%3a4.1.0-3ubuntu0.1_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking virtinst &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:4.1.0-3ubuntu0.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up python3-pkg-resources &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;68.1.2-2ubuntu1.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libcdparanoia0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3.10.2+debian-14build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up pci.ids &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.0~2024.03.31-1ubuntu0.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up gir1.2-freedesktop:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.80.1-1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libogg0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.3.5-3build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libphodav-3.0-common &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3.0-8build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libvisual-0.4-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.4.2-2build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libyajl2:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.1.0-5build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libcurl3t64-gnutls:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;8.5.0-2ubuntu10.6&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libboost-thread1.83.0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.83.0-2.1ubuntu3.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libigdgmm12:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;22.3.17+ds1-1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libsoup-3.0-common &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3.4.4-5ubuntu0.4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libmpg123-0t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.32.5-1ubuntu1.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libvte-2.91-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.76.0-1ubuntu0.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libunwind8:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.6.2-3build1.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libnfs14:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;5.0.2-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up liborc-0.4-0t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:0.4.38-1ubuntu0.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libdw1t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.190-1.1ubuntu0.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up python3-libxml2:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.9.14+dfsg-1.3ubuntu3.3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up python3-chardet &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;5.2.0+dfsg-1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libvirt-glib-1.0-data &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;5.0.0-2build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libva2:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.20.0-2build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up python3-certifi &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2023.11.17-1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libnspr4:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2:4.35-1.1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libboost-iostreams1.83.0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.83.0-2.1ubuntu3.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libopus0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.4-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up intel-media-va-driver:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;24.1.0+dfsg1-1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libvorbis0a:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.3.7-1build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up python3-idna &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3.6-2ubuntu0.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up usb.ids &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2024.03.18-1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up osinfo-db &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.20250124-0ubuntu0.24.04.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libpcsclite1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.0.3-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libfuse3-3:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3.14.0-5build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libdaxctl1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;77-2ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up python3-urllib3 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.0.7-1ubuntu0.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libnuma1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.0.18-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libvirt0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;10.0.0-2ubuntu8.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libaio1t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.3.113-6build1.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libvirt-glib-1.0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;5.0.0-2build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libisofs6t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.5.6.pl01-1.1ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libduktape207:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.7.0+tests-0ubuntu3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libasyncns0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.8-6build4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libusbredirparser1t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.13.0-2.1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libtheora0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.1.1+dfsg.1-16.1build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libxslt1.1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.1.39-0exp1ubuntu0.24.04.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libburn4t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.5.6-1.1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libndctl6:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;77-2ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up librdmacm1t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;50.0-2ubuntu0.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libjson-glib-1.0-common &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.8.0-2build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libflac12t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.4.3+ds-2.1ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libusb-1.0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2:1.0.27-1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up mesa-va-drivers:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;24.2.8-1ubuntu1~24.04.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up glib-networking-common &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.80.0-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up liburing2:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.5-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libiscsi7:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.19.0-3build4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libisoburn1t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:1.5.6-1.1ubuntu3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up xorriso &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:1.5.6-1.1ubuntu3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libpmem1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.13.1-1.1ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libva-x11-2:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.20.0-2build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up iso-codes &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;4.16.0-1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libpolkit-gobject-1-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;124-2ubuntu1.24.04.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libgstreamer1.0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.24.2-1ubuntu0.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setcap worked! gst-ptp-helper is not suid!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libmp3lame0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3.100-6build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up i965-va-driver:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.4.1+dfsg1-1build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libosinfo-l10n &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.11.0-2build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libvorbisenc2:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.3.7-1build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up librados2 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;19.2.0-0ubuntu0.24.04.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libproxy1v5:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.5.4-4build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up python3-libvirt &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;10.0.0-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libvirt-clients &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;10.0.0-2ubuntu8.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up spice-client-glib-usb-acl-helper &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.42-2ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libgstreamer-plugins-base1.0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.24.2-1ubuntu0.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libnss3:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2:3.98-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libcacard0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:2.8.0-3build4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libusbredirhost1t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.13.0-2.1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libjson-glib-1.0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.8.0-2build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up gstreamer1.0-plugins-base:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.24.2-1ubuntu0.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libvirt-l10n &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;10.0.0-2ubuntu8.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up va-driver-all:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.20.0-2build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up python3-requests &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.31.0+dfsg-1ubuntu1.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libpmemobj1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.13.1-1.1ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up librbd1 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;19.2.0-0ubuntu0.24.04.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libsndfile1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.2.2-1ubuntu5.24.04.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up qemu-utils &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:8.2.2+ds-0ubuntu1.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up qemu-block-extra &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:8.2.2+ds-0ubuntu1.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Created symlink /etc/systemd/system/multi-user.target.wants/run-qemu.mount → /usr/lib/systemd/system/run-qemu.mount&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up glib-networking-services &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.80.0-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libpulse0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:16.1+dfsg1-2ubuntu10.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libgvnc-1.0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.3.1-1build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up glib-networking:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.80.0-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libgtk-vnc-2.0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.3.1-1build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libsoup-3.0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3.4.4-5ubuntu0.4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libphodav-3.0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3.0-8build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libosinfo-1.0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.11.0-2build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up gir1.2-libosinfo-1.0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.11.0-2build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libspice-client-glib-2.0-8:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.42-2ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up virtinst &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:4.1.0-3ubuntu0.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libspice-client-gtk-3.0-5:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.42-2ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up virt-viewer &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;11.0-3build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Processing triggers &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; libc-bin &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.39-0ubuntu8.4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Processing triggers &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; man-db &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.12.0-4build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Processing triggers &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; libglib2.0-0t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.80.0-6ubuntu3.4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Processing triggers &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; shared-mime-info &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.4-4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Processing triggers &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; hicolor-icon-theme &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.17-2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;📦&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;waylon@ubuntu ~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;$ virt-install --version&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;virsh list --all&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;4.1.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;error: failed to connect to the hypervisor&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;error: binary &lt;span class=&#34;s1&#34;&gt;&amp;#39;/usr/sbin/libvirtd&amp;#39;&lt;/span&gt; does not exist in &lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;: No such file or directory&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;📦&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;waylon@ubuntu ~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;$ &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;logout&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;waylon@razorcrest:~$ distrobox enter --additional-flags &lt;span class=&#34;s2&#34;&gt;&amp;#34;--device /dev/kvm&amp;#34;&lt;/span&gt; ubuntu&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Error: unknown flag: --device&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;See &lt;span class=&#34;s1&#34;&gt;&amp;#39;podman exec --help&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;waylon@razorcrest:~$ distrobox enter ubuntu&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;📦&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;waylon@ubuntu ~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;$ ls -l /run/libvirt/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;common/               libvirt-sock          nodedev/              secrets/              virtlogd-admin-sock&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hostdevmgr/           libvirt-sock-ro       nwfilter/             storage/              virtlogd-sock&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;interface/            lxc/                  nwfilter-binding/     virtlockd-admin-sock&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;libvirt-admin-sock    network/              qemu/                 virtlockd-sock&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;📦&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;waylon@ubuntu ~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;$ ls -l /run/libvirt/libvirt-sock&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;srw-rw-rw-. &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; nobody nogroup &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; Jun &lt;span class=&#34;m&#34;&gt;27&lt;/span&gt; 11:09 /run/libvirt/libvirt-sock&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;📦&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;waylon@ubuntu ~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;$ sudo usermod -aG libvirt &lt;span class=&#34;nv&#34;&gt;$USER&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;usermod: group &lt;span class=&#34;s1&#34;&gt;&amp;#39;libvirt&amp;#39;&lt;/span&gt; does not exist&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;📦&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;waylon@ubuntu ~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;$ &lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;LIBVIRT_DEFAULT_URI&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;qemu+unix:///system&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;virsh list --all&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; Id   Name   State&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--------------------&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;📦&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;waylon@ubuntu ~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;$ ls -l /run/libvirt/libvirt-sock&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;srw-rw-rw-. &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; nobody nogroup &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; Jun &lt;span class=&#34;m&#34;&gt;27&lt;/span&gt; 11:09 /run/libvirt/libvirt-sock&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;📦&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;waylon@ubuntu ~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;$ virt-install --version&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;virsh list --all&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;4.1.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; Id   Name   State&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--------------------&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;📦&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;waylon@ubuntu ~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;$ sudo apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install virt-manager -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Hit:1 http://security.ubuntu.com/ubuntu noble-security InRelease&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Hit:2 http://archive.ubuntu.com/ubuntu noble InRelease&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Hit:3 http://archive.ubuntu.com/ubuntu noble-updates InRelease&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Hit:4 http://archive.ubuntu.com/ubuntu noble-backports InRelease&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Reading package lists... Done&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Building dependency tree... Done&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Reading state information... Done&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt; packages can be upgraded. Run &lt;span class=&#34;s1&#34;&gt;&amp;#39;apt list --upgradable&amp;#39;&lt;/span&gt; to see them.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Reading package lists... Done&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Building dependency tree... Done&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Reading state information... Done&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;The following additional packages will be installed:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  acl alsa-topology-conf alsa-ucm-conf cpu-checker dmeventd dmidecode dns-root-data dnsmasq-base gettext-base&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  gir1.2-atk-1.0 gir1.2-ayatanaappindicator3-0.1 gir1.2-gdkpixbuf-2.0 gir1.2-gstreamer-1.0 gir1.2-gtk-3.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  gir1.2-gtk-vnc-2.0 gir1.2-gtksource-4 gir1.2-harfbuzz-0.0 gir1.2-libvirt-glib-1.0 gir1.2-pango-1.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  gir1.2-spiceclientglib-2.0 gir1.2-spiceclientgtk-3.0 gir1.2-vte-2.91 gstreamer1.0-plugins-good gstreamer1.0-x&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  iptables ipxe-qemu ipxe-qemu-256k-compat-efi-roms libaa1 libasound2-data libasound2t64 libavc1394-0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libayatana-appindicator3-1 libayatana-ido3-0.4-0 libayatana-indicator3-7 libbrlapi0.8 libcaca0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libdbusmenu-glib4 libdbusmenu-gtk3-4 libdecor-0-0 libdecor-0-plugin-1-gtk libdevmapper-event1.02.1 libdv4t64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libfdt1 libgstreamer-plugins-good1.0-0 libgtksourceview-4-0 libgtksourceview-4-common libgudev-1.0-0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libharfbuzz-gobject0 libiec61883-0 libip4tc2 libip6tc2 libjack-jackd2-0 liblvm2cmd2.03 libnetfilter-conntrack3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libnfnetlink0 libnftables1 libnftnl11 libnss-mymachines libpangoxft-1.0-0 libparted2t64 libpipewire-0.3-0t64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libpipewire-0.3-common libpolkit-agent-1-0 libraw1394-11 libsamplerate0 libsdl2-2.0-0 libshout3 libslang2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libslirp0 libspa-0.2-modules libspeex1 libspice-server1 libtag1v5 libtag1v5-vanilla libtpms0 libtwolame0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libv4l-0t64 libv4lconvert0t64 libvirglrenderer1 libvirt-daemon libvirt-daemon-config-network&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libvirt-daemon-config-nwfilter libvirt-daemon-driver-qemu libvirt-daemon-system libvirt-daemon-system-systemd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libvpx9 libwavpack1 libwebrtc-audio-processing1 libxft2 libxml2-utils libxss1 libxv1 logrotate lvm2 mdevctl&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  msr-tools netcat-openbsd nftables ovmf parted polkitd python3-cairo python3-gi-cairo qemu-system-common&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  qemu-system-data qemu-system-gui qemu-system-modules-opengl qemu-system-modules-spice qemu-system-x86 seabios&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  sgml-base swtpm swtpm-tools systemd-container systemd-hwe-hwdb thin-provisioning-tools udev xml-core&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Suggested packages:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  firewalld kmod alsa-utils libasound2-plugins libdv-bin oss-compat jackd2 libparted-dev libparted-i18n pipewire&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libraw1394-doc xdg-utils speex gstreamer1.0-libav gstreamer1.0-plugins-ugly&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libvirt-daemon-driver-storage-gluster libvirt-daemon-driver-storage-iscsi-direct&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libvirt-daemon-driver-storage-rbd libvirt-daemon-driver-storage-zfs libvirt-daemon-driver-lxc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libvirt-daemon-driver-vbox libvirt-daemon-driver-xen numad passt apparmor auditd nfs-common open-iscsi pm-utils&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  systemtap zfsutils bsd-mailx &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; mailx parted-doc polkitd-pkla samba vde2 sgml-base-doc trousers gir1.2-secret-1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  gnome-keyring python3-guestfs ssh-askpass debhelper&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;The following NEW packages will be installed:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  acl alsa-topology-conf alsa-ucm-conf cpu-checker dmeventd dmidecode dns-root-data dnsmasq-base gettext-base&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  gir1.2-atk-1.0 gir1.2-ayatanaappindicator3-0.1 gir1.2-gdkpixbuf-2.0 gir1.2-gstreamer-1.0 gir1.2-gtk-3.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  gir1.2-gtk-vnc-2.0 gir1.2-gtksource-4 gir1.2-harfbuzz-0.0 gir1.2-libvirt-glib-1.0 gir1.2-pango-1.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  gir1.2-spiceclientglib-2.0 gir1.2-spiceclientgtk-3.0 gir1.2-vte-2.91 gstreamer1.0-plugins-good gstreamer1.0-x&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  iptables ipxe-qemu ipxe-qemu-256k-compat-efi-roms libaa1 libasound2-data libasound2t64 libavc1394-0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libayatana-appindicator3-1 libayatana-ido3-0.4-0 libayatana-indicator3-7 libbrlapi0.8 libcaca0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libdbusmenu-glib4 libdbusmenu-gtk3-4 libdecor-0-0 libdecor-0-plugin-1-gtk libdevmapper-event1.02.1 libdv4t64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libfdt1 libgstreamer-plugins-good1.0-0 libgtksourceview-4-0 libgtksourceview-4-common libgudev-1.0-0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libharfbuzz-gobject0 libiec61883-0 libip4tc2 libip6tc2 libjack-jackd2-0 liblvm2cmd2.03 libnetfilter-conntrack3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libnfnetlink0 libnftables1 libnftnl11 libnss-mymachines libpangoxft-1.0-0 libparted2t64 libpipewire-0.3-0t64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libpipewire-0.3-common libpolkit-agent-1-0 libraw1394-11 libsamplerate0 libsdl2-2.0-0 libshout3 libslang2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libslirp0 libspa-0.2-modules libspeex1 libspice-server1 libtag1v5 libtag1v5-vanilla libtpms0 libtwolame0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libv4l-0t64 libv4lconvert0t64 libvirglrenderer1 libvirt-daemon libvirt-daemon-config-network&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libvirt-daemon-config-nwfilter libvirt-daemon-driver-qemu libvirt-daemon-system libvirt-daemon-system-systemd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libvpx9 libwavpack1 libwebrtc-audio-processing1 libxft2 libxml2-utils libxss1 libxv1 logrotate lvm2 mdevctl&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  msr-tools netcat-openbsd nftables ovmf parted polkitd python3-cairo python3-gi-cairo qemu-system-common&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  qemu-system-data qemu-system-gui qemu-system-modules-opengl qemu-system-modules-spice qemu-system-x86 seabios&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  sgml-base swtpm swtpm-tools systemd-container systemd-hwe-hwdb thin-provisioning-tools udev virt-manager&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  xml-core&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; upgraded, &lt;span class=&#34;m&#34;&gt;119&lt;/span&gt; newly installed, &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; to remove and &lt;span class=&#34;m&#34;&gt;4&lt;/span&gt; not upgraded.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Need to get 43.2 MB of archives.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;After this operation, &lt;span class=&#34;m&#34;&gt;180&lt;/span&gt; MB of additional disk space will be used.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:1 http://archive.ubuntu.com/ubuntu noble/main amd64 sgml-base all 1.31 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;11.4 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:2 http://archive.ubuntu.com/ubuntu noble/main amd64 libslang2 amd64 2.3.3-3build2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;506&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:3 http://archive.ubuntu.com/ubuntu noble/main amd64 logrotate amd64 3.21.0-2build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;52.2 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:4 http://archive.ubuntu.com/ubuntu noble/main amd64 netcat-openbsd amd64 1.226-1ubuntu2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;44.3 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:5 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 udev amd64 255.4-1ubuntu8.8 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;1,874 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:6 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 systemd-hwe-hwdb all 255.1.4 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;3,200 B&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:7 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 dmidecode amd64 3.5-3ubuntu0.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;73.0 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:8 http://archive.ubuntu.com/ubuntu noble/main amd64 gettext-base amd64 0.21-14ubuntu2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;38.4 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:9 http://archive.ubuntu.com/ubuntu noble/main amd64 libip4tc2 amd64 1.8.10-3ubuntu2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;23.3 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:10 http://archive.ubuntu.com/ubuntu noble/main amd64 libip6tc2 amd64 1.8.10-3ubuntu2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;23.7 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:11 http://archive.ubuntu.com/ubuntu noble/main amd64 libnfnetlink0 amd64 1.0.2-2build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;14.8 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:12 http://archive.ubuntu.com/ubuntu noble/main amd64 libnetfilter-conntrack3 amd64 1.0.9-6build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;45.2 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:13 http://archive.ubuntu.com/ubuntu noble/main amd64 libnftnl11 amd64 1.2.6-2build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;66.0 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:14 http://archive.ubuntu.com/ubuntu noble/main amd64 iptables amd64 1.8.10-3ubuntu2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;381&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:15 http://archive.ubuntu.com/ubuntu noble/main amd64 libnftables1 amd64 1.0.9-1build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;358&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:16 http://archive.ubuntu.com/ubuntu noble/main amd64 libparted2t64 amd64 3.6-4build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;152&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:17 http://archive.ubuntu.com/ubuntu noble/main amd64 nftables amd64 1.0.9-1build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;69.8 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:18 http://archive.ubuntu.com/ubuntu noble/main amd64 parted amd64 3.6-4build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;43.3 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:19 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 acl amd64 2.3.2-1build1.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;39.4 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:20 http://archive.ubuntu.com/ubuntu noble/main amd64 alsa-topology-conf all 1.2.5.1-2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;15.5 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:21 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libasound2-data all 1.2.11-1ubuntu0.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;21.1 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:22 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libasound2t64 amd64 1.2.11-1ubuntu0.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;399&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:23 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 alsa-ucm-conf all 1.2.10-1ubuntu5.7 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;66.4 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:24 http://archive.ubuntu.com/ubuntu noble/main amd64 msr-tools amd64 1.3-5build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;9,610 B&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:25 http://archive.ubuntu.com/ubuntu noble/main amd64 cpu-checker amd64 0.7-1.3build2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;6,148 B&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:26 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libdevmapper-event1.02.1 amd64 2:1.02.185-3ubuntu3.2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;12.6 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:27 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 liblvm2cmd2.03 amd64 2.03.16-3ubuntu3.2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;797&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:28 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 dmeventd amd64 2:1.02.185-3ubuntu3.2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;38.0 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:29 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 dns-root-data all 2024071801~ubuntu0.24.04.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;5,918 B&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:30 http://archive.ubuntu.com/ubuntu noble/main amd64 dnsmasq-base amd64 2.90-2build2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;375&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:31 http://archive.ubuntu.com/ubuntu noble/main amd64 gir1.2-atk-1.0 amd64 2.52.0-1build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;23.1 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:32 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 gir1.2-gdkpixbuf-2.0 amd64 2.42.10+dfsg-3ubuntu3.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;9,486 B&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:33 http://archive.ubuntu.com/ubuntu noble/main amd64 libharfbuzz-gobject0 amd64 8.3.0-2build2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;34.3 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:34 http://archive.ubuntu.com/ubuntu noble/main amd64 gir1.2-harfbuzz-0.0 amd64 8.3.0-2build2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;44.5 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:35 http://archive.ubuntu.com/ubuntu noble/main amd64 libxft2 amd64 2.3.6-1build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;45.3 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:36 http://archive.ubuntu.com/ubuntu noble/main amd64 libpangoxft-1.0-0 amd64 1.52.1+ds-1build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;20.3 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:37 http://archive.ubuntu.com/ubuntu noble/main amd64 gir1.2-pango-1.0 amd64 1.52.1+ds-1build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;34.8 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:38 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 gir1.2-gtk-3.0 amd64 3.24.41-4ubuntu1.3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;245&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:39 http://archive.ubuntu.com/ubuntu noble/main amd64 libayatana-ido3-0.4-0 amd64 0.10.1-1build2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;56.6 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:40 http://archive.ubuntu.com/ubuntu noble/main amd64 libayatana-indicator3-7 amd64 0.9.4-1build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;31.7 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:41 http://archive.ubuntu.com/ubuntu noble/main amd64 libdbusmenu-glib4 amd64 18.10.20180917~bzr492+repack1-3.1ubuntu5 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;43.0 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:42 http://archive.ubuntu.com/ubuntu noble/main amd64 libdbusmenu-gtk3-4 amd64 18.10.20180917~bzr492+repack1-3.1ubuntu5 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;27.6 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:43 http://archive.ubuntu.com/ubuntu noble/main amd64 libayatana-appindicator3-1 amd64 0.5.93-1build3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;24.7 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:44 http://archive.ubuntu.com/ubuntu noble/main amd64 gir1.2-ayatanaappindicator3-0.1 amd64 0.5.93-1build3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;5,838 B&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:45 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 gir1.2-gstreamer-1.0 amd64 1.24.2-1ubuntu0.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;88.4 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:46 http://archive.ubuntu.com/ubuntu noble/universe amd64 gir1.2-gtk-vnc-2.0 amd64 1.3.1-1build2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;12.1 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:47 http://archive.ubuntu.com/ubuntu noble/universe amd64 libgtksourceview-4-common all 4.8.4-5build4 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;590&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:48 http://archive.ubuntu.com/ubuntu noble/universe amd64 libgtksourceview-4-0 amd64 4.8.4-5build4 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;233&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:49 http://archive.ubuntu.com/ubuntu noble/universe amd64 gir1.2-gtksource-4 amd64 4.8.4-5build4 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;20.3 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:50 http://archive.ubuntu.com/ubuntu noble/universe amd64 gir1.2-spiceclientglib-2.0 amd64 0.42-2ubuntu2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;14.4 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:51 http://archive.ubuntu.com/ubuntu noble/universe amd64 gir1.2-spiceclientgtk-3.0 amd64 0.42-2ubuntu2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;5,610 B&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:52 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 gir1.2-vte-2.91 amd64 0.76.0-1ubuntu0.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;11.5 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:53 http://archive.ubuntu.com/ubuntu noble/main amd64 libaa1 amd64 1.4p5-51.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;49.9 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:54 http://archive.ubuntu.com/ubuntu noble/main amd64 libraw1394-11 amd64 2.1.2-2build3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;26.2 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:55 http://archive.ubuntu.com/ubuntu noble/main amd64 libavc1394-0 amd64 0.5.4-5build3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;15.4 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:56 http://archive.ubuntu.com/ubuntu noble/main amd64 libcaca0 amd64 0.99.beta20-4build2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;208&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:57 http://archive.ubuntu.com/ubuntu noble/main amd64 libdv4t64 amd64 1.0.0-17.1build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;63.2 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:58 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libgstreamer-plugins-good1.0-0 amd64 1.24.2-1ubuntu1.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;32.9 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:59 http://archive.ubuntu.com/ubuntu noble/main amd64 libgudev-1.0-0 amd64 1:238-5ubuntu1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;15.9 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:60 http://archive.ubuntu.com/ubuntu noble/main amd64 libiec61883-0 amd64 1.2.0-6build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;24.5 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:61 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libspeex1 amd64 1.2.1-2ubuntu2.24.04.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;59.6 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:62 http://archive.ubuntu.com/ubuntu noble/main amd64 libshout3 amd64 2.4.6-1build2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;50.3 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:63 http://archive.ubuntu.com/ubuntu noble/main amd64 libtag1v5-vanilla amd64 1.13.1-1build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;326&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:64 http://archive.ubuntu.com/ubuntu noble/main amd64 libtag1v5 amd64 1.13.1-1build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;11.7 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:65 http://archive.ubuntu.com/ubuntu noble/main amd64 libtwolame0 amd64 0.4.0-2build3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;52.3 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:66 http://archive.ubuntu.com/ubuntu noble/main amd64 libv4lconvert0t64 amd64 1.26.1-4build3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;87.6 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:67 http://archive.ubuntu.com/ubuntu noble/main amd64 libv4l-0t64 amd64 1.26.1-4build3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;46.9 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:68 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvpx9 amd64 1.14.0-1ubuntu2.2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;1,143 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:69 http://archive.ubuntu.com/ubuntu noble/main amd64 libwavpack1 amd64 5.6.0-1build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;84.6 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:70 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 gstreamer1.0-plugins-good amd64 1.24.2-1ubuntu1.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;2,238 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:71 http://archive.ubuntu.com/ubuntu noble/main amd64 libxv1 amd64 2:1.0.11-1.1build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;10.7 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:72 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 gstreamer1.0-x amd64 1.24.2-1ubuntu0.2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;85.0 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:73 http://archive.ubuntu.com/ubuntu noble/main amd64 ipxe-qemu all 1.21.1+git-20220113.fbbdc3926-0ubuntu2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;1,565 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:74 http://archive.ubuntu.com/ubuntu noble/main amd64 ipxe-qemu-256k-compat-efi-roms all 1.0.0+git-20150424.a25a16d-0ubuntu5 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;548&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:75 http://archive.ubuntu.com/ubuntu noble/main amd64 libbrlapi0.8 amd64 6.6-4ubuntu5 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;31.4 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:76 http://archive.ubuntu.com/ubuntu noble/main amd64 libdecor-0-0 amd64 0.2.2-1build2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;16.5 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:77 http://archive.ubuntu.com/ubuntu noble/main amd64 libdecor-0-plugin-1-gtk amd64 0.2.2-1build2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;22.2 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:78 http://archive.ubuntu.com/ubuntu noble/main amd64 libsamplerate0 amd64 0.2.2-4build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;1,344 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:79 http://archive.ubuntu.com/ubuntu noble/main amd64 libjack-jackd2-0 amd64 1.9.21~dfsg-3ubuntu3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;289&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:80 http://archive.ubuntu.com/ubuntu noble/main amd64 libwebrtc-audio-processing1 amd64 0.3.1-0ubuntu6 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;290&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:81 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libspa-0.2-modules amd64 1.0.5-1ubuntu3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;626&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:82 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libpipewire-0.3-0t64 amd64 1.0.5-1ubuntu3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;252&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:83 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libpipewire-0.3-common all 1.0.5-1ubuntu3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;18.8 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:84 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libpolkit-agent-1-0 amd64 124-2ubuntu1.24.04.2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;17.4 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:85 http://archive.ubuntu.com/ubuntu noble/main amd64 libxss1 amd64 1:1.2.3-1build3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;7,204 B&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:86 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libsdl2-2.0-0 amd64 2.30.0+dfsg-1ubuntu3.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;686&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:87 http://archive.ubuntu.com/ubuntu noble/main amd64 libslirp0 amd64 4.7.0-1ubuntu3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;63.8 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:88 http://archive.ubuntu.com/ubuntu noble/main amd64 libspice-server1 amd64 0.15.1-1build2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;349&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:89 http://archive.ubuntu.com/ubuntu noble/main amd64 libtpms0 amd64 0.9.3-0ubuntu4 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;373&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:90 http://archive.ubuntu.com/ubuntu noble/main amd64 libvirglrenderer1 amd64 1.0.0-1ubuntu2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;226&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:91 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvirt-daemon-driver-qemu amd64 10.0.0-2ubuntu8.7 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;740&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:92 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvirt-daemon amd64 10.0.0-2ubuntu8.7 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;431&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:93 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvirt-daemon-config-network all 10.0.0-2ubuntu8.7 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;3,120 B&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:94 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvirt-daemon-config-nwfilter all 10.0.0-2ubuntu8.7 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;6,042 B&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:95 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 systemd-container amd64 255.4-1ubuntu8.8 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;417&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:96 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvirt-daemon-system-systemd all 10.0.0-2ubuntu8.7 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;1,376 B&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:97 http://archive.ubuntu.com/ubuntu noble/main amd64 xml-core all 0.19 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;20.3 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:98 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 polkitd amd64 124-2ubuntu1.24.04.2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;95.2 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:99 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libvirt-daemon-system amd64 10.0.0-2ubuntu8.7 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;49.6 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:100 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libxml2-utils amd64 2.9.14+dfsg-1.3ubuntu3.3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;39.4 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:101 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 lvm2 amd64 2.03.16-3ubuntu3.2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;1,186 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:102 http://archive.ubuntu.com/ubuntu noble/main amd64 mdevctl amd64 1.3.0-1ubuntu2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;936&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:103 http://archive.ubuntu.com/ubuntu noble/main amd64 python3-cairo amd64 1.25.1-2build2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;119&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:104 http://archive.ubuntu.com/ubuntu noble/main amd64 python3-gi-cairo amd64 3.48.2-1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;8,132 B&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:105 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 qemu-system-common amd64 1:8.2.2+ds-0ubuntu1.7 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;1,253 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:106 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 qemu-system-data all 1:8.2.2+ds-0ubuntu1.7 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;1,793 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:107 http://archive.ubuntu.com/ubuntu noble/main amd64 libfdt1 amd64 1.7.0-2build1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;20.1 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:108 http://archive.ubuntu.com/ubuntu noble/main amd64 seabios all 1.16.3-2 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;175&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:109 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 qemu-system-x86 amd64 1:8.2.2+ds-0ubuntu1.7 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;11.2 MB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:110 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 qemu-system-modules-opengl amd64 1:8.2.2+ds-0ubuntu1.7 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;184&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:111 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 qemu-system-gui amd64 1:8.2.2+ds-0ubuntu1.7 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;314&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:112 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 qemu-system-modules-spice amd64 1:8.2.2+ds-0ubuntu1.7 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;70.2 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:113 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 swtpm amd64 0.7.3-0ubuntu5.24.04.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;53.1 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:114 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 swtpm-tools amd64 0.7.3-0ubuntu5.24.04.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;92.9 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:115 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 thin-provisioning-tools amd64 0.9.0-2ubuntu5.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;436&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:116 http://archive.ubuntu.com/ubuntu noble/universe amd64 gir1.2-libvirt-glib-1.0 amd64 5.0.0-2build3 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;32.6 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:117 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 virt-manager all 1:4.1.0-3ubuntu0.1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;263&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:118 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 libnss-mymachines amd64 255.4-1ubuntu8.8 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;153&lt;/span&gt; kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get:119 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 ovmf all 2024.02-2ubuntu0.4 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;4,571 kB&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Fetched 43.2 MB in 5s &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;9,539 kB/s&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Extracting templates from packages: 100%&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preconfiguring packages ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package sgml-base.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Reading database ... &lt;span class=&#34;m&#34;&gt;30439&lt;/span&gt; files and directories currently installed.&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../000-sgml-base_1.31_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking sgml-base &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.31&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libslang2:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../001-libslang2_2.3.3-3build2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libslang2:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.3.3-3build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package logrotate.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../002-logrotate_3.21.0-2build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking logrotate &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3.21.0-2build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package netcat-openbsd.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../003-netcat-openbsd_1.226-1ubuntu2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking netcat-openbsd &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.226-1ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package udev.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../004-udev_255.4-1ubuntu8.8_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking udev &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;255.4-1ubuntu8.8&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package systemd-hwe-hwdb.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../005-systemd-hwe-hwdb_255.1.4_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking systemd-hwe-hwdb &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;255.1.4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package dmidecode.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../006-dmidecode_3.5-3ubuntu0.1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking dmidecode &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3.5-3ubuntu0.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package gettext-base.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../007-gettext-base_0.21-14ubuntu2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking gettext-base &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.21-14ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libip4tc2:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../008-libip4tc2_1.8.10-3ubuntu2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libip4tc2:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.8.10-3ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libip6tc2:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../009-libip6tc2_1.8.10-3ubuntu2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libip6tc2:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.8.10-3ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libnfnetlink0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../010-libnfnetlink0_1.0.2-2build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libnfnetlink0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.0.2-2build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libnetfilter-conntrack3:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../011-libnetfilter-conntrack3_1.0.9-6build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libnetfilter-conntrack3:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.0.9-6build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libnftnl11:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../012-libnftnl11_1.2.6-2build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libnftnl11:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.2.6-2build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package iptables.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../013-iptables_1.8.10-3ubuntu2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking iptables &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.8.10-3ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libnftables1:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../014-libnftables1_1.0.9-1build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libnftables1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.0.9-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libparted2t64:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../015-libparted2t64_3.6-4build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Adding &lt;span class=&#34;s1&#34;&gt;&amp;#39;diversion of /lib/x86_64-linux-gnu/libparted.so.2 to /lib/x86_64-linux-gnu/libparted.so.2.usr-is-merged by&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;libparted2t64&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Adding &lt;span class=&#34;s1&#34;&gt;&amp;#39;diversion of /lib/x86_64-linux-gnu/libparted.so.2.0.5 to /lib/x86_64-linux-gnu/libparted.so.2.0.5.usr-is-me&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;rged by libparted2t64&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libparted2t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3.6-4build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package nftables.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../016-nftables_1.0.9-1build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking nftables &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.0.9-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package parted.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../017-parted_3.6-4build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking parted &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3.6-4build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package acl.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../018-acl_2.3.2-1build1.1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking acl &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.3.2-1build1.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package alsa-topology-conf.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../019-alsa-topology-conf_1.2.5.1-2_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking alsa-topology-conf &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.2.5.1-2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libasound2-data.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../020-libasound2-data_1.2.11-1ubuntu0.1_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libasound2-data &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.2.11-1ubuntu0.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libasound2t64:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../021-libasound2t64_1.2.11-1ubuntu0.1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libasound2t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.2.11-1ubuntu0.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package alsa-ucm-conf.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../022-alsa-ucm-conf_1.2.10-1ubuntu5.7_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking alsa-ucm-conf &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.2.10-1ubuntu5.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package msr-tools.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../023-msr-tools_1.3-5build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking msr-tools &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.3-5build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package cpu-checker.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../024-cpu-checker_0.7-1.3build2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking cpu-checker &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.7-1.3build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libdevmapper-event1.02.1:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../025-libdevmapper-event1.02.1_2%3a1.02.185-3ubuntu3.2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libdevmapper-event1.02.1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2:1.02.185-3ubuntu3.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package liblvm2cmd2.03:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../026-liblvm2cmd2.03_2.03.16-3ubuntu3.2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking liblvm2cmd2.03:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.03.16-3ubuntu3.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package dmeventd.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../027-dmeventd_2%3a1.02.185-3ubuntu3.2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking dmeventd &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2:1.02.185-3ubuntu3.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package dns-root-data.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../028-dns-root-data_2024071801~ubuntu0.24.04.1_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking dns-root-data &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2024071801~ubuntu0.24.04.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package dnsmasq-base.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../029-dnsmasq-base_2.90-2build2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking dnsmasq-base &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.90-2build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package gir1.2-atk-1.0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../030-gir1.2-atk-1.0_2.52.0-1build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking gir1.2-atk-1.0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.52.0-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package gir1.2-gdkpixbuf-2.0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../031-gir1.2-gdkpixbuf-2.0_2.42.10+dfsg-3ubuntu3.1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking gir1.2-gdkpixbuf-2.0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.42.10+dfsg-3ubuntu3.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libharfbuzz-gobject0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../032-libharfbuzz-gobject0_8.3.0-2build2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libharfbuzz-gobject0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;8.3.0-2build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package gir1.2-harfbuzz-0.0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../033-gir1.2-harfbuzz-0.0_8.3.0-2build2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking gir1.2-harfbuzz-0.0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;8.3.0-2build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libxft2:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../034-libxft2_2.3.6-1build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libxft2:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.3.6-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libpangoxft-1.0-0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../035-libpangoxft-1.0-0_1.52.1+ds-1build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libpangoxft-1.0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.52.1+ds-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package gir1.2-pango-1.0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../036-gir1.2-pango-1.0_1.52.1+ds-1build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking gir1.2-pango-1.0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.52.1+ds-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package gir1.2-gtk-3.0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../037-gir1.2-gtk-3.0_3.24.41-4ubuntu1.3_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking gir1.2-gtk-3.0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3.24.41-4ubuntu1.3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libayatana-ido3-0.4-0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../038-libayatana-ido3-0.4-0_0.10.1-1build2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libayatana-ido3-0.4-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.10.1-1build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libayatana-indicator3-7:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../039-libayatana-indicator3-7_0.9.4-1build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libayatana-indicator3-7:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.9.4-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libdbusmenu-glib4:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../040-libdbusmenu-glib4_18.10.20180917~bzr492+repack1-3.1ubuntu5_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libdbusmenu-glib4:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;18.10.20180917~bzr492+repack1-3.1ubuntu5&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libdbusmenu-gtk3-4:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../041-libdbusmenu-gtk3-4_18.10.20180917~bzr492+repack1-3.1ubuntu5_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libdbusmenu-gtk3-4:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;18.10.20180917~bzr492+repack1-3.1ubuntu5&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libayatana-appindicator3-1.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../042-libayatana-appindicator3-1_0.5.93-1build3_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libayatana-appindicator3-1 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.5.93-1build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package gir1.2-ayatanaappindicator3-0.1.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../043-gir1.2-ayatanaappindicator3-0.1_0.5.93-1build3_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking gir1.2-ayatanaappindicator3-0.1 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.5.93-1build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package gir1.2-gstreamer-1.0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../044-gir1.2-gstreamer-1.0_1.24.2-1ubuntu0.1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking gir1.2-gstreamer-1.0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.24.2-1ubuntu0.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package gir1.2-gtk-vnc-2.0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../045-gir1.2-gtk-vnc-2.0_1.3.1-1build2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking gir1.2-gtk-vnc-2.0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.3.1-1build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libgtksourceview-4-common.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../046-libgtksourceview-4-common_4.8.4-5build4_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libgtksourceview-4-common &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;4.8.4-5build4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libgtksourceview-4-0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../047-libgtksourceview-4-0_4.8.4-5build4_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libgtksourceview-4-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;4.8.4-5build4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package gir1.2-gtksource-4:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../048-gir1.2-gtksource-4_4.8.4-5build4_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking gir1.2-gtksource-4:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;4.8.4-5build4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package gir1.2-spiceclientglib-2.0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../049-gir1.2-spiceclientglib-2.0_0.42-2ubuntu2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking gir1.2-spiceclientglib-2.0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.42-2ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package gir1.2-spiceclientgtk-3.0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../050-gir1.2-spiceclientgtk-3.0_0.42-2ubuntu2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking gir1.2-spiceclientgtk-3.0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.42-2ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package gir1.2-vte-2.91:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../051-gir1.2-vte-2.91_0.76.0-1ubuntu0.1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking gir1.2-vte-2.91:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.76.0-1ubuntu0.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libaa1:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../052-libaa1_1.4p5-51.1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libaa1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.4p5-51.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libraw1394-11:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../053-libraw1394-11_2.1.2-2build3_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libraw1394-11:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.1.2-2build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libavc1394-0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../054-libavc1394-0_0.5.4-5build3_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libavc1394-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.5.4-5build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libcaca0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../055-libcaca0_0.99.beta20-4build2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libcaca0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.99.beta20-4build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libdv4t64:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../056-libdv4t64_1.0.0-17.1build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libdv4t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.0.0-17.1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libgstreamer-plugins-good1.0-0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../057-libgstreamer-plugins-good1.0-0_1.24.2-1ubuntu1.1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libgstreamer-plugins-good1.0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.24.2-1ubuntu1.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libgudev-1.0-0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../058-libgudev-1.0-0_1%3a238-5ubuntu1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libgudev-1.0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:238-5ubuntu1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libiec61883-0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../059-libiec61883-0_1.2.0-6build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libiec61883-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.2.0-6build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libspeex1:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../060-libspeex1_1.2.1-2ubuntu2.24.04.1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libspeex1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.2.1-2ubuntu2.24.04.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libshout3:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../061-libshout3_2.4.6-1build2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libshout3:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.4.6-1build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libtag1v5-vanilla:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../062-libtag1v5-vanilla_1.13.1-1build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libtag1v5-vanilla:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.13.1-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libtag1v5:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../063-libtag1v5_1.13.1-1build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libtag1v5:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.13.1-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libtwolame0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../064-libtwolame0_0.4.0-2build3_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libtwolame0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.4.0-2build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libv4lconvert0t64:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../065-libv4lconvert0t64_1.26.1-4build3_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libv4lconvert0t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.26.1-4build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libv4l-0t64:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../066-libv4l-0t64_1.26.1-4build3_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libv4l-0t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.26.1-4build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libvpx9:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../067-libvpx9_1.14.0-1ubuntu2.2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libvpx9:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.14.0-1ubuntu2.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libwavpack1:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../068-libwavpack1_5.6.0-1build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libwavpack1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;5.6.0-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package gstreamer1.0-plugins-good:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../069-gstreamer1.0-plugins-good_1.24.2-1ubuntu1.1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking gstreamer1.0-plugins-good:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.24.2-1ubuntu1.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libxv1:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../070-libxv1_2%3a1.0.11-1.1build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libxv1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2:1.0.11-1.1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package gstreamer1.0-x:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../071-gstreamer1.0-x_1.24.2-1ubuntu0.2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking gstreamer1.0-x:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.24.2-1ubuntu0.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package ipxe-qemu.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../072-ipxe-qemu_1.21.1+git-20220113.fbbdc3926-0ubuntu2_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking ipxe-qemu &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.21.1+git-20220113.fbbdc3926-0ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package ipxe-qemu-256k-compat-efi-roms.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../073-ipxe-qemu-256k-compat-efi-roms_1.0.0+git-20150424.a25a16d-0ubuntu5_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking ipxe-qemu-256k-compat-efi-roms &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.0.0+git-20150424.a25a16d-0ubuntu5&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libbrlapi0.8:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../074-libbrlapi0.8_6.6-4ubuntu5_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libbrlapi0.8:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;6.6-4ubuntu5&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libdecor-0-0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../075-libdecor-0-0_0.2.2-1build2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libdecor-0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.2.2-1build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libdecor-0-plugin-1-gtk:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../076-libdecor-0-plugin-1-gtk_0.2.2-1build2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libdecor-0-plugin-1-gtk:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.2.2-1build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libsamplerate0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../077-libsamplerate0_0.2.2-4build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libsamplerate0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.2.2-4build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libjack-jackd2-0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../078-libjack-jackd2-0_1.9.21~dfsg-3ubuntu3_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libjack-jackd2-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.9.21~dfsg-3ubuntu3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libwebrtc-audio-processing1:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../079-libwebrtc-audio-processing1_0.3.1-0ubuntu6_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libwebrtc-audio-processing1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.3.1-0ubuntu6&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libspa-0.2-modules:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../080-libspa-0.2-modules_1.0.5-1ubuntu3_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libspa-0.2-modules:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.0.5-1ubuntu3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libpipewire-0.3-0t64:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../081-libpipewire-0.3-0t64_1.0.5-1ubuntu3_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libpipewire-0.3-0t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.0.5-1ubuntu3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libpipewire-0.3-common.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../082-libpipewire-0.3-common_1.0.5-1ubuntu3_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libpipewire-0.3-common &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.0.5-1ubuntu3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libpolkit-agent-1-0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../083-libpolkit-agent-1-0_124-2ubuntu1.24.04.2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libpolkit-agent-1-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;124-2ubuntu1.24.04.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libxss1:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../084-libxss1_1%3a1.2.3-1build3_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libxss1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:1.2.3-1build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libsdl2-2.0-0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../085-libsdl2-2.0-0_2.30.0+dfsg-1ubuntu3.1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libsdl2-2.0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.30.0+dfsg-1ubuntu3.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libslirp0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../086-libslirp0_4.7.0-1ubuntu3_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libslirp0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;4.7.0-1ubuntu3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libspice-server1:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../087-libspice-server1_0.15.1-1build2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libspice-server1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.15.1-1build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libtpms0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../088-libtpms0_0.9.3-0ubuntu4_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libtpms0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.9.3-0ubuntu4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libvirglrenderer1:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../089-libvirglrenderer1_1.0.0-1ubuntu2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libvirglrenderer1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.0.0-1ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libvirt-daemon-driver-qemu.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../090-libvirt-daemon-driver-qemu_10.0.0-2ubuntu8.7_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libvirt-daemon-driver-qemu &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;10.0.0-2ubuntu8.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libvirt-daemon.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../091-libvirt-daemon_10.0.0-2ubuntu8.7_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libvirt-daemon &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;10.0.0-2ubuntu8.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libvirt-daemon-config-network.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../092-libvirt-daemon-config-network_10.0.0-2ubuntu8.7_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libvirt-daemon-config-network &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;10.0.0-2ubuntu8.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libvirt-daemon-config-nwfilter.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../093-libvirt-daemon-config-nwfilter_10.0.0-2ubuntu8.7_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libvirt-daemon-config-nwfilter &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;10.0.0-2ubuntu8.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package systemd-container.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../094-systemd-container_255.4-1ubuntu8.8_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking systemd-container &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;255.4-1ubuntu8.8&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libvirt-daemon-system-systemd.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../095-libvirt-daemon-system-systemd_10.0.0-2ubuntu8.7_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libvirt-daemon-system-systemd &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;10.0.0-2ubuntu8.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package xml-core.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../096-xml-core_0.19_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking xml-core &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.19&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package polkitd.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../097-polkitd_124-2ubuntu1.24.04.2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking polkitd &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;124-2ubuntu1.24.04.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libvirt-daemon-system.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../098-libvirt-daemon-system_10.0.0-2ubuntu8.7_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libvirt-daemon-system &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;10.0.0-2ubuntu8.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libxml2-utils.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../099-libxml2-utils_2.9.14+dfsg-1.3ubuntu3.3_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libxml2-utils &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.9.14+dfsg-1.3ubuntu3.3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package lvm2.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../100-lvm2_2.03.16-3ubuntu3.2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking lvm2 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.03.16-3ubuntu3.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package mdevctl.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../101-mdevctl_1.3.0-1ubuntu2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking mdevctl &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.3.0-1ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package python3-cairo.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../102-python3-cairo_1.25.1-2build2_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking python3-cairo &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.25.1-2build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package python3-gi-cairo.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../103-python3-gi-cairo_3.48.2-1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking python3-gi-cairo &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3.48.2-1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package qemu-system-common.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../104-qemu-system-common_1%3a8.2.2+ds-0ubuntu1.7_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking qemu-system-common &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:8.2.2+ds-0ubuntu1.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package qemu-system-data.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../105-qemu-system-data_1%3a8.2.2+ds-0ubuntu1.7_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking qemu-system-data &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:8.2.2+ds-0ubuntu1.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libfdt1:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../106-libfdt1_1.7.0-2build1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libfdt1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.7.0-2build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package seabios.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../107-seabios_1.16.3-2_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking seabios &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.16.3-2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package qemu-system-x86.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../108-qemu-system-x86_1%3a8.2.2+ds-0ubuntu1.7_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking qemu-system-x86 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:8.2.2+ds-0ubuntu1.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package qemu-system-modules-opengl.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../109-qemu-system-modules-opengl_1%3a8.2.2+ds-0ubuntu1.7_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking qemu-system-modules-opengl &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:8.2.2+ds-0ubuntu1.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package qemu-system-gui.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../110-qemu-system-gui_1%3a8.2.2+ds-0ubuntu1.7_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking qemu-system-gui &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:8.2.2+ds-0ubuntu1.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package qemu-system-modules-spice.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../111-qemu-system-modules-spice_1%3a8.2.2+ds-0ubuntu1.7_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking qemu-system-modules-spice &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:8.2.2+ds-0ubuntu1.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package swtpm.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../112-swtpm_0.7.3-0ubuntu5.24.04.1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking swtpm &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.7.3-0ubuntu5.24.04.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package swtpm-tools.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../113-swtpm-tools_0.7.3-0ubuntu5.24.04.1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking swtpm-tools &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.7.3-0ubuntu5.24.04.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package thin-provisioning-tools.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../114-thin-provisioning-tools_0.9.0-2ubuntu5.1_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking thin-provisioning-tools &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.9.0-2ubuntu5.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package gir1.2-libvirt-glib-1.0:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../115-gir1.2-libvirt-glib-1.0_5.0.0-2build3_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking gir1.2-libvirt-glib-1.0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;5.0.0-2build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package virt-manager.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../116-virt-manager_1%3a4.1.0-3ubuntu0.1_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking virt-manager &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:4.1.0-3ubuntu0.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package libnss-mymachines:amd64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../117-libnss-mymachines_255.4-1ubuntu8.8_amd64.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking libnss-mymachines:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;255.4-1ubuntu8.8&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selecting previously unselected package ovmf.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Preparing to unpack .../118-ovmf_2024.02-2ubuntu0.4_all.deb ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Unpacking ovmf &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2024.02-2ubuntu0.4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libip4tc2:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.8.10-3ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libpipewire-0.3-common &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.0.5-1ubuntu3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up logrotate &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3.21.0-2build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Created symlink /etc/systemd/system/timers.target.wants/logrotate.timer → /usr/lib/systemd/system/logrotate.timer.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libvirt-daemon-config-network &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;10.0.0-2ubuntu8.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up gir1.2-gstreamer-1.0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.24.2-1ubuntu0.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libraw1394-11:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.1.2-2build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libxft2:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.3.6-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libtag1v5-vanilla:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.13.1-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up python3-cairo &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.25.1-2build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libspeex1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.2.1-2ubuntu2.24.04.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libdevmapper-event1.02.1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2:1.02.185-3ubuntu3.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libv4lconvert0t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.26.1-4build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libpangoxft-1.0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.52.1+ds-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libtwolame0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.4.0-2build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up gir1.2-gdkpixbuf-2.0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.42.10+dfsg-3ubuntu3.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up gir1.2-spiceclientglib-2.0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.42-2ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up gir1.2-atk-1.0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.52.0-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libip6tc2:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.8.10-3ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libdbusmenu-glib4:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;18.10.20180917~bzr492+repack1-3.1ubuntu5&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libspice-server1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.15.1-1build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up netcat-openbsd &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.226-1ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;update-alternatives: using /bin/nc.openbsd to provide /bin/nc &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;nc&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; in auto mode&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up gir1.2-libvirt-glib-1.0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;5.0.0-2build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up msr-tools &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.3-5build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libwebrtc-audio-processing1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.3.1-0ubuntu6&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up gettext-base &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.21-14ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libnftnl11:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.2.6-2build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libharfbuzz-gobject0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;8.3.0-2build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libfdt1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.7.0-2build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libayatana-ido3-0.4-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.10.1-1build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up gir1.2-harfbuzz-0.0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;8.3.0-2build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up acl &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.3.2-1build1.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up ovmf &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2024.02-2ubuntu0.4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up dns-root-data &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2024071801~ubuntu0.24.04.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libasound2-data &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.2.11-1ubuntu0.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up gir1.2-pango-1.0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.52.1+ds-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libgstreamer-plugins-good1.0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.24.2-1ubuntu1.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libasound2t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.2.11-1ubuntu0.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libslang2:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.3.3-3build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libvirglrenderer1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.0.0-1ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libspa-0.2-modules:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.0.5-1ubuntu3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libxv1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2:1.0.11-1.1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libshout3:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.4.6-1build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up thin-provisioning-tools &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.9.0-2ubuntu5.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up udev &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;255.4-1ubuntu8.8&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Creating group &lt;span class=&#34;s1&#34;&gt;&amp;#39;input&amp;#39;&lt;/span&gt; with GID 995.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Creating group &lt;span class=&#34;s1&#34;&gt;&amp;#39;sgx&amp;#39;&lt;/span&gt; with GID 994.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Creating group &lt;span class=&#34;s1&#34;&gt;&amp;#39;kvm&amp;#39;&lt;/span&gt; with GID 993.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Creating group &lt;span class=&#34;s1&#34;&gt;&amp;#39;render&amp;#39;&lt;/span&gt; with GID 992.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fchownat&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; of /dev/snd/seq failed: Operation not permitted&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fchownat&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; of /dev/snd/timer failed: Operation not permitted&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fchownat&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; of /dev/loop-control failed: Operation not permitted&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fchmod&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; of /dev/kvm failed: Operation not permitted&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fchmod&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; of /dev/vhost-net failed: Operation not permitted&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fchmod&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; of /dev/vhost-vsock failed: Operation not permitted&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libvirt-daemon-driver-qemu &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;10.0.0-2ubuntu8.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libdv4t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.0.0-17.1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up qemu-system-data &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:8.2.2+ds-0ubuntu1.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up seabios &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.16.3-2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up systemd-hwe-hwdb &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;255.1.4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libv4l-0t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.26.1-4build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up systemd-container &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;255.4-1ubuntu8.8&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Created symlink /etc/systemd/system/multi-user.target.wants/machines.target → /usr/lib/systemd/system/machines.targ&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;et.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libvpx9:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.14.0-1ubuntu2.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libslirp0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;4.7.0-1ubuntu3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up alsa-topology-conf &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.2.5.1-2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libtag1v5:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.13.1-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up cpu-checker &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.7-1.3build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libwavpack1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;5.6.0-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libnfnetlink0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.0.2-2build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up ipxe-qemu &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.21.1+git-20220113.fbbdc3926-0ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libdecor-0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.2.2-1build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libpolkit-agent-1-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;124-2ubuntu1.24.04.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up ipxe-qemu-256k-compat-efi-roms &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.0.0+git-20150424.a25a16d-0ubuntu5&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up sgml-base &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.31&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libbrlapi0.8:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;6.6-4ubuntu5&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libxss1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:1.2.3-1build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libtpms0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.9.3-0ubuntu4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up dmidecode &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3.5-3ubuntu0.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libxml2-utils &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.9.14+dfsg-1.3ubuntu3.3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libvirt-daemon-config-nwfilter &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;10.0.0-2ubuntu8.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libsamplerate0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.2.2-4build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libayatana-indicator3-7:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.9.4-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up python3-gi-cairo &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3.48.2-1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libgtksourceview-4-common &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;4.8.4-5build4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libpipewire-0.3-0t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.0.5-1ubuntu3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libdecor-0-plugin-1-gtk:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.2.2-1build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libgudev-1.0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:238-5ubuntu1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libaa1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.4p5-51.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libiec61883-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.2.0-6build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up mdevctl &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.3.0-1ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libavc1394-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.5.4-5build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libdbusmenu-gtk3-4:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;18.10.20180917~bzr492+repack1-3.1ubuntu5&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libnftables1:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.0.9-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up gstreamer1.0-x:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.24.2-1ubuntu0.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up nftables &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.0.9-1build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up qemu-system-common &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:8.2.2+ds-0ubuntu1.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Created symlink /etc/systemd/system/multi-user.target.wants/qemu-kvm.service → /usr/lib/systemd/system/qemu-kvm.ser&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vice.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libcaca0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.99.beta20-4build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up alsa-ucm-conf &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.2.10-1ubuntu5.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up gstreamer1.0-plugins-good:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.24.2-1ubuntu1.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up qemu-system-x86 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:8.2.2+ds-0ubuntu1.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up gir1.2-gtk-3.0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3.24.41-4ubuntu1.3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libparted2t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3.6-4build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Removing &lt;span class=&#34;s1&#34;&gt;&amp;#39;diversion of /lib/x86_64-linux-gnu/libparted.so.2 to /lib/x86_64-linux-gnu/libparted.so.2.usr-is-merged b&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;y libparted2t64&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Removing &lt;span class=&#34;s1&#34;&gt;&amp;#39;diversion of /lib/x86_64-linux-gnu/libparted.so.2.0.5 to /lib/x86_64-linux-gnu/libparted.so.2.0.5.usr-is-&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;merged by libparted2t64&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libgtksourceview-4-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;4.8.4-5build4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libnss-mymachines:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;255.4-1ubuntu8.8&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libayatana-appindicator3-1 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.5.93-1build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up swtpm &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.7.3-0ubuntu5.24.04.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up gir1.2-gtk-vnc-2.0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.3.1-1build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libvirt-daemon-system-systemd &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;10.0.0-2ubuntu8.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up gir1.2-spiceclientgtk-3.0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.42-2ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libjack-jackd2-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.9.21~dfsg-3ubuntu3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libnetfilter-conntrack3:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.0.9-6build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up xml-core &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.19&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up gir1.2-vte-2.91:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.76.0-1ubuntu0.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libvirt-daemon &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;10.0.0-2ubuntu8.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libsdl2-2.0-0:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.30.0+dfsg-1ubuntu3.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up gir1.2-ayatanaappindicator3-0.1 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.5.93-1build3&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up gir1.2-gtksource-4:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;4.8.4-5build4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up qemu-system-modules-opengl &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:8.2.2+ds-0ubuntu1.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up iptables &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.8.10-3ubuntu2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;update-alternatives: using /usr/sbin/iptables-legacy to provide /usr/sbin/iptables &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;iptables&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; in auto mode&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;update-alternatives: using /usr/sbin/ip6tables-legacy to provide /usr/sbin/ip6tables &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;ip6tables&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; in auto mode&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;update-alternatives: using /usr/sbin/iptables-nft to provide /usr/sbin/iptables &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;iptables&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; in auto mode&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;update-alternatives: using /usr/sbin/ip6tables-nft to provide /usr/sbin/ip6tables &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;ip6tables&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; in auto mode&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;update-alternatives: using /usr/sbin/arptables-nft to provide /usr/sbin/arptables &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;arptables&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; in auto mode&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;update-alternatives: using /usr/sbin/ebtables-nft to provide /usr/sbin/ebtables &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;ebtables&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; in auto mode&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up qemu-system-gui &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:8.2.2+ds-0ubuntu1.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up parted &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;3.6-4build1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up dnsmasq-base &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.90-2build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up swtpm-tools &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.7.3-0ubuntu5.24.04.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;info: Selecting GID from range &lt;span class=&#34;m&#34;&gt;100&lt;/span&gt; to &lt;span class=&#34;m&#34;&gt;999&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;info: Adding group &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;swtpm&lt;span class=&#34;s1&#34;&gt;&amp;#39; (GID 107) ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;info: The home dir /var/lib/swtpm you specified can&amp;#39;&lt;/span&gt;t be accessed: No such file or directory&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;info: Selecting UID from range &lt;span class=&#34;m&#34;&gt;100&lt;/span&gt; to &lt;span class=&#34;m&#34;&gt;999&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;info: Adding system user &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;swtpm&lt;span class=&#34;s1&#34;&gt;&amp;#39; (UID 103) ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;info: Adding new user `swtpm&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;UID 103&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; with group &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;swtpm&lt;span class=&#34;s1&#34;&gt;&amp;#39; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;info: Not creating home directory `/var/lib/swtpm&amp;#39;&lt;/span&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up virt-manager &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:4.1.0-3ubuntu0.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up qemu-system-modules-spice &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1:8.2.2+ds-0ubuntu1.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up liblvm2cmd2.03:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.03.16-3ubuntu3.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up dmeventd &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2:1.02.185-3ubuntu3.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Created symlink /etc/systemd/system/sockets.target.wants/dm-event.socket → /usr/lib/systemd/system/dm-event.socket.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up lvm2 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.03.16-3ubuntu3.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Created symlink /etc/systemd/system/sysinit.target.wants/blk-availability.service → /usr/lib/systemd/system/blk-ava&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ilability.service.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Created symlink /etc/systemd/system/sysinit.target.wants/lvm2-monitor.service → /usr/lib/systemd/system/lvm2-monito&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;r.service.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Created symlink /etc/systemd/system/sysinit.target.wants/lvm2-lvmpolld.socket → /usr/lib/systemd/system/lvm2-lvmpol&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ld.socket.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Processing triggers &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; libglib2.0-0t64:amd64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.80.0-6ubuntu3.4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Processing triggers &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; dbus &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.14.10-4ubuntu4.1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Processing triggers &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; hicolor-icon-theme &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;0.17-2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Processing triggers &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; libc-bin &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.39-0ubuntu8.4&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Processing triggers &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; man-db &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;2.12.0-4build2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Processing triggers &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; sgml-base &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1.31&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up polkitd &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;124-2ubuntu1.24.04.2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Creating group &lt;span class=&#34;s1&#34;&gt;&amp;#39;polkitd&amp;#39;&lt;/span&gt; with GID 991.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Creating user &lt;span class=&#34;s1&#34;&gt;&amp;#39;polkitd&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;User &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; polkitd&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; with UID &lt;span class=&#34;m&#34;&gt;991&lt;/span&gt; and GID 991.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;invoke-rc.d: could not determine current runlevel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;invoke-rc.d: policy-rc.d denied execution of reload.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;start-stop-daemon: unable to stat /usr/libexec/polkitd &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;No such file or directory&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Setting up libvirt-daemon-system &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;10.0.0-2ubuntu8.7&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;useradd warning: libvirt-qemu&lt;span class=&#34;s1&#34;&gt;&amp;#39;s uid 64055 is greater than SYS_UID_MAX 999&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;chown: changing ownership of &amp;#39;&lt;/span&gt;/var/lib/libvirt/qemu/&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;: Operation not permitted&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg: error processing package libvirt-daemon-system &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;--configure&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; installed libvirt-daemon-system package post-installation script subprocess returned error &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; status &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Errors were encountered &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; processing:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; libvirt-daemon-system&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;E: Sub-process /usr/bin/dpkg returned an error code &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;📦&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;waylon@ubuntu ~&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;$ virt-manager&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>csv</title>
    <id>https://waylonwalker.com/csv/</id>
    <updated>2025-06-26T20:44:33Z</updated>
    <published>2025-06-26T20:44:33Z</published>
    <link href="https://waylonwalker.com/csv/" rel="alternate" type="text/html"></link>
    <content type="html">&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;age&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;city&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Alice&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;New York&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Bob&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;25&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;San Francisco&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Charlie&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;35&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Chicago&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Charlie&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;35&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Chicago&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Charlie&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;35&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Chicago&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Charlie&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;35&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Chicago&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Charlie&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;35&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Chicago&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Charlie&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;35&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Chicago&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Charlie&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;35&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Chicago&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;age&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;city&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Alice&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;New York&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Bob&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;25&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;San Francisco&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Charlie&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;35&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Chicago&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Charlie&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;35&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Chicago&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Charlie&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;35&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Chicago&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Charlie&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;35&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Chicago&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Charlie&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;35&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Chicago&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Charlie&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;35&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Chicago&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Charlie&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;35&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Chicago&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;chartjs-container&#34;&gt;&#xA;  &lt;canvas id=&#34;chartjs-1&#34;&gt;&lt;/canvas&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;chartjs-container&#34;&gt;&#xA;  &lt;canvas id=&#34;chartjs-2&#34;&gt;&lt;/canvas&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;chartjs-container&#34;&gt;&#xA;  &lt;canvas id=&#34;chartjs-3&#34;&gt;&lt;/canvas&gt;&#xA;&lt;/div&gt;&#xA;&lt;pre class=&#34;mermaid&#34;&gt;&#xA;graph TD&#xA;  A--&gt;B&#xA;  A--&gt;C&#xA;  A--&gt;D&#xA;  D--&gt;E&#xA;&lt;/pre&gt;&#xA;&#xA;&lt;script src=&#34;/assets/vendor/chartjs/chart.min.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script&gt;&#xA;document.addEventListener(&#39;DOMContentLoaded&#39;, function() {&#xA;  (function() {&#xA;    const ctx = document.getElementById(&#39;chartjs-1&#39;);&#xA;    new Chart(ctx, {&#xA;  &#34;type&#34;: &#34;bar&#34;,&#xA;  &#34;data&#34;: {&#xA;    &#34;labels&#34;: [&#34;Red&#34;, &#34;Blue&#34;],&#xA;    &#34;datasets&#34;: [{ &#34;label&#34;: &#34;Votes&#34;, &#34;data&#34;: [12, 19] }]&#xA;  },&#xA;  &#34;options&#34;: {&#xA;    &#34;responsive&#34;: true&#xA;  }&#xA;});&#xA;  })();&#xA;  (function() {&#xA;    const ctx = document.getElementById(&#39;chartjs-2&#39;);&#xA;    new Chart(ctx, {&#xA;  &#34;type&#34;: &#34;line&#34;,&#xA;  &#34;data&#34;: {&#xA;    &#34;labels&#34;: [&#xA;      65,&#xA;      59,&#xA;      80,&#xA;      81,&#xA;      56,&#xA;      55,&#xA;      40&#xA;    ],&#xA;    &#34;datasets&#34;: [&#xA;      {&#xA;        &#34;label&#34;: &#34;My First Dataset&#34;,&#xA;        &#34;data&#34;: [&#xA;          65,&#xA;          59,&#xA;          80,&#xA;          81,&#xA;          56,&#xA;          55,&#xA;          40&#xA;        ],&#xA;        &#34;fill&#34;: false,&#xA;        &#34;borderColor&#34;: &#34;rgb(75, 192, 192)&#34;,&#xA;        &#34;tension&#34;: 0.1&#xA;      }&#xA;    ]&#xA;  }&#xA;});&#xA;  })();&#xA;  (function() {&#xA;    const ctx = document.getElementById(&#39;chartjs-3&#39;);&#xA;    new Chart(ctx, {&#xA;  &#34;type&#34;: &#34;radar&#34;,&#xA;  &#34;data&#34;: {&#xA;    &#34;labels&#34;: [&#xA;      &#34;Minecraft&#34;,&#xA;      &#34;Hollow Knight&#34;,&#xA;      &#34;Animal Well&#34;,&#xA;      &#34;Watching Netflix&#34;,&#xA;      &#34;Tetris&#34;&#xA;&#xA;    ],&#xA;    &#34;datasets&#34;: [&#xA;      {&#xA;        &#34;label&#34;: &#34;MyChoices&#34;,&#xA;        &#34;data&#34;: [&#xA;        8, 9, 7, 4, 3&#xA;        ],&#xA;        &#34;fill&#34;: false,&#xA;        &#34;borderColor&#34;: &#34;rgb(75, 192, 192)&#34;,&#xA;        &#34;tension&#34;: 0.1&#xA;      }&#xA;    ]&#xA;  }&#xA;});&#xA;  })();&#xA;});&#xA;&lt;/script&gt;&#xA;&lt;script type=&#34;module&#34;&gt;&#xA;  import mermaid from &#39;/assets/vendor/mermaid/mermaid.esm.min.mjs&#39;;&#xA;  const rootStyle = getComputedStyle(document.documentElement);&#xA;  const css = (name, fallback) =&gt; (rootStyle.getPropertyValue(name) || fallback).trim();&#xA;  const isDark = window.matchMedia(&#39;(prefers-color-scheme: dark)&#39;).matches ||&#xA;    document.documentElement.dataset.theme === &#39;dark&#39;;&#xA;  const accent = css(&#39;--color-primary&#39;, &#39;#ffcd11&#39;);&#xA;  const flowchart = {&#xA;    nodeSpacing: 60,&#xA;    rankSpacing: 90,&#xA;    padding: 12,&#xA;  };&#xA;  const themeCSS = `&#xA;    .label foreignObject &gt; div { padding: 14px 14px 10px; line-height: 1.2; }&#xA;    .nodeLabel { padding: 14px 14px 10px; line-height: 1.2; }&#xA;    * { cursor: pointer; }&#xA;  `;&#xA;  const themeVariables = {&#xA;    background: css(&#39;--color-background&#39;, &#39;#ffffff&#39;),&#xA;    primaryColor: css(&#39;--color-code-bg&#39;, &#39;#0a0a0a&#39;),&#xA;    primaryTextColor: css(&#39;--color-text&#39;, &#39;#1f2937&#39;),&#xA;    primaryBorderColor: accent,&#xA;    lineColor: accent,&#xA;    textColor: css(&#39;--color-text&#39;, &#39;#1f2937&#39;),&#xA;    nodeBkg: css(&#39;--color-code-bg&#39;, &#39;#0a0a0a&#39;),&#xA;    nodeBorder: accent,&#xA;    nodeTextColor: css(&#39;--color-text&#39;, &#39;#1f2937&#39;),&#xA;    fontSize: &#39;16px&#39;,&#xA;    nodePadding: 20,&#xA;    nodeTextMargin: 14,&#xA;    clusterBkg: isDark ? css(&#39;--color-background&#39;, &#39;#0f0f0f&#39;) : css(&#39;--color-surface&#39;, &#39;#f9fafb&#39;),&#xA;    clusterBorder: accent,&#xA;    clusterTextColor: css(&#39;--color-text&#39;, &#39;#1f2937&#39;),&#xA;    titleColor: css(&#39;--color-text&#39;, &#39;#1f2937&#39;),&#xA;    edgeLabelBackground: css(&#39;--color-code-bg&#39;, &#39;#0a0a0a&#39;),&#xA;  };&#xA;&#xA;  const SVG_PAN_ZOOM_CDN = &#39;https://cdn.jsdelivr.net/npm/svg-pan-zoom@3.6.2/dist/svg-pan-zoom.min.js&#39;;&#xA;  let mermaidLightbox = null;&#xA;  let activePanZoom = null;&#xA;&#xA;  // Inject lightbox styles once&#xA;  const injectLightboxStyles = () =&gt; {&#xA;    if (document.getElementById(&#39;mermaid-lightbox-css&#39;)) return;&#xA;    const style = document.createElement(&#39;style&#39;);&#xA;    style.id = &#39;mermaid-lightbox-css&#39;;&#xA;    style.textContent = `&#xA;      /* Container fills the GLightbox slide */&#xA;      .mermaid-lightbox-wrap {&#xA;        width: 100%;&#xA;        height: 100%;&#xA;        display: flex;&#xA;        align-items: center;&#xA;        justify-content: center;&#xA;        background: transparent;&#xA;        position: relative;&#xA;      }&#xA;      .mermaid-lightbox-wrap svg {&#xA;        width: 100% !important;&#xA;        height: 100% !important;&#xA;        max-width: 100%;&#xA;        max-height: 100%;&#xA;      }&#xA;      /* Hide GLightbox prev/next arrows (single-slide lightbox) */&#xA;      .glightbox-container .gprev,&#xA;      .glightbox-container .gnext {&#xA;        display: none !important;&#xA;      }&#xA;      /* Hide description area that renders as a white box */&#xA;      .glightbox-container .gslide-description,&#xA;      .glightbox-container .gslide-title,&#xA;      .glightbox-container .gdesc-inner,&#xA;      .glightbox-container .gslide-desc {&#xA;        display: none !important;&#xA;      }&#xA;      /* Remove white background from inline slide content */&#xA;      .glightbox-container .gslide-inline {&#xA;        background: transparent !important;&#xA;      }&#xA;      /* Make the inline content area fill the slide */&#xA;      .glightbox-container .ginlined-content {&#xA;        max-width: none !important;&#xA;        max-height: none !important;&#xA;        width: 100%;&#xA;        height: 100%;&#xA;        padding: 0 !important;&#xA;      }&#xA;      /* Remove box-shadow from the media container */&#xA;      .glightbox-container .gslide-media {&#xA;        box-shadow: none !important;&#xA;      }&#xA;      /* Toolbar styling */&#xA;      .mermaid-lightbox-toolbar {&#xA;        position: absolute;&#xA;        top: 8px;&#xA;        right: 8px;&#xA;        z-index: 10;&#xA;        display: flex;&#xA;        gap: 4px;&#xA;      }&#xA;      .mermaid-pz-btn {&#xA;        background: rgba(0,0,0,0.6);&#xA;        color: #fff;&#xA;        border: 1px solid rgba(255,255,255,0.3);&#xA;        border-radius: 4px;&#xA;        padding: 4px 10px;&#xA;        cursor: pointer;&#xA;        font-size: 14px;&#xA;        line-height: 1;&#xA;      }&#xA;      .mermaid-pz-btn:hover {&#xA;        background: rgba(0,0,0,0.8);&#xA;        border-color: rgba(255,255,255,0.6);&#xA;      }&#xA;    `;&#xA;    document.head.appendChild(style);&#xA;  };&#xA;&#xA;  // Lazy-load svg-pan-zoom from CDN, returns a promise&#xA;  const loadSvgPanZoom = () =&gt; {&#xA;    if (typeof svgPanZoom !== &#39;undefined&#39;) return Promise.resolve();&#xA;    return new Promise((resolve, reject) =&gt; {&#xA;      const s = document.createElement(&#39;script&#39;);&#xA;      s.src = SVG_PAN_ZOOM_CDN;&#xA;      s.onload = resolve;&#xA;      s.onerror = reject;&#xA;      document.head.appendChild(s);&#xA;    });&#xA;  };&#xA;&#xA;  // Initialize svg-pan-zoom on the SVG inside the lightbox.&#xA;  // Retries until the lightbox container has settled dimensions.&#xA;  let _pzRetries = 0;&#xA;  const initPanZoom = () =&gt; {&#xA;    if (activePanZoom) return;&#xA;    const container = document.querySelector(&#39;.glightbox-container .gslide.current .mermaid-lightbox-wrap&#39;);&#xA;    if (!container) return;&#xA;    const svgEl = container.querySelector(&#39;svg&#39;);&#xA;    if (!svgEl) return;&#xA;&#xA;    // Ensure the container has layout dimensions before initializing.&#xA;    const cRect = container.getBoundingClientRect();&#xA;    if (cRect.width &lt; 10 || cRect.height &lt; 10) {&#xA;      if (_pzRetries &lt; 20) { _pzRetries++; setTimeout(initPanZoom, 50); }&#xA;      return;&#xA;    }&#xA;&#xA;    // svg-pan-zoom needs a viewBox. Pre-rendered SVGs from mermaid&#xA;    // usually have one; browser-rendered ones may not.&#xA;    if (!svgEl.getAttribute(&#39;viewBox&#39;)) {&#xA;      let w = parseFloat(svgEl.getAttribute(&#39;width&#39;));&#xA;      let h = parseFloat(svgEl.getAttribute(&#39;height&#39;));&#xA;      if (!w &amp;&amp; svgEl.style.maxWidth) w = parseFloat(svgEl.style.maxWidth);&#xA;      if (!w || !h) {&#xA;        const r = svgEl.getBoundingClientRect();&#xA;        if (!w) w = r.width;&#xA;        if (!h) h = r.height;&#xA;      }&#xA;      if (w &gt; 0 &amp;&amp; h &gt; 0) {&#xA;        svgEl.setAttribute(&#39;viewBox&#39;, &#39;0 0 &#39; + w + &#39; &#39; + h);&#xA;      } else if (_pzRetries &lt; 20) {&#xA;        _pzRetries++; setTimeout(initPanZoom, 50); return;&#xA;      }&#xA;    }&#xA;    _pzRetries = 0;&#xA;&#xA;    // Clear inline dimensions so SVG can be sized by the container&#xA;    // and svg-pan-zoom can manage transforms.&#xA;    svgEl.removeAttribute(&#39;width&#39;);&#xA;    svgEl.removeAttribute(&#39;height&#39;);&#xA;    svgEl.style.cssText = &#39;width:100%;height:100%;&#39;;&#xA;&#xA;    try {&#xA;      activePanZoom = svgPanZoom(svgEl, {&#xA;        zoomEnabled: true,&#xA;        panEnabled: true,&#xA;        controlIconsEnabled: false,&#xA;        fit: true,&#xA;        center: true,&#xA;        contain: false,&#xA;        minZoom: 0.3,&#xA;        maxZoom: 10,&#xA;        zoomScaleSensitivity: 0.3,&#xA;        mouseWheelZoomEnabled: true,&#xA;        preventMouseEventsDefault: true,&#xA;      });&#xA;      // Double-check fit after a frame in case dimensions shifted&#xA;      requestAnimationFrame(() =&gt; {&#xA;        if (!activePanZoom) return;&#xA;        activePanZoom.resize();&#xA;        activePanZoom.fit();&#xA;        activePanZoom.center();&#xA;      });&#xA;    } catch (_) {&#xA;      activePanZoom = null;&#xA;    }&#xA;&#xA;    // Add reset/fit buttons&#xA;    let toolbar = container.querySelector(&#39;.mermaid-lightbox-toolbar&#39;);&#xA;    if (!toolbar) {&#xA;      toolbar = document.createElement(&#39;div&#39;);&#xA;      toolbar.className = &#39;mermaid-lightbox-toolbar&#39;;&#xA;      toolbar.innerHTML =&#xA;        &#39;&lt;button class=&#34;mermaid-pz-btn&#34; data-action=&#34;fit&#34; title=&#34;Fit to view&#34;&gt;Fit&lt;/button&gt;&#39; +&#xA;        &#39;&lt;button class=&#34;mermaid-pz-btn&#34; data-action=&#34;zoomin&#34; title=&#34;Zoom in&#34;&gt;+&lt;/button&gt;&#39; +&#xA;        &#39;&lt;button class=&#34;mermaid-pz-btn&#34; data-action=&#34;zoomout&#34; title=&#34;Zoom out&#34;&gt;&amp;minus;&lt;/button&gt;&#39;;&#xA;      toolbar.addEventListener(&#39;click&#39;, (ev) =&gt; {&#xA;        const btn = ev.target.closest(&#39;[data-action]&#39;);&#xA;        if (!btn || !activePanZoom) return;&#xA;        ev.preventDefault();&#xA;        ev.stopPropagation();&#xA;        const action = btn.dataset.action;&#xA;        if (action === &#39;fit&#39;) { activePanZoom.resize(); activePanZoom.fit(); activePanZoom.center(); }&#xA;        else if (action === &#39;zoomin&#39;) { activePanZoom.zoomIn(); }&#xA;        else if (action === &#39;zoomout&#39;) { activePanZoom.zoomOut(); }&#xA;      });&#xA;      container.prepend(toolbar);&#xA;    }&#xA;  };&#xA;&#xA;  // Destroy pan-zoom on lightbox close&#xA;  const destroyPanZoom = () =&gt; {&#xA;    if (activePanZoom) {&#xA;      try { activePanZoom.destroy(); } catch (_) { /* no-op */ }&#xA;      activePanZoom = null;&#xA;    }&#xA;  };&#xA;&#xA;  let _lbRetries = 0;&#xA;  const ensureMermaidLightbox = () =&gt; {&#xA;    const diagrams = document.querySelectorAll(&#39;.mermaid svg&#39;);&#xA;    if (!diagrams.length) {&#xA;      // Mermaid ESM may still be rendering -- retry up to 2s&#xA;      if (_lbRetries &lt; 20) { _lbRetries++; setTimeout(ensureMermaidLightbox, 100); }&#xA;      return;&#xA;    }&#xA;    _lbRetries = 0;&#xA;    injectLightboxStyles();&#xA;    diagrams.forEach((svg) =&gt; {&#xA;      if (svg.dataset.lightboxBound) return;&#xA;      svg.dataset.lightboxBound = &#39;true&#39;;&#xA;      svg.style.cursor = &#39;pointer&#39;;&#xA;      svg.addEventListener(&#39;click&#39;, (e) =&gt; {&#xA;        e.preventDefault();&#xA;        e.stopPropagation();&#xA;        const svgHtml = svg.outerHTML;&#xA;        const openLightbox = () =&gt; {&#xA;          if (!mermaidLightbox) {&#xA;            mermaidLightbox = GLightbox({&#xA;              selector: false,&#xA;              openEffect: &#39;fade&#39;,&#xA;              closeEffect: &#39;fade&#39;,&#xA;              zoomable: false,&#xA;              draggable: false,&#xA;              skin: &#39;clean&#39;,&#xA;            });&#xA;            mermaidLightbox.on(&#39;slide_after_load&#39;, () =&gt; {&#xA;              destroyPanZoom();&#xA;              _pzRetries = 0;&#xA;              loadSvgPanZoom().then(() =&gt; initPanZoom());&#xA;            });&#xA;            mermaidLightbox.on(&#39;close&#39;, destroyPanZoom);&#xA;          }&#xA;          mermaidLightbox.setElements([{&#xA;            content: &#39;&lt;div class=&#34;mermaid-lightbox-wrap&#34;&gt;&#39; + svgHtml + &#39;&lt;/div&gt;&#39;,&#xA;            width: &#39;90vw&#39;,&#xA;            height: &#39;90vh&#39;&#xA;          }]);&#xA;          mermaidLightbox.open();&#xA;          loadSvgPanZoom();&#xA;        };&#xA;        if (typeof GLightbox !== &#39;undefined&#39;) {&#xA;          openLightbox();&#xA;        } else if (window.initGLightbox) {&#xA;          window.initGLightbox();&#xA;          openLightbox();&#xA;        } else {&#xA;          window.addEventListener(&#39;glightbox-ready&#39;, () =&gt; { openLightbox(); }, { once: true });&#xA;        }&#xA;      });&#xA;    });&#xA;  };&#xA;&#xA;  mermaid.initialize({ startOnLoad: false, theme: &#39;base&#39;, themeVariables, flowchart, themeCSS });&#xA;  window.initMermaid = async () =&gt; {&#xA;    try {&#xA;      await mermaid.run();&#xA;    } catch (e) {&#xA;      console.error(&#39;mermaid.run failed:&#39;, e);&#xA;    }&#xA;    ensureMermaidLightbox();&#xA;  };&#xA;  if (document.readyState === &#39;loading&#39;) {&#xA;    document.addEventListener(&#39;DOMContentLoaded&#39;, () =&gt; window.initMermaid());&#xA;  } else {&#xA;    window.initMermaid();&#xA;  }&#xA;&lt;/script&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>perfect</title>
    <id>https://waylonwalker.com/perfect/</id>
    <updated>2025-06-26T13:55:17Z</updated>
    <published>2025-06-26T13:55:17Z</published>
    <link href="https://waylonwalker.com/perfect/" rel="alternate" type="text/html"></link>
    <summary type="text">Perfect is a made up word that humans use to describe something that is above average, or works really well for them. The idea of perfection is fleeting, as...</summary>
    <content type="html">&lt;p&gt;Perfect is a made up word that humans use to describe something that is above&#xA;average, or works really well for them.  The idea of perfection is fleeting, as&#xA;you think more deeply about something, you can continue to chase the idea of&#xA;perfection to unimaginable senses.  Sometimes &lt;em&gt;perfect&lt;/em&gt; simply means &lt;em&gt;good&#xA;enough&lt;/em&gt;.  Could there be something better, &lt;strong&gt;Always&lt;/strong&gt;, but at what cost.  If I&#xA;spent 10 more minutes on this post would it be better, maybe, but I might fuck&#xA;it up.  If I spent my lifetime studying how humans read and think, sole&#xA;focused on how it pertains to this post, ya it would get better.  When I use&#xA;this word perfect it’s not meant in the most literal sense of the word, but&#xA;perfect to me, maybe good enough given the constraints I have, its the best&#xA;thing I’ve got.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ sst opencode</title>
    <id>https://waylonwalker.com/sst-opencode/</id>
    <updated>2025-06-24T14:38:03Z</updated>
    <published>2025-06-24T14:38:03Z</published>
    <link href="https://waylonwalker.com/sst-opencode/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? opencode by sst.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/sst/opencode&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;opencode&lt;/a&gt; by &lt;a href=&#34;https://github.com/sst&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sst&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;AI coding agent, built for the terminal.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ anomalyco opencode</title>
    <id>https://waylonwalker.com/anomalyco-opencode/</id>
    <updated>2025-06-24T14:38:03Z</updated>
    <published>2025-06-24T14:38:03Z</published>
    <link href="https://waylonwalker.com/anomalyco-opencode/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by opencode from anomalyco.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/anomalyco/opencode&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;opencode&lt;/a&gt; from &lt;a href=&#34;https://github.com/anomalyco&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;anomalyco&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The open source coding agent.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>just</title>
    <id>https://waylonwalker.com/just/</id>
    <updated>2025-06-23T19:02:29Z</updated>
    <published>2025-06-23T19:02:29Z</published>
    <link href="https://waylonwalker.com/just/" rel="alternate" type="text/html"></link>
    <summary type="text">I just never quite understood why the word can send people over the top. I get it when you don&#39;t know someone, you don&#39;t have history with them, and they...</summary>
    <content type="html">&lt;p&gt;I just never quite understood why the word &lt;code&gt;just&lt;/code&gt; can send people over the top. I&#xA;get it when you don’t know someone, you don’t have history with them, and they&#xA;come in saying you are doing something wrong.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;When you say “just,” you’re skipping over all the invisible complexity. You’re assuming the problem is simple, and that the person asking for help hasn’t already considered the obvious.&lt;/p&gt;&#xA;&lt;p&gt;You’re not seeing the constraints:&lt;/p&gt;&#xA;&lt;p&gt;Legacy code&#xA;Business requirements&#xA;Team conventions&#xA;Time, budget, or technical debt&#xA;Platform limitations&lt;/p&gt;&#xA;&lt;p&gt;~&lt;a href=&#34;https://www.neverjust.net/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.neverjust.net.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.neverjust.net.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://www.neverjust.net/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;If I’ve worked with someone for more than 6 months, we have established&#xA;patterns for problems, libraries we use, and they are deep in the weeds of&#xA;trying to fix something, I want to ask  “Why don’t you just do the same thing&#xA;we do everywhere else?”&lt;/p&gt;&#xA;&lt;p&gt;I don’t need a snarky ass response, I don’t need you to get bent out of shape&#xA;about it. I &lt;strong&gt;am&lt;/strong&gt; communicating that I do not know the damn constraints to&#xA;this problem.  I am communicating I am ignorant to the pain you have suffered&#xA;trying to do something for days that I thought should be copy paste pr up in 10&#xA;minutes.&lt;/p&gt;&#xA;&lt;p&gt;What I want to hear is “Well here’s the story of why this particular one is&#xA;complex, and let me take you on my travels.” or “I’m about there and don’t have&#xA;time right now just understand that this is different, we can discuss later.”&lt;/p&gt;&#xA;&lt;p&gt;My &lt;em&gt;just&lt;/em&gt; should not cause you pain, it should &lt;strong&gt;not&lt;/strong&gt; cause you to feel belittled,&#xA;If we have worked together for any amount of time and have respect for each&#xA;other, you should understand that this is not coming from a place of&#xA;belittlement, rather its an open door for you to explain why this thing is not&#xA;what it seems at surface level.&lt;/p&gt;&#xA;&lt;h2 id=&#34;just-use-another-library&#34;&gt;Just use another library &lt;a href=&#34;#just-use-another-library&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/4404a111-40be-4066-9ba0-08720133f011.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/4404a111-40be-4066-9ba0-08720133f011.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;~&lt;a href=&#34;https://www.neverjust.net/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.neverjust.net.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.neverjust.net.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://www.neverjust.net/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Here Sam asks “Why don’t you just use another library?”, and Alex replies “If&#xA;it were that easy, I would have done it already.”&lt;/p&gt;&#xA;&lt;p&gt;Honestly this example is a little vague and non-specific.  On boarding a new&#xA;library to a team can be a big ask.  It becomes something that the team has to&#xA;integrate and depend on, and take on supply chain risk.  This example would be&#xA;better with something more specific, if the team often uses a mix of SQL,&#xA;pandas, and occasionally pulls out polars for bigger tasks, Sam  might&#xA;legitimately ask “why don’t you just use &amp;lt;insert pandas, polars, SQL&amp;gt;”.&lt;/p&gt;&#xA;&lt;p&gt;This communicates that Sam see’s the obvious we use polars when things get&#xA;tough, or we use SQL when data transfer gets too slow.&lt;/p&gt;&#xA;&lt;h2 id=&#34;you-are-not-dumb&#34;&gt;You are not Dumb &lt;a href=&#34;#you-are-not-dumb&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I want to hear the story. In no way am I calling you dumb, in fact I’m probably&#xA;claiming ignorance to the problem at hand.  I see that you have a lot more time&#xA;invested than me and I’m offering help, not asking for snarky ass remarks back&#xA;&lt;strong&gt;Alex&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In fact take it as a sign that I am this comfortable with you and that you are&#xA;so far from dumb that I don’t have to risk being taken out of context.&lt;/p&gt;&#xA;&lt;h2 id=&#34;or-maybe-you-are&#34;&gt;Or maybe you are &lt;a href=&#34;#or-maybe-you-are&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Or maybe Sam is trying to belittle Alex here, if that’s the case we need to&#xA;have a conversation and work some shit out or find somewhere else to be, Alex&#xA;should not be belittled like this because Sam is full of himself.&lt;/p&gt;&#xA;&lt;h2 id=&#34;suggestions&#34;&gt;Suggestions &lt;a href=&#34;#suggestions&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/b84360f0-a6bf-4c63-84d2-1710c6b06eca.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/b84360f0-a6bf-4c63-84d2-1710c6b06eca.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;~&lt;a href=&#34;https://www.neverjust.net/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.neverjust.net.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.neverjust.net.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://www.neverjust.net/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The suggestions are &lt;em&gt;fine&lt;/em&gt;, but they feel like they are asking me to hunt&#xA;around for the problem rather than you recognizing my ignorance to the issue,&#xA;and let Sam tell me “Why don’t you just use another library?”&lt;/p&gt;&#xA;&lt;h2 id=&#34;final-thoughts&#34;&gt;Final Thoughts &lt;a href=&#34;#final-thoughts&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;In recognizing how much pain this causes others I do try to limit my use of&#xA;just, it comes out from time to time, though I try not to.  I try to remain&#xA;kind, humble, and helpful.  And typically in the first few weeks or months&#xA;interaction with new teams/people I kinda walk on eggshells for a bit.  I don’t&#xA;know you or where you are, if I make it sound like you are dumb and turns out&#xA;that’s what people think of you I’m gonna feel kinda bad.  Just understand that&#xA;not everyone is trying to attack you, communication via text is hard, give&#xA;folks a break before jumping them.&lt;/p&gt;&#xA;&lt;h2 id=&#34;dont-be-an-ass&#34;&gt;Don’t be an Ass &lt;a href=&#34;#dont-be-an-ass&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This post is not trying to say that you can freely belittle your team, go forth&#xA;and be the irritating guy on the team that comes off like a know it all.  I’m&#xA;saying when you are on the receiving end try not to take it with such offense&#xA;and as an opportunity to explain without the need to dance around the issue.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>copier vcs quirks</title>
    <id>https://waylonwalker.com/copier-vcs-quirks/</id>
    <updated>2025-06-19T08:04:51Z</updated>
    <published>2025-06-19T08:04:51Z</published>
    <link href="https://waylonwalker.com/copier-vcs-quirks/" rel="alternate" type="text/html"></link>
    <summary type="text">Copier has a few quirks with vcs that I just discovered by trying to test out some changes. I may have some config that I have long forgotten about somewhere...</summary>
    <content type="html">&lt;p&gt;Copier has a few quirks with vcs that I just discovered by trying to test out&#xA;some changes.  I may have some config that I have long forgotten about&#xA;somewhere deep in my dotfiles, I don’t think so, but id love to be wrong and&#xA;corrected, please reach out.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-doesnt-work&#34;&gt;What Doesn’t Work &lt;a href=&#34;#what-doesnt-work&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I tried throwing everything at this template to make it work.  I tried a bunch&#xA;of flags that did not work. I tried making commits to the local repo to get rid&#xA;of the dirty warning. I really wanted to test new changes locally without&#xA;committing and pushing untested and potentially broken changes.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uvx copier copy ../markata-blog-starter .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uvx copier copy gh:waylonwalker/markata-blog-starter@develop .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uvx copier copy ../markata-blog-starter . -wlg --trust&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;what-works-----vcs-ref&#34;&gt;What Works - –vcs-ref &lt;a href=&#34;#what-works-----vcs-ref&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Finally after trying everything to get the local copy to work, and my guess of&#xA;@branch not working I found this to work.  It does require me to go to the repo&#xA;on my develop branch.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uvx copier copy gh:waylonwalker/markata-blog-starter --vcs-ref develop .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;what-works---delete-&lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt;&#34;&gt;What Works - delete .git &lt;a href=&#34;#what-works---delete-git&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Really this might be my best option to make quick changes and test them locally&#xA;without going through a version control system.  It is not ideal, but makes it&#xA;easy to quickly iterate on.  I might be renaming .git, or copying to /tmp for&#xA;quick iteration.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -rf .git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uvx copier copy ../markata-blog-starter .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;copier-i-love&#34;&gt;Copier I love &lt;a href=&#34;#copier-i-love&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Copier is a great templating tool.  I really love it.  I use it every single&#xA;day to create posts on this blog using &lt;a href=&#34;/tmux-copier-templates/&#34; class=&#34;wikilink&#34; data-title=&#34;Tmux hotkey for copier templates&#34; data-description=&#34;I have added a hotkey to my copier template setup to quickly access all my templates at any time from tmux. At any point I can hit , thats holding control...&#34; data-date=&#34;2022-01-24&#34; data-preview=&#34;I have added a hotkey to my copier template setup to quickly access all my templates at any time from tmux. At any point I can hit , thats holding control...&#34;&gt;Tmux hotkey for copier templates&lt;/a&gt;.  This is&#xA;the first time this quirk has got me and it had me puzzled for 45 minutes as I&#xA;did not expect this behavior whatsoever.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ canonical checkbox</title>
    <id>https://waylonwalker.com/canonical-checkbox/</id>
    <updated>2025-06-18T02:07:34Z</updated>
    <published>2025-06-18T02:07:34Z</published>
    <link href="https://waylonwalker.com/canonical-checkbox/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across checkbox from canonical, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/canonical/checkbox&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;checkbox&lt;/a&gt; from &lt;a href=&#34;https://github.com/canonical&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;canonical&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;Checkbox is a testing framework used to validate device compatibility with Ubuntu Linux. It’s the testing tool developed for the purposes of the Ubuntu Certification program.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>using yek to serialize text files into llm friendly file</title>
    <id>https://waylonwalker.com/using-yek/</id>
    <updated>2025-06-11T11:01:34Z</updated>
    <published>2025-06-11T11:01:34Z</published>
    <link href="https://waylonwalker.com/using-yek/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been using gitingest web ui thoughts-516 for quite awhile to serialize git repo into llm friendly text files. This gives tools context about repos that...</summary>
    <content type="html">&lt;p&gt;I’ve been using &lt;a href=&#34;https://gitingest.com/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/gitingest.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/gitingest.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gitingest&lt;/a&gt; web ui [[ thoughts-516 ]]&#xA;for quite awhile to serialize &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; repo into llm friendly text files.  This&#xA;gives tools context about repos that are not in the training data so that it&#xA;knows about it and how to use the code in the repo.  gitingest also has a&#xA;python library [[ thoughts-517 ]]&lt;/p&gt;&#xA;&lt;p&gt;I had a use case for a project not yet on git, and found yek.&lt;/p&gt;&#xA;&lt;h2 id=&#34;installing-yek&#34;&gt;Installing yek &lt;a href=&#34;#installing-yek&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Their instructions tell you to curl to bash.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -fsSL https://bodo.run/yek.sh &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I don’t like curl to bash from random sites, so I have my own &lt;a href=&#34;/self-host/&#34; class=&#34;glossary-term&#34; title=&#34;Self hosting is the act of hosting your own applications and services without using a SAS provider. This is typically done with your own hardware, but there...&#34;&gt;self hosted&lt;/a&gt;&#xA;version of i.jpillora.com.  I like using this because it pulls from github and&#xA;I trust github as a source for artifacts as good as the repo I am pulling&#xA;from.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl https://i.jpillora.com/bodo-run/yek &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;using-yek&#34;&gt;Using yek &lt;a href=&#34;#using-yek&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yek&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;/tmp/yek-output/yek-output-bb01e621.txt&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This will give you a link to a text file that you can add to many llm tools.&#xA;This happened so fast for me that I didn’t even believe that it worked&#xA;properly.&lt;/p&gt;&#xA;&lt;h2 id=&#34;more-options&#34;&gt;more options &lt;a href=&#34;#more-options&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As with most clis, you can run &lt;code&gt;yek --help&lt;/code&gt; to see the options available.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yek --help&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>brightnessctl adjust screen brightness</title>
    <id>https://waylonwalker.com/brightnessctl-adjust-screen-brightness/</id>
    <updated>2025-06-11T08:42:36Z</updated>
    <published>2025-06-11T08:42:36Z</published>
    <link href="https://waylonwalker.com/brightnessctl-adjust-screen-brightness/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I discovered to adjust the screen brightness on my AwesomeWM machine. Its a command line utility that you can use to adjust the brightness of your...</summary>
    <content type="html">&lt;p&gt;Today I discovered &lt;code&gt;brightnessctl&lt;/code&gt; to adjust the screen brightness on my&#xA;AwesomeWM machine.  Its a command line utility that you can use to adjust the&#xA;brightness of your screen.  A command line interface like this gives you the&#xA;ability to bind keys with something like [[xbindkeys]] or your window manager&#xA;configuration.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install brightnessctl&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# or &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;paru -S brightnessctl&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now that you have it installed you can use it to adjust the brightness of your&#xA;screen, this worked particularly well for my laptop screen, I don’t think this&#xA;works for monitors, in my experience they are usually controlled by the built&#xA;in osd.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Increase brightness by 10%&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brightnessctl &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; +10%&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Decrease brightness by 10%&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brightnessctl &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; 10%-&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Set brightness to 50%&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brightnessctl &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; 50%&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Set brightness to 100%&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brightnessctl &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; 100%&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;on my machine I had to use `sudo` to run the command, otherwise I got the following error:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Can&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;t modify brightness: Permission denied&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;You should run this program with root privileges.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Alternatively, get write permissions &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; device files.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ trykimu videoeditor</title>
    <id>https://waylonwalker.com/trykimu-videoeditor/</id>
    <updated>2025-06-10T02:27:48Z</updated>
    <published>2025-06-10T02:27:48Z</published>
    <link href="https://waylonwalker.com/trykimu-videoeditor/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by videoeditor from trykimu.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/trykimu/videoeditor&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;videoeditor&lt;/a&gt; from &lt;a href=&#34;https://github.com/trykimu&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;trykimu&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Your Creative Copilot for Video Editing&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ robinroy03 videoeditor</title>
    <id>https://waylonwalker.com/robinroy03-videoeditor/</id>
    <updated>2025-06-10T02:27:48Z</updated>
    <published>2025-06-10T02:27:48Z</published>
    <link href="https://waylonwalker.com/robinroy03-videoeditor/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on videoeditor, created by robinroy03.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/robinroy03/videoeditor&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;videoeditor&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/robinroy03&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;robinroy03&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Video Editor Application using React, Remotion &amp;amp; TypeScript.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ niri-wm niri</title>
    <id>https://waylonwalker.com/niri-wm-niri/</id>
    <updated>2025-06-07T01:03:02Z</updated>
    <published>2025-06-07T01:03:02Z</published>
    <link href="https://waylonwalker.com/niri-wm-niri/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered niri by niri-wm, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/niri-wm/niri&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;niri&lt;/a&gt; by &lt;a href=&#34;https://github.com/niri-wm&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;niri-wm&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;A scrollable-tiling Wayland compositor.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ YaLTeR niri</title>
    <id>https://waylonwalker.com/yalter-niri/</id>
    <updated>2025-06-07T01:03:02Z</updated>
    <published>2025-06-07T01:03:02Z</published>
    <link href="https://waylonwalker.com/yalter-niri/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by niri from YaLTeR.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/YaLTeR/niri&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;niri&lt;/a&gt; from &lt;a href=&#34;https://github.com/YaLTeR&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;YaLTeR&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A scrollable-tiling Wayland compositor.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ zk-org zk</title>
    <id>https://waylonwalker.com/zk-org-zk/</id>
    <updated>2025-06-06T01:22:44Z</updated>
    <published>2025-06-06T01:22:44Z</published>
    <link href="https://waylonwalker.com/zk-org-zk/" rel="alternate" type="text/html"></link>
    <summary type="text">zk by zk-org is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/zk-org/zk&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;zk&lt;/a&gt; by &lt;a href=&#34;https://github.com/zk-org&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;zk-org&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;A plain text note-taking assistant&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ get-alex alex</title>
    <id>https://waylonwalker.com/get-alex-alex/</id>
    <updated>2025-06-06T01:18:53Z</updated>
    <published>2025-06-06T01:18:53Z</published>
    <link href="https://waylonwalker.com/get-alex-alex/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on alex, created by get-alex.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/get-alex/alex&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;alex&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/get-alex&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;get-alex&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Catch insensitive, inconsiderate writing&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ lukas-reineke cbfmt</title>
    <id>https://waylonwalker.com/lukas-reineke-cbfmt/</id>
    <updated>2025-06-06T01:18:47Z</updated>
    <published>2025-06-06T01:18:47Z</published>
    <link href="https://waylonwalker.com/lukas-reineke-cbfmt/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on cbfmt by lukas-reineke.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/lukas-reineke/cbfmt&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cbfmt&lt;/a&gt; by &lt;a href=&#34;https://github.com/lukas-reineke&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lukas-reineke&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A tool to format codeblocks inside markdown and org documents.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Feel-ix-343 markdown-oxide</title>
    <id>https://waylonwalker.com/feel-ix-343-markdown-oxide/</id>
    <updated>2025-06-06T01:18:37Z</updated>
    <published>2025-06-06T01:18:37Z</published>
    <link href="https://waylonwalker.com/feel-ix-343-markdown-oxide/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out Feel-ix-343 and their project markdown-oxide.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/Feel-ix-343&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Feel-ix-343&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/Feel-ix-343/markdown-oxide&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;markdown-oxide&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;PKM Markdown Language Server&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ hougesen mdsf</title>
    <id>https://waylonwalker.com/hougesen-mdsf/</id>
    <updated>2025-06-06T01:18:28Z</updated>
    <published>2025-06-06T01:18:28Z</published>
    <link href="https://waylonwalker.com/hougesen-mdsf/" rel="alternate" type="text/html"></link>
    <summary type="text">I like hougesen&#39;s project mdsf.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/hougesen&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;hougesen’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/hougesen/mdsf&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mdsf&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Format markdown code blocks using your favorite tools&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ numtide treefmt</title>
    <id>https://waylonwalker.com/numtide-treefmt/</id>
    <updated>2025-06-06T01:18:23Z</updated>
    <published>2025-06-06T01:18:23Z</published>
    <link href="https://waylonwalker.com/numtide-treefmt/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on treefmt by numtide.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/numtide/treefmt&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;treefmt&lt;/a&gt; by &lt;a href=&#34;https://github.com/numtide&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;numtide&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;one CLI to format your repo [maintainers=@zimbatm,@brianmcgee]&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>rich theme</title>
    <id>https://waylonwalker.com/rich-theme/</id>
    <updated>2025-06-05T20:37:10Z</updated>
    <published>2025-06-05T20:37:10Z</published>
    <link href="https://waylonwalker.com/rich-theme/" rel="alternate" type="text/html"></link>
    <summary type="text">The rich console is themeable, I&#39;ve been a long time user of rich and had no Idea. You can define your own theme keywords and use them just like you use...</summary>
    <content type="html">&lt;p&gt;The rich console is themeable, I’ve been a long time user of rich and had no&#xA;Idea.  You can define your own theme keywords and use them just like you use&#xA;normal rich keywords in square brackets like&lt;code&gt;&amp;#39;[bold red]&amp;#39;&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;rich.console&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Console&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;rich.theme&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Theme&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;custom_theme&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Theme&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;info&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;dim cyan&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;warning&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;magenta&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;danger&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;bold red&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;console&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;theme&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;custom_theme&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;This is information&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;info&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;[warning]The pod bay doors are locked[/warning]&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Something terrible happened!&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;danger&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>unset multiple environment variables</title>
    <id>https://waylonwalker.com/unset-multiple-environment-variables/</id>
    <updated>2025-06-03T11:21:11Z</updated>
    <published>2025-06-03T11:21:11Z</published>
    <link href="https://waylonwalker.com/unset-multiple-environment-variables/" rel="alternate" type="text/html"></link>
    <summary type="text">You can unset multiple environment variables at once. I did not know this was a thing, its something that ended up happening organically on a call and asking...</summary>
    <content type="html">&lt;p&gt;You can unset multiple environment variables at once. I did not know this was a&#xA;thing, its something that ended up happening organically on a call and asking&#xA;someone to run &lt;code&gt;unset&lt;/code&gt;.  They had never done it before and did not know how it&#xA;works, but did exactly as I said instead of what I meant.  I like this handy&#xA;shortcut doing it in one line rather than each one individually, I will be&#xA;using this in the future. You might need this for something like&#xA;&lt;a href=&#34;/running-aws-cli-commands-with-localstack/&#34; class=&#34;wikilink&#34; data-title=&#34;running aws cli commands with localstack&#34; data-description=&#34;Upon first running an cli command using localstack you might end up with the following error.&#34; data-date=&#34;2022-10-17&#34; data-preview=&#34;Upon first running an cli command using localstack you might end up with the following error.&#34;&gt;running aws cli commands with localstack&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;unset&lt;/span&gt; AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_DEFAULT_REGION&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>i3lock on AwesomeWM</title>
    <id>https://waylonwalker.com/i3lock-on-awesomewm/</id>
    <updated>2025-06-02T14:40:56Z</updated>
    <published>2025-06-02T14:40:56Z</published>
    <link href="https://waylonwalker.com/i3lock-on-awesomewm/" rel="alternate" type="text/html"></link>
    <summary type="text">is a fantastic lockscreen for tiling window managers.</summary>
    <content type="html">&lt;p&gt;&lt;code&gt;i3lock&lt;/code&gt; is a fantastic lockscreen for tiling window managers.&lt;/p&gt;&#xA;&lt;p&gt;If you are using a tiling window manager within a public space you need to add&#xA;a lockscreen.  I have one machine that I take with me to a public space.  Its&#xA;secure enough that I can leave it, but not secure enough that I want to leave&#xA;it unlocked.  So when I need to leave it behind for the restroom I need to lock&#xA;it up.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://man.archlinux.org/man/extra/i3lock/i3lock.1.en&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/man.archlinux.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/man.archlinux.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;arch wiki&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;paru -S i3lock&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# or&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install i3lock&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now that you have &lt;code&gt;i3lock&lt;/code&gt; installed lets lock that screen.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# lock it with a pure white flashbang&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i3lock&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# lock it with a black background&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i3lock -c &lt;span class=&#34;m&#34;&gt;000000&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# lock it with a custom color&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i3lock -c 2e1330&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# lock it with a wallpaper&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i3lock -c &lt;span class=&#34;m&#34;&gt;000000&lt;/span&gt; ~/Pictures/Wallpapers/mywallpaper.png&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can use your window manager or something more generic like xbindkeys to set&#xA;a hotkey. This way you don’t have to open a terminal and type out the command&#xA;every time you leave your desk.  You can just press something like &lt;code&gt;SUPER+L&lt;/code&gt;&#xA;like you would on other OS’s.&lt;/p&gt;&#xA;&lt;h2 id=&#34;fancy&#34;&gt;Fancy &lt;a href=&#34;#fancy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you like it a bit fancier, you can use &lt;code&gt;i3lock-fancy&lt;/code&gt;, it can blur,&#xA;pixelate, and greyscale your current screen.  I did not really like this&#xA;because you can still tell what is going on the screen.  It’s probably secure&#xA;enough and looks better, but I went with regular &lt;code&gt;i3lock&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;paru -S i3lock-fancy-git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# or&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install i3lock-fancy&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>kraft</title>
    <id>https://waylonwalker.com/kraft/</id>
    <updated>2025-06-01T20:32:39Z</updated>
    <published>2025-06-01T20:32:39Z</published>
    <link href="https://waylonwalker.com/kraft/" rel="alternate" type="text/html"></link>
    <summary type="text">Kraft is the family gaming server that we started early 2025.</summary>
    <content type="html">&lt;p&gt;Kraft is the family gaming server that we started early 2025.&lt;/p&gt;&#xA;&lt;h2 id=&#34;repopulating&#34;&gt;Repopulating &lt;a href=&#34;#repopulating&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Villagers are really hard to get gong.  We have this huge villager tower on the&#xA;server, we nearly every bed filled, and one day we logged in and there were&#xA;three.  Not sure what happened until I witnessed one of them jump maybe 3&#xA;blocks down and off himself.  I checked my last two villagers and they were&#xA;each on one or two hearts left.  We almost lost every single villager on the&#xA;server.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/5c160226-1018-4b07-b3a2-a50588006c17.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/5c160226-1018-4b07-b3a2-a50588006c17.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/5c160226-1018-4b07-b3a2-a50588006c17.mp4&#34; type=&#34;video/mp4&#34;&gt;villager-tower-needs-repopulated.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;To get villagers to breed and make baby villagers you need beds, which we&#xA;already have, and food.  I gave my guys some food and they started making baby&#xA;villagers immediately, crisis averted as we start to get the first few fresh&#xA;full health villagers on the server.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/9f618595-f998-4ba7-a925-92c282607a1b.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/9f618595-f998-4ba7-a925-92c282607a1b.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/9f618595-f998-4ba7-a925-92c282607a1b.mp4&#34; type=&#34;video/mp4&#34;&gt;repopulatingv4.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>my nvim spellcheck setup</title>
    <id>https://waylonwalker.com/my-nvim-spellcheck-setup/</id>
    <updated>2025-05-31T20:11:59Z</updated>
    <published>2025-05-31T20:11:59Z</published>
    <link href="https://waylonwalker.com/my-nvim-spellcheck-setup/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve gone too long without a proper spellcheck setup in nvim. I know it&#39;s there, I just don&#39;t use it, I don&#39;t have the right keybinds, like I do with...</summary>
    <content type="html">&lt;p&gt;I’ve gone too long without a proper spellcheck setup in nvim.  I know it’s&#xA;there, I just don’t use it, I don’t have the right keybinds, like I do with&#xA;&lt;a href=&#34;/vim-date/&#34; class=&#34;wikilink&#34; data-title=&#34;vim date&#34; data-description=&#34;When I want to put a date in a document like a blog post from vim I use !!date from insert mode. Note that entering from normal mode puts you in command mode...&#34; data-date=&#34;2025-02-12&#34; data-preview=&#34;When I want to put a date in a document like a blog post from vim I use !!date from insert mode. Note that entering from normal mode puts you in command mode...&#34;&gt;vim date&lt;/a&gt;, to make it work, and its clunky.&lt;/p&gt;&#xA;&lt;h2 id=&#34;default-keybinds&#34;&gt;Default keybinds &lt;a href=&#34;#default-keybinds&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;z= show spell suggestions&lt;/li&gt;&#xA;&lt;li&gt;zg add word to dictionary&lt;/li&gt;&#xA;&lt;li&gt;zw remove word from dictionary&lt;/li&gt;&#xA;&lt;li&gt;]s jump to next misspelled word&lt;/li&gt;&#xA;&lt;li&gt;[s jump to previous misspelled word&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I really struggle with bracketed keybinds, they don’t flow for me.  I have to&#xA;shift into it and hit two keys, you cant just pop through them with intent, it&#xA;always feels clunky to me.&lt;/p&gt;&#xA;&lt;h2 id=&#34;custom-keybinds&#34;&gt;Custom keybinds &lt;a href=&#34;#custom-keybinds&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I barely use F-keys in my keymap so that was free game.  On my keyboard I have&#xA;F1-F9 in a numpad layout on my right hand, so F4-F6 are home row, these are&#xA;super easy to pop through and update.  I really refrain from using such high&#xA;real estate keys like this unless it’s for something good, and I do a lot of&#xA;writing in nvim, so fingers crossed I use the heck out of it.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;f4&gt; jump to next misspelled word&lt;/f4&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;f5&gt; jump to previous misspelled word&lt;/f5&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;f6&gt; show spell suggestions&lt;/f6&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I still use zg and zw, they seem fine to me.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-setup&#34;&gt;The Setup &lt;a href=&#34;#the-setup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;In my keymap.lua file I added these to the end, they are working so far and&#xA;hopefully I use spellcheck more on my posts now that I’ve made it easy.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;f4&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;]s&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;f5&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;[s&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;f6&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;cmd&amp;gt;Telescope spell_suggest&amp;lt;cr&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;one-failure&#34;&gt;One Failure &lt;a href=&#34;#one-failure&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I went down a long rabbit hole before this trying to populate the quickfix with&#xA;spelling errors, I tried looking for existing plugins, tried to get ai to give&#xA;me a good prototype to start with, and everything was over complicated.  So far&#xA;I’m really liking this setup.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>kubernetes node labels</title>
    <id>https://waylonwalker.com/kubernetes-node-labels/</id>
    <updated>2025-05-28T18:49:19Z</updated>
    <published>2025-05-28T18:49:19Z</published>
    <link href="https://waylonwalker.com/kubernetes-node-labels/" rel="alternate" type="text/html"></link>
    <summary type="text">If you need to target a specific k8s node in the cluster, you can use labels. You want to treat your nodes as much like cattle as you can, but sometimes...</summary>
    <content type="html">&lt;p&gt;If you need to target a specific k8s node in the cluster, you can use labels.&#xA;You want to treat your nodes as much like cattle as you can, but sometimes&#xA;budgets get in the way.  You might be like me and just run any free hardware&#xA;you can get in your cluster, or you might have some large storage or gpu needs&#xA;that you can’t afford to put on every node in the cluster.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl get nodes --show-labels&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# add the bigpool label&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl label node k8s-1 &lt;span class=&#34;nv&#34;&gt;bigpool&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl get nodes --show-labels&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# remove the bigpool label&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl label node k8s-1 bigpool-&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To use the label in a pod set &lt;code&gt;spec.nodeSelector&lt;/code&gt; to the label that you&#xA;applied.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;apiVersion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;v1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;kind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Pod&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;busybox&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;containers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;busybox&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;busybox&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;nodeSelector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;bigpool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>wants</title>
    <id>https://waylonwalker.com/wants/</id>
    <updated>2025-05-27T21:01:14Z</updated>
    <published>2025-05-27T21:01:14Z</published>
    <link href="https://waylonwalker.com/wants/" rel="alternate" type="text/html"></link>
    <summary type="text">Inspired by mara.town/wants</summary>
    <content type="html">&lt;p&gt;Inspired by &lt;a href=&#34;https://maya.land/wants/&#34;&gt;mara.town/wants&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;want-but-do-not-enjoy&#34;&gt;want but do not enjoy &lt;a href=&#34;#want-but-do-not-enjoy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;New hardware that cannot be repaired&lt;/li&gt;&#xA;&lt;li&gt;Disciplining Children&lt;/li&gt;&#xA;&lt;li&gt;Nice landscaping which requires regular maintenance&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;enjoy-but-do-not-want&#34;&gt;enjoy but do not want &lt;a href=&#34;#enjoy-but-do-not-want&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;breakfast&lt;/li&gt;&#xA;&lt;li&gt;Fancy things&lt;/li&gt;&#xA;&lt;li&gt;Manual Labor in moderation&lt;/li&gt;&#xA;&lt;li&gt;Vacations to far away places&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Linux Is About Choice</title>
    <id>https://waylonwalker.com/linux-is-about-choice/</id>
    <updated>2025-05-27T13:37:00Z</updated>
    <published>2025-05-27T13:37:00Z</published>
    <link href="https://waylonwalker.com/linux-is-about-choice/" rel="alternate" type="text/html"></link>
    <summary type="text">This Luke Smith video came across my feed Linux, Bitcoin: When Tech Projects Become &#34;Too Popular...&#34; Don&#39;t forget the goal.. It&#39;s interesting to hear his...</summary>
    <content type="html">&lt;p&gt;This Luke Smith video came across my feed &lt;a href=&#34;https://www.youtube.com/watch?v=0-lS8Y79L7g&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Linux, Bitcoin: When Tech Projects&#xA;Become “Too Popular…” Don’t forget the&#xA;goal.&lt;/a&gt;.  It’s interesting to hear&#xA;his perspective about Linux, FOSS, Free Software being the end goal, and that we&#xA;are loosing sight of the goal.  This sentiment really aligns with the early&#xA;FOSS movement from Stallman, but was this ever the goal?&lt;/p&gt;&#xA;&lt;h2 id=&#34;taken-over-by-apathetic-interests&#34;&gt;Taken over by apathetic interests &lt;a href=&#34;#taken-over-by-apathetic-interests&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Luke talks about these projects getting taken over by people with no passion&#xA;for the original goal of freedom and privacy.  They want the projects to grow,&#xA;get bigger, and become mainstream.  This feels exactly the opposite of&#xA;anything Luke would want, so my bias alarm goes off here.  Honestly I do see&#xA;some of the grossness of projects like this that were grassroots, for freedom&#xA;and privacy get taken over for money grabs.  I’m completely out on bitcoin so I&#xA;cannot make any comment there, but I Truly believe that the Linux kernel is&#xA;not a money grab as Luke makes the new face of bitcoin sound.&lt;/p&gt;&#xA;&lt;h2 id=&#34;corporate-backing-is-ok&#34;&gt;Corporate backing is OK &lt;a href=&#34;#corporate-backing-is-ok&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’m going to take a counter point here from Luke, that it’s OK for Companies to&#xA;be made, and money to be made on FOSS.  While the Nats relicense has caused a&#xA;Kerfuffle, I appreciate their side of the relicense, as a they discussed on &lt;a href=&#34;https://www.youtube.com/watch?v=hQ7nekmDFfQ&amp;amp;t=2300s&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;The&#xA;Changelog: NATS and the CNCF kerfuffle | Derek Collison shares NATS/Synadia&#xA;story&lt;/a&gt;.  They had a&#xA;struggle to make money as a small project in the Linux Foundation.  Large&#xA;companies would not pay for their service as they have already paid into the&#xA;foundation.  They chose to relicense new versions of the server so such that it&#xA;would become FOSS after 2 years.  This gives them time to pay for their development.&lt;/p&gt;&#xA;&lt;p&gt;Rug pulls, price gouging, and other bad behaviors aside Funding is overall good&#xA;for the FOSS community.  It is a good thing that Torvalds is able to make a&#xA;living from the work he has done on the kernel.&lt;/p&gt;&#xA;&lt;h2 id=&#34;foss-hardware&#34;&gt;FOSS hardware &lt;a href=&#34;#foss-hardware&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Luke mentions FOSS hardware in the video.  I think this is great and really&#xA;plays to the longevity of a product and limiting e-waste.  I think the main&#xA;goal here is not necessarily openness, but repairability.  At least for me.  I&#xA;could not care to build out ram or hard drives from scratch, but what I do care&#xA;is that I can repair my hardware.   I don’t want my investments into hardware&#xA;to go to waste and be thrown away because of a component failure.  I get that&#xA;we are largely there on the mobile side, and that really sucks.&lt;/p&gt;&#xA;&lt;h2 id=&#34;choice&#34;&gt;Choice &lt;a href=&#34;#choice&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I really feel like the goal of Linux is choice, its not locked into FOSS.  FOSS&#xA;is a great option, and is really only there for Linux, and not at all an option&#xA;for Windows or MacOS.  I’d argue that at the beginning of the Linux project&#xA;there was no choice your only real option was closed source all the way&#xA;around.  These days not only do we have the freedom to choose an OS, but we can&#xA;choose how we want our Linux.  If you want to deploy Linux at a large company,&#xA;and you are willing to pay for support from someone like Red Hat or Canonical&#xA;that’s an option, but its not the only option.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=bWX7jI9t7j8&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;macOS Power User Asks DistroTube: Which Linux Never Breaks?&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In this interview DT talks about getting new hardware sent to him, and they ask&#xA;do you want us to put Linux on it?  His answer, No, it doesn’t matter, I wont&#xA;use it anyways.  You see DT is not here purely for the Linux, he is here for&#xA;the choice.  His choice is to pick every last config option, and tailor every&#xA;installed executable to fit his needs.  His preferences happen to be in the&#xA;full Free as in Freedom realm.&lt;/p&gt;&#xA;&lt;h2 id=&#34;infinite-linux&#34;&gt;Infinite Linux &lt;a href=&#34;#infinite-linux&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Linux has infinite options of configuration, hundreds of distros, hundreds of&#xA;desktop environments.  You can Choose a Floating window manager, Tiling window&#xA;manager, or go full TTY with no graphical environment.  With MacOS and Windows&#xA;you get it the way they decide you get it with a level of configuration that&#xA;pales in comparison to what you get on Linux.&lt;/p&gt;&#xA;&lt;h2 id=&#34;immutable-linux&#34;&gt;Immutable Linux &lt;a href=&#34;#immutable-linux&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;A very recent and modern example of this is immutable or cloud native distros,&#xA;the idea is that they are more like an appliance, giving you less freedom and&#xA;control than you typically would have on a normal bare metal install of linux,&#xA;&lt;code&gt;bootc&lt;/code&gt; is just really taking off this year.  I’m currently running one of&#xA;these distro’s called bazzite and I am really loving it.  I have a couple of&#xA;desktop applications that I install from the discover store as flatpaks, but&#xA;mosty I live in a fully custom distrobox that I put every ounce of ricing and&#xA;configuration that I want into.  For me it has been ultra reliable, rather than&#xA;rolling my own thing that is a combination of packages unique to me, I have&#xA;something that is rock hard in the community and I run versioned images of my&#xA;devtainer that make it easy for me to roll back on if something were to break.&lt;/p&gt;&#xA;&lt;p&gt;For me this is feedom, I get to fully control the environment I really care&#xA;about, my terminal.  I get a window manager with 9 workspaces that I can hotkey&#xA;to, and I never miss a game night with my kids due to some weird graphics issue.&lt;/p&gt;&#xA;&lt;h2 id=&#34;freedom&#34;&gt;Freedom &lt;a href=&#34;#freedom&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;In the end Linux was born of this freedom, and is an important part.  While its&#xA;great that there are players here that are able to make money, be good citizens&#xA;and give back, there are bad players.  Even if all the players are good not&#xA;everyone is going to agree and money will only spoil their hurt feelings even&#xA;more.  If Linux looses this freedom of choice and becomes something that you&#xA;only get littered with Closed source software, or on paid platforms, or imposes&#xA;any level of restrictions on to you its lost, and we need a new revolution to&#xA;rise in its ashes.&lt;/p&gt;&#xA;&lt;h2 id=&#34;fin&#34;&gt;Fin &lt;a href=&#34;#fin&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’m trying to write more free flowing articles philosophical in nature.  There&#xA;are probably grammatical and spelling misttakes.  There are probably things I&#xA;will re-read in 6 months and not agree with, but these are my free flowing&#xA;thoughts right now. I think we are missing really good opinion pieces on the&#xA;internet these days. Too much AI generated, “Hello World”, shoulda read the&#xA;docs BS.  I subscribe to a lot of other good folks that give their real&#xA;opinions you can find them on my&#xA;&lt;a href=&#34;https://reader.waylonwalker.com/blogroll&#34;&gt;blogroll&lt;/a&gt;.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>javascript b64</title>
    <id>https://waylonwalker.com/javascript-b64/</id>
    <updated>2025-05-25T21:01:04Z</updated>
    <published>2025-05-25T21:01:04Z</published>
    <link href="https://waylonwalker.com/javascript-b64/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m currently replacing-google-search-apps-with-self-hosted-web-apps and decided to create a simple b64 encoder/decoder, just start typing to enter text,...</summary>
    <content type="html">&lt;p&gt;I’m currently [[replacing-google-search-apps-with-self-hosted-web-apps]] and&#xA;decided to create a simple b64 encoder/decoder, just start typing to enter&#xA;text, escape to deselect, then e/d to encode/decode.&lt;/p&gt;&#xA;&lt;p&gt;I’m trying to make these apps super simple, &lt;a href=&#34;/self-host/&#34; class=&#34;glossary-term&#34; title=&#34;Self hosting is the act of hosting your own applications and services without using a SAS provider. This is typically done with your own hardware, but there...&#34;&gt;self hosted&lt;/a&gt; out of minio, static&#xA;&lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;html&lt;/a&gt;, and javascript.  It’s been fun to get back to some simple interactive web&#xA;development like this. No build just a website that does something.  No broken&#xA;builds, no containers to deploy, just push to minio.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;encoded&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;btoa&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;decoded&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;atob&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;encoded&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here is the result.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://b64.wayl.one&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://b64.wayl.one&amp;amp;height=450&amp;amp;width=800&amp;amp;scaled_width=800&amp;amp;scaled_height=450&amp;amp;selectors=&#34; alt=&#34;screenshot of https://b64.wayl.one&#34;/ data-glightbox=&#34;description: screenshot of https://b64.wayl.one&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ayoisaiah f2</title>
    <id>https://waylonwalker.com/ayoisaiah-f2/</id>
    <updated>2025-05-24T21:00:49Z</updated>
    <published>2025-05-24T21:00:49Z</published>
    <link href="https://waylonwalker.com/ayoisaiah-f2/" rel="alternate" type="text/html"></link>
    <summary type="text">f2 by ayoisaiah is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/ayoisaiah/f2&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;f2&lt;/a&gt; by &lt;a href=&#34;https://github.com/ayoisaiah&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ayoisaiah&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;F2 is a cross-platform command-line tool for batch renaming files and directories quickly and safely. Written in Go!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tinyapps</title>
    <id>https://waylonwalker.com/tinyapps/</id>
    <updated>2025-05-22T14:31:29Z</updated>
    <published>2025-05-22T14:31:29Z</published>
    <link href="https://waylonwalker.com/tinyapps/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m working on replacing my usage of google inline search apps with real apps, these are ones that I create and host on my own homelab. The first three that...</summary>
    <content type="html">&lt;p&gt;I’m working on replacing my usage of google inline search apps with real apps,&#xA;these are ones that I create and host on my own &lt;a href=&#34;/homelab/&#34; class=&#34;glossary-term&#34; title=&#34;A place to self host applications. For me this is primarily self built web applications, and applications for sharing files with my family. Techno Tim has a...&#34;&gt;homelab&lt;/a&gt;.  The first three that&#xA;I created are mostly chatgpt based, with a bit of hand edit after the fact,&#xA;uploaded to minio and become an app on my&#xA;&lt;a href=&#34;https://github.com/waylonwalker/k8s-pages&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;k8s-pages&lt;/a&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;renamed&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;The original title of this post was &amp;#34;Replacing Google Search Apps With Self Hosted Web Apps&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;I’m leaning on &lt;a href=&#34;/web-wakelock/&#34; class=&#34;wikilink&#34; data-title=&#34;web wakelock&#34; data-description=&#34;I&amp;#39;m trying to replace my usage of google inline search apps with real apps, today I used a stopwatch to time some things out at work by opening stopwatch....&#34; data-date=&#34;2025-05-21&#34; data-preview=&#34;I&amp;#39;m trying to replace my usage of google inline search apps with real apps, today I used a stopwatch to time some things out at work by opening stopwatch....&#34;&gt;web wakelock&lt;/a&gt; to keep the screen on while these apps are&#xA;running, primarily clos, timer, and stopwatch.&lt;/p&gt;&#xA;&lt;h2 id=&#34;clock&#34;&gt;Clock &lt;a href=&#34;#clock&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;A large displya clock.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://clock.wayl.one&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://clock.wayl.one&amp;amp;height=450&amp;amp;width=800&amp;amp;scaled_width=800&amp;amp;scaled_height=450&amp;amp;selectors=&#34; alt=&#34;screenshot of https://clock.wayl.one&#34;/ data-glightbox=&#34;description: screenshot of https://clock.wayl.one&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;timer&#34;&gt;Timer &lt;a href=&#34;#timer&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;A simple timer that counts down from thet set time.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://timer.wayl.one&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://timer.wayl.one&amp;amp;height=450&amp;amp;width=800&amp;amp;scaled_width=800&amp;amp;scaled_height=450&amp;amp;selectors=&#34; alt=&#34;screenshot of https://timer.wayl.one&#34;/ data-glightbox=&#34;description: screenshot of https://timer.wayl.one&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;stopwatch&#34;&gt;Stopwatch &lt;a href=&#34;#stopwatch&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is the one that inspired it all, I need to run a few stopwatches at work,&#xA;and chose to just do it right in the google search with a few tabs running.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://stopwatch.wayl.one&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://stopwatch.wayl.one&amp;amp;height=450&amp;amp;width=800&amp;amp;scaled_width=800&amp;amp;scaled_height=450&amp;amp;selectors=&#34; alt=&#34;screenshot of https://stopwatch.wayl.one&#34;/ data-glightbox=&#34;description: screenshot of https://stopwatch.wayl.one&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;dice&#34;&gt;Dice &lt;a href=&#34;#dice&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;A simple dice roller, this one is the one that I decided to start adding &lt;code&gt;?&lt;/code&gt;&#xA;for help.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dice.wayl.one&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://dice.wayl.one&amp;amp;height=450&amp;amp;width=800&amp;amp;scaled_width=800&amp;amp;scaled_height=450&amp;amp;selectors=&#34; alt=&#34;screenshot of https://dice.wayl.one&#34;/ data-glightbox=&#34;description: screenshot of https://dice.wayl.one&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;uuid&#34;&gt;UUID &lt;a href=&#34;#uuid&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It displays a uuid, thats it.  &lt;kbd&gt;ctrl&lt;/kbd&gt; + &lt;kbd&gt;c&lt;/kbd&gt; to copy.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://uuid.wayl.one&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://uuid.wayl.one&amp;amp;height=450&amp;amp;width=800&amp;amp;scaled_width=800&amp;amp;scaled_height=450&amp;amp;selectors=&#34; alt=&#34;screenshot of https://uuid.wayl.one&#34;/ data-glightbox=&#34;description: screenshot of https://uuid.wayl.one&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;b64&#34;&gt;b64 &lt;a href=&#34;#b64&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Today i spent some time on &lt;a href=&#34;b64.wayl.one&#34;&gt;b64&lt;/a&gt;, it is a base64 decoder/encoder.&#xA;Just start tying to enter text, or paste, escape to deselect the text box, d to&#xA;decode, e to encode, ? for help.  It took a bit to get all of the keymaps right&#xA;with the differnt modes and make sure that for instance you don’t keep typing&#xA;in the input box while in help mode, or decode/encode while in the input box.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://b64.wayl.one&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://b64.wayl.one&amp;amp;height=450&amp;amp;width=800&amp;amp;scaled_width=800&amp;amp;scaled_height=450&amp;amp;selectors=&#34; alt=&#34;screenshot of https://b64.wayl.one&#34;/ data-glightbox=&#34;description: screenshot of https://b64.wayl.one&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;pocketcal&#34;&gt;PocketCal &lt;a href=&#34;#pocketcal&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This one is not mine, it’s made by &lt;a href=&#34;https://cassidoo.co/post/pocketcal-build-log/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/cassidoo.co.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/cassidoo.co.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Cassidy&#xA;Williams&lt;/a&gt;), but is within the&#xA;ethos and deserves a mention here.  Its a single page calendar that is a static&#xA;site completely rendered on the front end, data is stored in the url as you&#xA;interact with it.  None of your data goes to a server.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://pocketcal.com&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://pocketcal.com&amp;amp;height=450&amp;amp;width=800&amp;amp;scaled_width=800&amp;amp;scaled_height=450&amp;amp;selectors=&#34; alt=&#34;screenshot of https://pocketcal.com&#34;/ data-glightbox=&#34;description: screenshot of https://pocketcal.com&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;qrcode&#34;&gt;qrcode &lt;a href=&#34;#qrcode&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Today I wanted to finish an article that I was on afk and It killed me to get&#xA;it from my work computer to my phone, so I made a qrcode generator.  Paste in&#xA;or type in your message and it shows up as a qr code live.  This one needed an&#xA;event listener for window resize since the library creates a rigid canvas qr&#xA;code that does not fit on the screen once you create it then resize the window.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://qrcode.waylonwalker.com/?text=https://waylonwalker.com/replacing-google-search-apps-with-self-hosted-web-apps/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://qrcode.waylonwalker.com/?text=https://waylonwalker.com/replacing-google-search-apps-with-self-hosted-web-apps%2F%3Ftext%3Dhttps%3A%2F%2Fshots.waylonwalker.com%2F&amp;amp;width=450&amp;amp;height=500&#34; alt=&#34;screenshot of https://b64.wayl.one&#34;/ data-glightbox=&#34;description: screenshot of https://b64.wayl.one&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I even added query params to pass hex codes in for &lt;code&gt;color&lt;/code&gt; and &lt;code&gt;bg&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://qrcode.waylonwalker.com/?text=https://waylonwalker.com/replacing-google-search-apps-with-self-hosted-web-apps/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://qrcode.waylonwalker.com/?text=https://waylonwalker.com/replacing-google-search-apps-with-self-hosted-web-apps%2F%3Ftext%3Dhttps%3A%2F%2Fshots.waylonwalker.com%2F%26color%3Dff69b4%26bg%3Dffcc00&amp;amp;width=450&amp;amp;height=500&#34; alt=&#34;screenshot of https://b64.wayl.one&#34;/ data-glightbox=&#34;description: screenshot of https://b64.wayl.one&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>web wakelock</title>
    <id>https://waylonwalker.com/web-wakelock/</id>
    <updated>2025-05-21T20:50:22Z</updated>
    <published>2025-05-21T20:50:22Z</published>
    <link href="https://waylonwalker.com/web-wakelock/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m trying to replace my usage of google inline search apps with real apps, today I used a stopwatch to time some things out at work by opening stopwatch....</summary>
    <content type="html">&lt;p&gt;I’m trying to replace my usage of google inline search apps with real apps,&#xA;today I used a stopwatch to time some things out at work by opening stopwatch.&#xA;This was something I just wanted running in a tab on another screen, it was not&#xA;timing running code or anything, I was using it as a reminder to check browser&#xA;caches every 5 minutes or so for some testing.&lt;/p&gt;&#xA;&lt;p&gt;So tonight I whipped up a &lt;a href=&#34;https://stopwatch.wayl.one&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/stopwatch.wayl.one.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/stopwatch.wayl.one.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;stopwatch&lt;/a&gt;,&#xA;&lt;a href=&#34;https://clock.wayl.one&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/clock.wayl.one.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/clock.wayl.one.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;clock&lt;/a&gt; and &lt;a href=&#34;https://timer.wayl.one&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/timer.wayl.one.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/timer.wayl.one.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;timer&lt;/a&gt;, all of&#xA;which are using the wakelock API to keep the screen on while the app is&#xA;running.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// Wake Lock support&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;wakeLock&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;requestWakeLock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;try&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;wakeLock&amp;#39;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;navigator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;nx&#34;&gt;wakeLock&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;navigator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;wakeLock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;screen&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Wake lock acquired&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;err&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Wake lock error:&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;err&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;addEventListener&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;visibilitychange&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;wakeLock&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!==&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;visibilityState&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;visible&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;requestWakeLock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;requestWakeLock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pypeaday dbztui</title>
    <id>https://waylonwalker.com/pypeaday-dbztui/</id>
    <updated>2025-05-19T16:40:31Z</updated>
    <published>2025-05-19T16:40:31Z</published>
    <link href="https://waylonwalker.com/pypeaday-dbztui/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by dbztui from pypeaday.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/pypeaday/dbztui&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dbztui&lt;/a&gt; from &lt;a href=&#34;https://github.com/pypeaday&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pypeaday&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A DBZ TUI built with an early version of ninesUI and Windsurf&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>vhs themes</title>
    <id>https://waylonwalker.com/vhs-themes/</id>
    <updated>2025-05-16T08:24:51Z</updated>
    <published>2025-05-16T08:24:51Z</published>
    <link href="https://waylonwalker.com/vhs-themes/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been working on ninesui, inspired by k9s see thoughts-633. I want a good flow for making video for the readme and I am using charm.sh&#39;s vhs for this....</summary>
    <content type="html">&lt;p&gt;I’ve been working on&#xA;&lt;a href=&#34;https://github.com/WaylonWalker/ninesui/blob/main/README.md&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ninesui&lt;/a&gt;,&#xA;inspired by k9s see &lt;a href=&#34;https://thoughts.waylonwalker.com/post/633&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/thoughts.waylonwalker.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/thoughts.waylonwalker.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;thoughts-633&lt;/a&gt;.&#xA;I want a good flow for making video for the readme and I am using &lt;a href=&#34;https://charm.sh/apps/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/charm.sh.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/charm.sh.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;charm.sh&lt;/a&gt;’s &lt;a href=&#34;https://github.com/charmbracelet/vhs&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vhs&lt;/a&gt; for this.&#xA;Its running in an archBTW distrobox and looks gawdaweful.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/e86047ed-6881-43f7-8e3a-30411d51afaf.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/e86047ed-6881-43f7-8e3a-30411d51afaf.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/e86047ed-6881-43f7-8e3a-30411d51afaf.mp4&#34; type=&#34;video/mp4&#34;&gt;sort.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;The over saturated colors give it a really retro look, seems fine, but not my&#xA;cup of tea.  I tried to change the textual theme to &lt;code&gt;tokyo-night&lt;/code&gt; and it might&#xA;have made it a bit better, but still over-saturated.&lt;/p&gt;&#xA;&lt;h2 id=&#34;after&#34;&gt;After &lt;a href=&#34;#after&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;What I found is that vhs has themes, setting it to &lt;code&gt;dracula&lt;/code&gt; made everything much better.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# sort.tape&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Output assets/sort.mp4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Output assets/sort.gif&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Require echo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Set Shell &amp;#34;bash&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Set FontSize 32&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Set Width 1920&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Set Height 1080&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+ Set Theme &amp;#39;Dracula&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/ada8f04d-88ac-41c3-9983-d9e849cc13ad.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/ada8f04d-88ac-41c3-9983-d9e849cc13ad.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/ada8f04d-88ac-41c3-9983-d9e849cc13ad.mp4&#34; type=&#34;video/mp4&#34;&gt;sort.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;ninesui&#34;&gt;NinesUI &lt;a href=&#34;#ninesui&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’m using these in my &lt;a href=&#34;https://github.com/WaylonWalker/ninesui&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ninesui&lt;/a&gt;&#xA;project, right now they are in the readme, but maybe some docs will grow&#xA;eventually.  Right now its hardcore explore phase.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>m9a devlog 1</title>
    <id>https://waylonwalker.com/m9a-devlog-1/</id>
    <updated>2025-05-11T09:33:44Z</updated>
    <published>2025-05-11T09:33:44Z</published>
    <link href="https://waylonwalker.com/m9a-devlog-1/" rel="alternate" type="text/html"></link>
    <summary type="text">It&#39;s sad to see textualize.io close the doors, but textual is still alive and maintained as a n open source project. I tried to use it very early, and...</summary>
    <content type="html">&lt;p&gt;It’s sad to see textualize.io close the doors, but textual is still alive and&#xA;maintained as a n open source project.  I tried to use it very early, and&#xA;struggled, this was before docs and tutorials really existed, before a lot of&#xA;the widgets and components existed.  Then as we all do I got busy and moved on&#xA;to other things in life and did not have the capacity to build TUIs.&lt;/p&gt;&#xA;&lt;h2 id=&#34;i-like-tuis&#34;&gt;I like tuis &lt;a href=&#34;#i-like-tuis&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I like tuis, I like staying in the terminal.  I use&#xA;&lt;a href=&#34;https://github.com/gokcehan/lf&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lf&lt;/a&gt; daily to move files around when I&#xA;want something more than &lt;code&gt;mv&lt;/code&gt; and &lt;code&gt;cp&lt;/code&gt;.  I use&#xA;&lt;a href=&#34;https://github.com/derailed/k9s&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;k9s&lt;/a&gt; hourly to monitor and manage my&#xA;kubernetes cluster.&lt;/p&gt;&#xA;&lt;h2 id=&#34;are-they-worth-the-effort&#34;&gt;Are they worth the effort?? &lt;a href=&#34;#are-they-worth-the-effort&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As awesome as tui’s are, they are more effort to build, and less automatable.&#xA;I feel like the first stage into automation of a project really needs to be a&#xA;good cli, and this is often good enough for the project and I move on.&lt;/p&gt;&#xA;&lt;h2 id=&#34;m9a-em---nine---ah&#34;&gt;m9a (em - nine - ah) &lt;a href=&#34;#m9a-em---nine---ah&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;inspired by k9s&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Like I said I really like k9s and use it all the time, It really makes running&#xA;kubectl commands a breeze and much less verbose.  I don’t know how useful this&#xA;will be, but as a learning exercise I am working on a k9s experience for my&#xA;blog generator &lt;a href=&#34;/markata/&#34; class=&#34;wikilink&#34; data-title=&#34;markata&#34; data-description=&#34;This post is a work in progress.&#34; data-date=&#34;2024-05-30&#34; data-preview=&#34;This post is a work in progress.&#34;&gt;markata&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/53671f5a-acc5-4d17-aa2d-2e9ac6db5674.webm&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/53671f5a-acc5-4d17-aa2d-2e9ac6db5674.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/53671f5a-acc5-4d17-aa2d-2e9ac6db5674.webm&#34; type=&#34;video/webm&#34;&gt;m9a-1-trimmed.webm&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;learning&#34;&gt;Learning &lt;a href=&#34;#learning&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;So far this is just for learning and not quite the most useful thing, I am not&#xA;sure if there is a way to do it, but I am interested in the idea of some sort&#xA;of framework (maybe just widgets) that can more easily turn pydantic objects&#xA;into this kind of tui.  I don’t quite know how it would work, or if it could&#xA;work, for now just exploring the idea, and I think I hit a fairly crude clone&#xA;of k9s so far.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>grafana dashboards as k8s configmap</title>
    <id>https://waylonwalker.com/grafana-dashboards-as-k8s-configmap/</id>
    <updated>2025-05-06T20:24:35Z</updated>
    <published>2025-05-06T20:24:35Z</published>
    <link href="https://waylonwalker.com/grafana-dashboards-as-k8s-configmap/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m trying to learn proper logs, monitoring, otel, and grafana. Today I imported a bunch of pre-made k8s dashboards and made a few of my own for specific...</summary>
    <content type="html">&lt;p&gt;I’m trying to learn proper logs, monitoring, otel, and grafana.  Today I&#xA;imported a bunch of pre-made k8s dashboards and made a few of my own for&#xA;specific apps, and it made me want to know how I can turn my own custom&#xA;dashboards into infrastructure as code.  Turns out grafana makes it pretty easy&#xA;to do this, if you have the grafana dashboard sidecar running.  It will pick up&#xA;any ConfigMap with the grafana_dashboard label and import it.&lt;/p&gt;&#xA;&lt;p&gt;Go to Dashboards -&amp;gt; Pick a Dashboard -&amp;gt; Export -&amp;gt; JSON.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/530e8515-a72a-4341-82d7-37f6f985e327.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/530e8515-a72a-4341-82d7-37f6f985e327.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/d792b2db-2dcf-465f-a400-e84f199ec22d.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/d792b2db-2dcf-465f-a400-e84f199ec22d.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/684701cc-efec-4e2b-9630-c8aea7ff5b14.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/684701cc-efec-4e2b-9630-c8aea7ff5b14.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;apiVersion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;v1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;kind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;ConfigMap&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;my-dashboard&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;namespace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;meta&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;labels&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;grafana_dashboard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;my-dashboard.json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sd&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;      &amp;#34;annotations&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;        &amp;#34;list&amp;#34;: [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;      ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;      &amp;#34;uid&amp;#34;: &amp;#34;fel2uhjhepg5ce&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;      &amp;#34;version&amp;#34;: 3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;    }&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ gitroomhq postiz-app</title>
    <id>https://waylonwalker.com/gitroomhq-postiz-app/</id>
    <updated>2025-05-06T18:23:48Z</updated>
    <published>2025-05-06T18:23:48Z</published>
    <link href="https://waylonwalker.com/gitroomhq-postiz-app/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred postiz-app by gitroomhq. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/gitroomhq/postiz-app&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;postiz-app&lt;/a&gt; by &lt;a href=&#34;https://github.com/gitroomhq&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gitroomhq&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;📨 The ultimate social media scheduling tool, with a bunch of AI  🤖&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>hollow knight home row layout</title>
    <id>https://waylonwalker.com/hollow-knight-home-row-layout/</id>
    <updated>2025-05-05T20:44:36Z</updated>
    <published>2025-05-05T20:44:36Z</published>
    <link href="https://waylonwalker.com/hollow-knight-home-row-layout/" rel="alternate" type="text/html"></link>
    <summary type="text">I just made it past 100% in my main hollow knight run, so now I will allow myself to get silksong when it comes out. I did this with a little bit of YT...</summary>
    <content type="html">&lt;p&gt;I just made it past 100% in my main hollow knight run, so now I will allow&#xA;myself to get silksong when it comes out.  I did this with a little bit of YT&#xA;guidance, but mostly just figuring it out.  I only just discovered the&#xA;&lt;a href=&#34;/reznormichael-hollow-knight-completion-check/&#34; class=&#34;wikilink&#34; data-title=&#34;⭐ ReznoRMichael hollow-knight-completion-check&#34; data-description=&#34;Check out ReznoRMichael and their project hollow-knight-completion-check.&#34; data-date=&#34;2025-04-20&#34; data-preview=&#34;Check out ReznoRMichael and their project hollow-knight-completion-check.&#34;&gt;⭐ ReznoRMichael hollow-knight-completion-check&lt;/a&gt; which got me an extra 2% for&#xA;a few items I must have got and not saved on, because I was sure I had them.&lt;/p&gt;&#xA;&lt;h2 id=&#34;controller&#34;&gt;Controller &lt;a href=&#34;#controller&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Hollow Knight is a game that can be played with keyboard or controller, You can&#xA;use analog stick for movements, but they just translate to dpad, there really&#xA;are no analog moves in the game.  This makes it ripe for playing on pure&#xA;keyboard.  I really favor controller when there are more than one analog&#xA;(throttle, brake, steering for example).&lt;/p&gt;&#xA;&lt;p&gt;On controller I’ve switched to only using d-pad as I feel like it gives me the&#xA;most crisp of controls.  It is really easy to miss a pogo on analog by hitting&#xA;slightly left or right.&lt;/p&gt;&#xA;&lt;h2 id=&#34;my-keyboard&#34;&gt;My Keyboard &lt;a href=&#34;#my-keyboard&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;My daily driver keyboard is a custom built 40% monoblock keyboard I absolutely&#xA;love using it, it perfectly plops down on a laptop when I am in laptop mode and&#xA;really fits me quite well for my wrok as a software/infrastructure engineer.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/9fd1dbf7-4c5d-4bb3-adaf-138755f90d54.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/9fd1dbf7-4c5d-4bb3-adaf-138755f90d54.png&#34; alt=&#34;screenshot-2025-05-06T02-36-55-641Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-05-06T02-36-55-641Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;wasd&#34;&gt;WASD &lt;a href=&#34;#wasd&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;We’ve got to talk about pinky stagger&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I can use wasd perfectly fine on it, I have a layer that has no holds on any&#xA;keys so that they are all nice and crisp and tailored to gaming operations that&#xA;would require a hold.&lt;/p&gt;&#xA;&lt;p&gt;Now what I haven’t ran into before is that trying to game with wasd and use the&#xA;right side is very uncomfortable with this steep of a pinky stagger.  Generally&#xA;with keyboard an mouse games I have the keyboard a little slanted and move my&#xA;fingers to wasd just fine, but it just does not work well with both hands on&#xA;the keyboard.&lt;/p&gt;&#xA;&lt;h2 id=&#34;enter-asdf&#34;&gt;Enter asdf &lt;a href=&#34;#enter-asdf&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Today is day one, I’m not quite sure how long it will last, but I am giving&#xA;asdf a try for arrow keys.  This will work much more akin to a fight stick&#xA;where each finger has a primary direction instead of using one finger for both&#xA;up and down.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;vim keys, but mirrored&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;I chose to mirror vim keys with down towards the middle.  I had it the other&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;way, but when I played, I kept pressing it the other way.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;a - left&lt;/li&gt;&#xA;&lt;li&gt;s - up&lt;/li&gt;&#xA;&lt;li&gt;d - down&lt;/li&gt;&#xA;&lt;li&gt;f - right&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;power keys&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;I wanted to put the most common keys on the strongest finger (feels like&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;left pinky breaks this mantra, but whatever).&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;j - attack&lt;/li&gt;&#xA;&lt;li&gt;k - dash&lt;/li&gt;&#xA;&lt;li&gt;l - focus/cast&lt;/li&gt;&#xA;&lt;li&gt;h - quick cast&lt;/li&gt;&#xA;&lt;li&gt;e - inventory&lt;/li&gt;&#xA;&lt;li&gt;u - super dash&lt;/li&gt;&#xA;&lt;li&gt;m - map&lt;/li&gt;&#xA;&lt;li&gt;g - dream nail&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;this-seems-weird&#34;&gt;This seems weird &lt;a href=&#34;#this-seems-weird&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;So Ya, I know it’s weird. I did some searching wasn’t able to find much other&#xA;than this one &lt;a href=&#34;https://www.reddit.com/r/KeyboardLayouts/comments/18kdnl0/using_asdf_instead_of_wasd_for_gaming/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.reddit.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.reddit.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;reddit post&lt;/a&gt;&#xA;talking about using asdf.  oddly one person reccommended sdfg, this souds so&#xA;much like vim, which makes a lot of sense, but brings back moving fingers off&#xA;of home row position or using one finger for down and right, which aint gonna&#xA;work.&lt;/p&gt;&#xA;&lt;h2 id=&#34;first-thoughts&#34;&gt;First thoughts &lt;a href=&#34;#first-thoughts&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’m about 20 minutes in and struggling on False Knight, I could be a bit more&#xA;patient, but I’m trying to work on pogos on all the mobs on the way in.&lt;/p&gt;&#xA;&lt;h3 id=&#34;holding-up-or-down&#34;&gt;Holding up or down &lt;a href=&#34;#holding-up-or-down&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;The ability to just hold up or down as you run through the map with enemies&#xA;coming from above or below feels superior, and its going to be nice, I really&#xA;just got to put some time in to get use to the layout, maybe even make some&#xA;changes.&lt;/p&gt;&#xA;&lt;p&gt;I realize now that Hollow Knight rarely needs quick swiching between up and&#xA;down and would probably be fine on a wasd layout if i were to be using a split&#xA;keyboard or a bit less pinky stagger that would work out, but for now I am&#xA;giving this a shot.&lt;/p&gt;&#xA;&lt;h2 id=&#34;my-sons-experience&#34;&gt;My Son’s experience &lt;a href=&#34;#my-sons-experience&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;So my son is playing along with me, new save as well. He went with wasd and&#xA;mouse, while this sounds insane to me to use mouse for clicking and no movement&#xA;the natural feel that it has, has him blazing through faster than he does on&#xA;controller, doing pogos he’s never done before.&lt;/p&gt;&#xA;&lt;h2 id=&#34;false-knight-down&#34;&gt;False Knight down &lt;a href=&#34;#false-knight-down&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The recording somehow stuck on the menu screen and did not record video, but I&#xA;got this screenshot of the victory.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/be00de02-1cac-4dc2-8c05-9c52c9f1f124.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/be00de02-1cac-4dc2-8c05-9c52c9f1f124.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;vengeful-spirit&#34;&gt;Vengeful Spirit &lt;a href=&#34;#vengeful-spirit&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Day 2 I managed to make it to the Ancestral Mound and get the Vengeful Spirit&#xA;cast.  Everything is starting to feel much better and more natural.&#xA;Surprisingly my main issue is with up and down since they are used a bit less,&#xA;left with my pinky has not been any issue.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/3c461bd2-3276-45da-8411-c85073f66497.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/3c461bd2-3276-45da-8411-c85073f66497.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/3c461bd2-3276-45da-8411-c85073f66497.mp4&#34; type=&#34;video/mp4&#34;&gt;hollow-knight-keeb-run-vengeful-spirit.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;hornet-battle-1&#34;&gt;Hornet Battle 1 &lt;a href=&#34;#hornet-battle-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I made it successfully through the first hornet battle I was able to snag this&#xA;clip of a few nicely timed pogos.  Its getting better, I am still really&#xA;struggling between down srike and up strike.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/f627cb2c-8da5-4508-9d05-c3a12ed4c2b9.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/f627cb2c-8da5-4508-9d05-c3a12ed4c2b9.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/f627cb2c-8da5-4508-9d05-c3a12ed4c2b9.mp4&#34; type=&#34;video/mp4&#34;&gt;hollow-knight-keeb-run-hornet-pogos.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;mothwing-cloak&#34;&gt;Mothwing Cloak &lt;a href=&#34;#mothwing-cloak&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I got so lucky  with the finish of hornet, I thought she hit me while healing,&#xA;kinda lost where we were tanked a hit and almost took one last hit again and&#xA;beat her to the final punch.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/d8784c22-2baa-410a-af23-d7ebebaa6608.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/d8784c22-2baa-410a-af23-d7ebebaa6608.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/d8784c22-2baa-410a-af23-d7ebebaa6608.mp4&#34; type=&#34;video/mp4&#34;&gt;hollow-knight-keeb-run-hornet-finish.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/d82dd000-a7b1-401e-8f78-72939a296328.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/d82dd000-a7b1-401e-8f78-72939a296328.jpg&#34; alt=&#34;20250507172106_1.jpg&#34;/ data-glightbox=&#34;description: 20250507172106_1.jpg&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;gruz-mother&#34;&gt;Gruz Mother &lt;a href=&#34;#gruz-mother&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;After completing gruz mother I went to grab my macropad to click the clip&#xA;button when her babies came out, and it was at this moment my son told me I was&#xA;done for, there was no recovering from this.  I was already at 2 hearts, and a&#xA;mistake left me with one.  You can see me fumble for the up key in the clip as&#xA;I get repositioned fully on back on the board.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/0a6ffb43-f416-46e4-9e17-05c3ac9c3429.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/0a6ffb43-f416-46e4-9e17-05c3ac9c3429.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/0a6ffb43-f416-46e4-9e17-05c3ac9c3429.mp4&#34; type=&#34;video/mp4&#34;&gt;hollow-knight-keeb-run-gruz-mother.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Now we have Sly the merchant unlocked and can buy items from him.&lt;/p&gt;&#xA;&lt;h2 id=&#34;city&#34;&gt;City &lt;a href=&#34;#city&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I made it to the city, but on my way, it looks like one of the smokey layers&#xA;were getting put on top of the game instead of layer in behind. I’ve never seen&#xA;this, so I really have no idea what it is.  During the thorny area it was in&#xA;and out and right as I entered the city it locked on top and did not leave.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/f2fe3da0-9078-4292-9fef-9f4efd306d63.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/f2fe3da0-9078-4292-9fef-9f4efd306d63.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;soul-master&#34;&gt;Soul Master &lt;a href=&#34;#soul-master&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I made my way over to the soul master, dying several times along the way to a&#xA;few &lt;a href=&#34;https://hollowknight.fandom.com/wiki/Soul_Twister&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/hollowknight.fandom.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/hollowknight.fandom.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Soul Twisters&lt;/a&gt;, its&#xA;time to battle.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/2d664476-ac45-4461-8e33-43211d493e9e.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/2d664476-ac45-4461-8e33-43211d493e9e.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/2d664476-ac45-4461-8e33-43211d493e9e.mp4&#34; type=&#34;video/mp4&#34;&gt;hollow-knight-keeb-run-soul-meeting-master.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;After beating his second room, (this clip makes him look way too easy as he&#xA;wasn’t targeting me fore some reason at the end), I picked up desolate dive,&#xA;which brings a new key combo to get familiar with down+cast.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/af9df166-33cd-4260-85df-910e8a18116c.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/af9df166-33cd-4260-85df-910e8a18116c.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/af9df166-33cd-4260-85df-910e8a18116c.mp4&#34; type=&#34;video/mp4&#34;&gt;hollow-knight-keeb-run-soul-master-finish.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;moss-knight&#34;&gt;Moss Knight &lt;a href=&#34;#moss-knight&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I took a break for awhile on the game, my son got bored and moved on.  He tends&#xA;to switch out games a lot faster than me.  I came back to it tonight after a&#xA;few months off and just got some geo from the moss knights for awhile.  I got&#xA;this decent clip of clearing them, I’m no pro, but getting better at timing on&#xA;the keeb layout.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/d8571451-7a1e-4997-85eb-b5ce2cfdc209.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/d8571451-7a1e-4997-85eb-b5ce2cfdc209.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/d8571451-7a1e-4997-85eb-b5ce2cfdc209.mp4&#34; type=&#34;video/mp4&#34;&gt;hollow-knight-keeb-moss-knight.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;lumafly-lantern&#34;&gt;Lumafly Lantern &lt;a href=&#34;#lumafly-lantern&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;While I had a lot of geo from the Moss Knights I finished out getting 1800 geo&#xA;to get the lumafly lantern from sly’s shop at dirtmouth.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/2ea5790c-66d7-401d-95c7-c81a2bccb743.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/2ea5790c-66d7-401d-95c7-c81a2bccb743.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/2ea5790c-66d7-401d-95c7-c81a2bccb743.mp4&#34; type=&#34;video/mp4&#34;&gt;hollow-knight-keeb-lumafly-lantern.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;royal-waterway&#34;&gt;Royal Waterway &lt;a href=&#34;#royal-waterway&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I decided to head back to the city of tears and into the royal waterway to&#xA;fight the dung defender and collect Isma’s tear.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/3713bdd1-c645-46c5-85d2-451356383842.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/3713bdd1-c645-46c5-85d2-451356383842.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/3713bdd1-c645-46c5-85d2-451356383842.mp4&#34; type=&#34;video/mp4&#34;&gt;hollow-knight-keeb-royal-waterway-unlock.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/58235f4d-701f-4ddc-a26d-ab5f9e0bdbfc.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/58235f4d-701f-4ddc-a26d-ab5f9e0bdbfc.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/58235f4d-701f-4ddc-a26d-ab5f9e0bdbfc.mp4&#34; type=&#34;video/mp4&#34;&gt;hollow-knight-keeb-royal-waterway-entering.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/bdf1985b-6a32-4bf4-9f9a-d6f814db7136.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/bdf1985b-6a32-4bf4-9f9a-d6f814db7136.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/bdf1985b-6a32-4bf4-9f9a-d6f814db7136.mp4&#34; type=&#34;video/mp4&#34;&gt;hollow-knight-keeb-royal-waterway-bench.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;The Dung Defender battle, great lore with this guy, lots of bouncy movement,&#xA;but overall not too hard of a boss.  He is not very accurate with attacks, so&#xA;you have time to just sit in the corners and heal.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/982091a0-a65a-44a4-aca6-fbffcff9ed90.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/982091a0-a65a-44a4-aca6-fbffcff9ed90.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/982091a0-a65a-44a4-aca6-fbffcff9ed90.mp4&#34; type=&#34;video/mp4&#34;&gt;hollow-knight-keeb-dung-defender.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Once the Dung Defender was defeated, I continued on up to the Kings Station and unlocked it.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/3651c0e1-6d99-4b54-95eb-5b955323a2e9.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/3651c0e1-6d99-4b54-95eb-5b955323a2e9.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/3651c0e1-6d99-4b54-95eb-5b955323a2e9.mp4&#34; type=&#34;video/mp4&#34;&gt;hollow-knight-keeb-kings-station.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;I could not remember where ismas tear was and I ended up all the way down in&#xA;deep nest, the climb out is a bit of a challenge, here I am going right by the&#xA;route you take with crystal dash to get isma’s tear.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/9a4befef-e694-4a3c-8b0e-edd06a3f741c.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/9a4befef-e694-4a3c-8b0e-edd06a3f741c.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/9a4befef-e694-4a3c-8b0e-edd06a3f741c.mp4&#34; type=&#34;video/mp4&#34;&gt;climbing-out-of-deep-nest.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;ismas-tear&#34;&gt;Isma’s Tear &lt;a href=&#34;#ismas-tear&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I managed to find my way through the royal waterway and where you crystal dash&#xA;over to isma’s tear.  This battle took two attempts, because the first I had no&#xA;health left and walked in with two masks.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/4dd7d2cd-7d4a-473e-a483-f8f8512c6442.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/4dd7d2cd-7d4a-473e-a483-f8f8512c6442.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/4dd7d2cd-7d4a-473e-a483-f8f8512c6442.mp4&#34; type=&#34;video/mp4&#34;&gt;hollow-knight-keeb-ismas-tear-battle.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Now the tear coats our shell and allows us to swim through the acid, and we can&#xA;get a lot more places, and some places are just easier to get without precision&#xA;parkour over the acid.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/c6a334a4-d8d3-4742-82ea-3b6e9eaa9923.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/c6a334a4-d8d3-4742-82ea-3b6e9eaa9923.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/c6a334a4-d8d3-4742-82ea-3b6e9eaa9923.mp4&#34; type=&#34;video/mp4&#34;&gt;hollow-knight-keeb-ismas-tear.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;thorny-mask&#34;&gt;Thorny Mask &lt;a href=&#34;#thorny-mask&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I wandered around the world a bit today and found a few small items, nothing of major concequence.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/2b9b5302-7437-4910-a98c-bc96650e353c.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/2b9b5302-7437-4910-a98c-bc96650e353c.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/2b9b5302-7437-4910-a98c-bc96650e353c.mp4&#34; type=&#34;video/mp4&#34;&gt;hollow-knight-keeb-thorny-mask-shard.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/a15c7895-bd25-4238-9634-f58c2590730a.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/a15c7895-bd25-4238-9634-f58c2590730a.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/a15c7895-bd25-4238-9634-f58c2590730a.mp4&#34; type=&#34;video/mp4&#34;&gt;hollow-knight-keeb-spore-shroom.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/d8cdee6e-4627-444a-99a0-b5b35e960dd8.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/d8cdee6e-4627-444a-99a0-b5b35e960dd8.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/d8cdee6e-4627-444a-99a0-b5b35e960dd8.mp4&#34; type=&#34;video/mp4&#34;&gt;hollow-knight-keeb-thorny-wanderers-journal.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;challenging-mantis-lords&#34;&gt;Challenging Mantis Lords &lt;a href=&#34;#challenging-mantis-lords&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It felt like time to challenge the Mantis Lords.  For the reason to prove to&#xA;myself that I am getting better at this layout.&lt;/p&gt;&#xA;&lt;p&gt;I drew my nail and ready for the challenge.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/dfe1c93b-3dd8-4941-8991-7ec8d4b49beb.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/dfe1c93b-3dd8-4941-8991-7ec8d4b49beb.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/dfe1c93b-3dd8-4941-8991-7ec8d4b49beb.mp4&#34; type=&#34;video/mp4&#34;&gt;hollow-knight-keeb-challenging-mantis-lords.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;First try I made it past the first one, and deep into the second one, I think&#xA;If I would have remembered the healing window for them I would have had a shot&#xA;at a first try on them.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/98e34601-2cdd-4a38-98a1-97719b38c843.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/98e34601-2cdd-4a38-98a1-97719b38c843.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/98e34601-2cdd-4a38-98a1-97719b38c843.mp4&#34; type=&#34;video/mp4&#34;&gt;hollow-knight-keeb-mantis-lords-1.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;After three tries I had it.  Maybe its not apples to apples with my first ever&#xA;run years ago on steam deck, but it took months.  I would have about 20 minutes&#xA;a day waiting for kids pickup at school and I would just keep grinding at them&#xA;for what added up to be likely several hours.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/90bb2a30-c781-4dfd-98aa-ed933b24f1e3.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/90bb2a30-c781-4dfd-98aa-ed933b24f1e3.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/90bb2a30-c781-4dfd-98aa-ed933b24f1e3.mp4&#34; type=&#34;video/mp4&#34;&gt;hollow-knight-keeb-defeating-mantis-lords.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;After defeating them I’m let into the treasure room where I get a bench,&#xA;Hallownest seal, a big loot box, and the &lt;a href=&#34;https://hollowknight.fandom.com/wiki/Mark_of_Pride&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/hollowknight.fandom.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/hollowknight.fandom.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mark of&#xA;pride&lt;/a&gt;.  This is actually&#xA;one of my favorite charms as it gives you an extra 25% range to your nail&#xA;attacks.  This opens up the window for pogos and reach attacks without taking&#xA;damage.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/b9af2296-60e9-4d92-989f-1529a59c75a1.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/b9af2296-60e9-4d92-989f-1529a59c75a1.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/b9af2296-60e9-4d92-989f-1529a59c75a1.mp4&#34; type=&#34;video/mp4&#34;&gt;hollow-knight-keeb-mark-of-pride.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ wezterm wezterm</title>
    <id>https://waylonwalker.com/wezterm-wezterm/</id>
    <updated>2025-05-05T15:23:46Z</updated>
    <published>2025-05-05T15:23:46Z</published>
    <link href="https://waylonwalker.com/wezterm-wezterm/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered wezterm by wezterm, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/wezterm/wezterm&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;wezterm&lt;/a&gt; by &lt;a href=&#34;https://github.com/wezterm&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;wezterm&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;A GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>fix feed descriptions</title>
    <id>https://waylonwalker.com/fix-feed-descriptions/</id>
    <updated>2025-05-05T10:32:04Z</updated>
    <published>2025-05-05T10:32:04Z</published>
    <link href="https://waylonwalker.com/fix-feed-descriptions/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I fixed a bug in markata that has been occurring for a few months where the description for posts come out as None if coming from cache, the issue was...</summary>
    <content type="html">&lt;p&gt;Today I fixed a bug in markata that has been occurring for a few months where&#xA;the description for posts come out as None if coming from cache, the issue was&#xA;a pretty simple check and pull properly from cache.  This fixes all the&#xA;descriptions in feeds and metadata on the post.&lt;/p&gt;&#xA;&lt;h2 id=&#34;better-description&#34;&gt;Better description &lt;a href=&#34;#better-description&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;While in there we went ahead and improved our get_description to more&#xA;accurately return plain text without escaped characters, remove cutoff words,&#xA;and add an elipsis if the description cuts off the text.&lt;/p&gt;&#xA;&lt;h2 id=&#34;more-description&#34;&gt;More description &lt;a href=&#34;#more-description&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;While I was there I made longer form posts, &lt;code&gt;til, blog-post&lt;/code&gt; use the super&#xA;description of 500 characters instead of the regular 120 character description.&lt;/p&gt;&#xA;&lt;h2 id=&#34;before&#34;&gt;Before &lt;a href=&#34;#before&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/8e9cf8e3-50ab-4e0a-be76-7241fbfe44c5.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/8e9cf8e3-50ab-4e0a-be76-7241fbfe44c5.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;after&#34;&gt;After &lt;a href=&#34;#after&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/29f96255-a89f-4ec6-b9e7-f61551366264.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/29f96255-a89f-4ec6-b9e7-f61551366264.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ kubero-dev kubero</title>
    <id>https://waylonwalker.com/kubero-dev-kubero/</id>
    <updated>2025-05-04T17:39:16Z</updated>
    <published>2025-05-04T17:39:16Z</published>
    <link href="https://waylonwalker.com/kubero-dev-kubero/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred kubero by kubero-dev. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/kubero-dev/kubero&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kubero&lt;/a&gt; by &lt;a href=&#34;https://github.com/kubero-dev&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kubero-dev&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;A free and &lt;a href=&#34;/self-host/&#34; class=&#34;glossary-term&#34; title=&#34;Self hosting is the act of hosting your own applications and services without using a SAS provider. This is typically done with your own hardware, but there...&#34;&gt;self-hosted&lt;/a&gt; PaaS alternative to Heroku / Netlify / Coolify / Vercel / Dokku / Portainer running on Kubernetes&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>ruff single line import</title>
    <id>https://waylonwalker.com/ruff-single-line-import/</id>
    <updated>2025-05-04T14:23:41Z</updated>
    <published>2025-05-04T14:23:41Z</published>
    <link href="https://waylonwalker.com/ruff-single-line-import/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been using ruff to lint my python code for quite awhile now, I was pretty early to jump on it after release. Some of my projects have had a nice...</summary>
    <content type="html">&lt;p&gt;I’ve been using ruff to lint my python code for quite awhile now, I was pretty&#xA;early to jump on it after release.  Some of my projects have had a nice&#xA;force-single-line setting and some have not.  I dug into the docs and it was&#xA;not clear what I needed to make it work.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ruff&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;select&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;I&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;# you probably want others as well&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ruff&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isort&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;force-single-line&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Turns out I was missing &lt;strong&gt;I&lt;/strong&gt;sort in the select list.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Markata list posts by year</title>
    <id>https://waylonwalker.com/markata-list-posts-by-year/</id>
    <updated>2025-05-01T22:35:47Z</updated>
    <published>2025-05-01T22:35:47Z</published>
    <link href="https://waylonwalker.com/markata-list-posts-by-year/" rel="alternate" type="text/html"></link>
    <summary type="text">I was looking back at my analytics page today and wondered what were my posts about back at the beginning. My blog is managed by markata so I looked at a few...</summary>
    <content type="html">&lt;p&gt;I was looking back at my &lt;a href=&#34;/analytics/&#34; class=&#34;wikilink&#34; data-title=&#34;analytics&#34; data-description=&#34;I&amp;#39;ve been posting on this site since 2016, when the company I worked for went through a large round of layoffs. I was worried about being laid off, so I...&#34; data-date=&#34;2025-01-22&#34; data-preview=&#34;I&amp;#39;ve been posting on this site since 2016, when the company I worked for went through a large round of layoffs. I was worried about being laid off, so I...&#34;&gt;analytics&lt;/a&gt; page today and wondered what were my&#xA;posts about back at the beginning.  My blog is managed by &lt;a href=&#34;/markata/&#34; class=&#34;wikilink&#34; data-title=&#34;markata&#34; data-description=&#34;This post is a work in progress.&#34; data-date=&#34;2024-05-30&#34; data-preview=&#34;This post is a work in progress.&#34;&gt;markata&lt;/a&gt; so I&#xA;looked at a few ways you could pull those posts up.  Turns out it’s pretty&#xA;simple to do, use the markata map with a filter.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;markata&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Markata&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title, slug, date&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;date.year==2016&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sort&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;date&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;the filter is python eval that should evaluate to a boolean, all of the&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;attributes of the post are available to filter on.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h3 id=&#34;result&#34;&gt;Result &lt;a href=&#34;#result&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;⭐ jupyterlab jupyterlab&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;jupyterlab-jupyterlab&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2016&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;⭐ nickhould tidy-data-python&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;nickhould-tidy-data-python&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2016&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;9&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;⭐ mikeckennedy write-pythonic-code-demos&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;mikeckennedy-write-pythonic-code-demos&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2016&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;⭐ mikeckennedy write-pythonic-code-for-better-data-science-webcast&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;mikeckennedy-write-pythonic-code-for-better-data-science-webcast&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2016&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;⭐ rajshah4 dlgroup&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;rajshah4-dlgroup&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2016&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;⭐ pandas-dev pandas&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pandas-dev-pandas&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2016&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You could use the &lt;code&gt;list&lt;/code&gt; command as well right within your shell and the same&#xA;map and filters work.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;⬢ &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;devtainer-0.1.3&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; ❯ markata list --map title --filter&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;date.year==2016&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;22:35:06&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; 2088/2145 posts skipped                                                                       skip.py:36&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           57/2145 posts not skipped                                                                     skip.py:37&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;⭐ pandas-dev pandas&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;⭐ rajshah4 dlgroup&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;⭐ mikeckennedy write-pythonic-code-for-better-data-science-webcast&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;⭐ mikeckennedy write-pythonic-code-demos&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;⭐ nickhould tidy-data-python&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;⭐ jupyterlab jupyterlab&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You could also do it with jin right inside of a markdown post using the&#xA;&lt;a href=&#34;https://markata.dev/markata/plugins/jinja-md/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/markata.dev.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/markata.dev.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jinja_md&lt;/a&gt; plugin.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{% raw %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{% for title, slug, date in markata.map(&amp;#39;title, slug, date&amp;#39;, filter=&amp;#39;date.year==2016&amp;#39;, sort=&amp;#39;date&amp;#39;) %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; [&lt;span class=&#34;nt&#34;&gt;{{title}}&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;{{slug}}&lt;/span&gt;) - {{date}}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{% endfor %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{% endraw %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;You do have to `jinja: true` in the frontmatter of the post.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/div&gt;&#xA;&lt;h3 id=&#34;result-1&#34;&gt;Result &lt;a href=&#34;#result-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;{% for title, slug, date in markata.map(’title, slug, date’, filter=‘date.year==2016’, sort=‘date’) %}&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;%7B%7Bslug%7D%7D&#34;&gt;{{title}}&lt;/a&gt; - {{date}}&#xA;{% endfor %}&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ wesbos bracket.engineer</title>
    <id>https://waylonwalker.com/wesbos-bracket-engineer/</id>
    <updated>2025-05-01T14:02:55Z</updated>
    <published>2025-05-01T14:02:55Z</published>
    <link href="https://waylonwalker.com/wesbos-bracket-engineer/" rel="alternate" type="text/html"></link>
    <summary type="text">bracket.engineer by wesbos is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/wesbos/bracket.engineer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;bracket.engineer&lt;/a&gt; by &lt;a href=&#34;https://github.com/wesbos&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;wesbos&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;Generate 3D printable power brick brackets.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>portal-platformer-devlog-1</title>
    <id>https://waylonwalker.com/portal-platformer-devlog-1/</id>
    <updated>2025-04-28T19:56:58Z</updated>
    <published>2025-04-28T19:56:58Z</published>
    <link href="https://waylonwalker.com/portal-platformer-devlog-1/" rel="alternate" type="text/html"></link>
    <summary type="text">Here is the current state of my platformer yet to really be named, I want to make something in between hollow knight and portal.</summary>
    <content type="html">&lt;p&gt;Here is the current state of my platformer yet to really be named, I want to&#xA;make something in between hollow knight and portal.&lt;/p&gt;&#xA;&lt;h2 id=&#34;starting&#34;&gt;Starting &lt;a href=&#34;#starting&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I made one once in make code arcace on a pybadge.  It was quick and dirty, but&#xA;fun to work on.  It had the basic of blocks that I could move, blocks i could&#xA;put a portal onto, and a goal for each level.  Some levels you can just walk&#xA;through and some levels required you to really think about where to place the&#xA;portal.&lt;/p&gt;&#xA;&lt;h2 id=&#34;history&#34;&gt;History &lt;a href=&#34;#history&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;So this version of the game is a least 2 years in the making, I open it every&#xA;few months give it a day or two and move on.  Its mostly something that I work&#xA;on with my son.  He really likes to jump around on projects so its hard to make&#xA;real progress on something, but we are hitting an age where he is able to come&#xA;back to projects a little better.&lt;/p&gt;&#xA;&lt;p&gt;All of this is built in python, and mostly before &lt;a href=&#34;/vibe-coding/&#34; class=&#34;glossary-term&#34; title=&#34;A coding style popularized in 2025. It is the act of using LLMs to generate code for an application, but the author never looks at the output. The author...&#34;&gt;vibe coding&lt;/a&gt; was a thing, its&#xA;mostly me trying to get out ideas as quick as my son is spitting out the the&#xA;next idea.&lt;/p&gt;&#xA;&lt;h2 id=&#34;coyote&#34;&gt;Coyote &lt;a href=&#34;#coyote&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It includes a few frames of coyote so it feels a bit more like most games.&lt;/p&gt;&#xA;&lt;p&gt;!! Note&#xA;If you are unfamiliar with the term coyote in platformers it allows you to&#xA;jump for a few frames after falling off a platform, like wiley coyoyte in&#xA;Luney Toons.&lt;/p&gt;&#xA;&lt;h2 id=&#34;wall-slidejump&#34;&gt;Wall slide/jump &lt;a href=&#34;#wall-slidejump&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Wall slide and jump work, but so is wall climb as an unintended side effect.&#xA;When you are touching a wall, your fall speed is halved.&lt;/p&gt;&#xA;&lt;h2 id=&#34;levels-and-loader&#34;&gt;Levels and loader &lt;a href=&#34;#levels-and-loader&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There is a crude level loader that loads json levels with pydantic.  No editor&#xA;yet, just hand editing levels with json.&lt;/p&gt;&#xA;&lt;h2 id=&#34;checkpoints&#34;&gt;Checkpoints &lt;a href=&#34;#checkpoints&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It makes checkpoints, when you die, you go back to your last checkpoint.&#xA;Checkpoints can be invisible, and have a link that turns them into a door to&#xA;another level.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/66c5b984-5450-48ee-9978-00fec4815807.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/66c5b984-5450-48ee-9978-00fec4815807.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/66c5b984-5450-48ee-9978-00fec4815807.mp4&#34; type=&#34;video/mp4&#34;&gt;66c5b984-5450-48ee-9978-00fec4815807.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;no-art&#34;&gt;no art &lt;a href=&#34;#no-art&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There is no art yet, just the skin of a platformer, levels, checkpoints, and&#xA;coyote.  No portals, but there is a pointer with a janky box that covers my&#xA;lighting.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ block goose</title>
    <id>https://waylonwalker.com/block-goose/</id>
    <updated>2025-04-28T01:37:03Z</updated>
    <published>2025-04-28T01:37:03Z</published>
    <link href="https://waylonwalker.com/block-goose/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out goose by block. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/block/goose&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;goose&lt;/a&gt; by &lt;a href=&#34;https://github.com/block&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;block&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;an open source, extensible AI agent that goes beyond code suggestions - install, execute, edit, and test with any LLM&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ manusa kubernetes-mcp-server</title>
    <id>https://waylonwalker.com/manusa-kubernetes-mcp-server/</id>
    <updated>2025-04-28T01:36:45Z</updated>
    <published>2025-04-28T01:36:45Z</published>
    <link href="https://waylonwalker.com/manusa-kubernetes-mcp-server/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out kubernetes-mcp-server by manusa. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/manusa/kubernetes-mcp-server&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kubernetes-mcp-server&lt;/a&gt; by &lt;a href=&#34;https://github.com/manusa&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;manusa&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;Model Context Protocol (MCP) server for Kubernetes and OpenShift&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ containers kubernetes-mcp-server</title>
    <id>https://waylonwalker.com/containers-kubernetes-mcp-server/</id>
    <updated>2025-04-28T01:36:45Z</updated>
    <published>2025-04-28T01:36:45Z</published>
    <link href="https://waylonwalker.com/containers-kubernetes-mcp-server/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? kubernetes-mcp-server by containers.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/containers/kubernetes-mcp-server&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kubernetes-mcp-server&lt;/a&gt; by &lt;a href=&#34;https://github.com/containers&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;containers&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Model Context Protocol (MCP) server for Kubernetes and OpenShift&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ punkpeye awesome-mcp-servers</title>
    <id>https://waylonwalker.com/punkpeye-awesome-mcp-servers/</id>
    <updated>2025-04-28T01:36:29Z</updated>
    <published>2025-04-28T01:36:29Z</published>
    <link href="https://waylonwalker.com/punkpeye-awesome-mcp-servers/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out punkpeye and their project awesome-mcp-servers.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/punkpeye&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;punkpeye&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/punkpeye/awesome-mcp-servers&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;awesome-mcp-servers&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A collection of MCP servers.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ mozilla-ai any-agent</title>
    <id>https://waylonwalker.com/mozilla-ai-any-agent/</id>
    <updated>2025-04-28T01:36:25Z</updated>
    <published>2025-04-28T01:36:25Z</published>
    <link href="https://waylonwalker.com/mozilla-ai-any-agent/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about any-agent, an amazing project by mozilla-ai. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/mozilla-ai/any-agent&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;any-agent&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/mozilla-ai&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mozilla-ai&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;A single interface to build and evaluate different agent frameworks&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ dtnewman zev</title>
    <id>https://waylonwalker.com/dtnewman-zev/</id>
    <updated>2025-04-25T13:40:11Z</updated>
    <published>2025-04-25T13:40:11Z</published>
    <link href="https://waylonwalker.com/dtnewman-zev/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out dtnewman and their project zev.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/dtnewman&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dtnewman&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/dtnewman/zev&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;zev&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A simple CLI tool to help you remember terminal commands&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ stakater Reloader</title>
    <id>https://waylonwalker.com/stakater-reloader/</id>
    <updated>2025-04-24T02:03:36Z</updated>
    <published>2025-04-24T02:03:36Z</published>
    <link href="https://waylonwalker.com/stakater-reloader/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? Reloader by stakater.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/stakater/Reloader&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Reloader&lt;/a&gt; by &lt;a href=&#34;https://github.com/stakater&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;stakater&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A Kubernetes controller to watch changes in ConfigMap and Secrets and do rolling upgrades on Pods with their associated Deployment, StatefulSet, DaemonSet and DeploymentConfig – [✩Star] if you’re using it!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ublue-os bazzite-arch</title>
    <id>https://waylonwalker.com/ublue-os-bazzite-arch/</id>
    <updated>2025-04-22T12:59:37Z</updated>
    <published>2025-04-22T12:59:37Z</published>
    <link href="https://waylonwalker.com/ublue-os-bazzite-arch/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by bazzite-arch from ublue-os.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/ublue-os/bazzite-arch&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;bazzite-arch&lt;/a&gt; from &lt;a href=&#34;https://github.com/ublue-os&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ublue-os&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A ready-to-game Arch Linux based OCI designed for use exclusively in distrobox.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ublue-os arch-distrobox</title>
    <id>https://waylonwalker.com/ublue-os-arch-distrobox/</id>
    <updated>2025-04-22T12:59:35Z</updated>
    <published>2025-04-22T12:59:35Z</published>
    <link href="https://waylonwalker.com/ublue-os-arch-distrobox/" rel="alternate" type="text/html"></link>
    <summary type="text">ublue-os has done a fantastic job with arch-distrobox. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/ublue-os&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ublue-os&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/ublue-os/arch-distrobox&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;arch-distrobox&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;An Arch Linux OCI meant for use exclusively in Distrobox&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ReznoRMichael hollow-knight-completion-check</title>
    <id>https://waylonwalker.com/reznormichael-hollow-knight-completion-check/</id>
    <updated>2025-04-20T16:28:11Z</updated>
    <published>2025-04-20T16:28:11Z</published>
    <link href="https://waylonwalker.com/reznormichael-hollow-knight-completion-check/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out ReznoRMichael and their project hollow-knight-completion-check.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/ReznoRMichael&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ReznoRMichael&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/ReznoRMichael/hollow-knight-completion-check&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;hollow-knight-completion-check&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;App for reading and analyzing a Hollow Knight save file. Shows what remains to do for full 112% Game Completion, Achievements, Hunter’s Journal, Collectibles, True Completion %. Includes a self-designed Hint system.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>backup distrobox image</title>
    <id>https://waylonwalker.com/backup-distrobox-image/</id>
    <updated>2025-04-09T17:35:50Z</updated>
    <published>2025-04-09T17:35:50Z</published>
    <link href="https://waylonwalker.com/backup-distrobox-image/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I&#39;m upgrading my distrobox, but don&#39;t want to end up in a situation where I can&#39;t get anything done becauase I work out of my distrobox.</summary>
    <content type="html">&lt;p&gt;Today I’m upgrading my distrobox, but don’t want to end up in a situation where&#xA;I can’t get anything done becauase I work out of my distrobox.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;distrobox ls&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;distrobox stop devtainer&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;distrobox create --clone devtainer --name devtainer-20250409&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;distrobox enter devtainer&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ adrianlopezroche fdupes</title>
    <id>https://waylonwalker.com/adrianlopezroche-fdupes/</id>
    <updated>2025-04-09T12:55:41Z</updated>
    <published>2025-04-09T12:55:41Z</published>
    <link href="https://waylonwalker.com/adrianlopezroche-fdupes/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about fdupes, an amazing project by adrianlopezroche. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/adrianlopezroche/fdupes&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fdupes&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/adrianlopezroche&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;adrianlopezroche&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;FDUPES is a program for identifying or deleting duplicate files residing within specified directories.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Changing k8s Storage Class - Migration Job</title>
    <id>https://waylonwalker.com/changing-k8s-storage-class-migration-job/</id>
    <updated>2025-04-04T09:57:50Z</updated>
    <published>2025-04-04T09:57:50Z</published>
    <link href="https://waylonwalker.com/changing-k8s-storage-class-migration-job/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m setting up longhorn in my homelab, and I ran into an issue where I initially setup some pvcs under longhorn, and later realized that to get longhorn to...</summary>
    <content type="html">&lt;p&gt;I’m setting up longhorn in my &lt;a href=&#34;/homelab/&#34; class=&#34;glossary-term&#34; title=&#34;A place to self host applications. For me this is primarily self built web applications, and applications for sharing files with my family. Techno Tim has a...&#34;&gt;homelab&lt;/a&gt;, and I ran into an issue where I&#xA;initially setup some pvcs under longhorn, and later realized that to get&#xA;longhorn to snapshot and backup I needed to hand edit volumes after the fact or&#xA;change storage class.  I’m all in on gitops so option 1 was not an option.  So&#xA;changing storageclass it is.&lt;/p&gt;&#xA;&lt;p&gt;Now the issue is that you CANNOT mutate storageclass on a provisioned pvc, it&#xA;is an immutable attribute.&lt;/p&gt;&#xA;&lt;h2 id=&#34;migration-job&#34;&gt;Migration Job &lt;a href=&#34;#migration-job&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This migration job will create a new pvc with the new storageclass and move the&#xA;data from the old pvc to the new pvc.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Existing Pods&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; This migration job will not work if you have a pod using the old pvc.  You&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;will need to shutdown the pod and delete it.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# old pvc with longhorn storageclass&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;apiVersion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;v1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;kind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;PersistentVolumeClaim&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;site-pvc-longhorn&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;namespace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;waylonwalker-com&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;storageClassName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;longhorn-backup&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;accessModes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;ReadWriteOnce&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;resources&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;requests&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;storage&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;5Gi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# new pvc with longhorn-backup storageclass&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;apiVersion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;v1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;kind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;PersistentVolumeClaim&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;site-pvc-longhorn-backup&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;namespace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;waylonwalker-com&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;storageClassName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;longhorn-backup&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;accessModes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;ReadWriteOnce&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;resources&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;requests&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;storage&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;5Gi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;---&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# migration job to move the data to the new pvc&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;apiVersion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;batch/v1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;kind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Job&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pvc-migration&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;namespace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;waylonwalker-com&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;containers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pvc-migration&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;ubuntu:22.04&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/bin/bash&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;-c&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sd&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;            echo &amp;#34;Starting migration...&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;            cd /data&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;            cp -av source/. destination/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;            echo &amp;#34;Migration complete!&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumeMounts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;source-vol&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;mountPath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;/data/source&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;dest-vol&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;mountPath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;/data/destination&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;restartPolicy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Never&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;source-vol&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;persistentVolumeClaim&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;claimName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;site-pvc-longhorn&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;dest-vol&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;persistentVolumeClaim&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;claimName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;site-pvc-longhorn-backup&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Apply the manifests and wait for the job to complete.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl apply -f pvc-migration.yaml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;cleanup&#34;&gt;Cleanup &lt;a href=&#34;#cleanup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I had chatgpt create me a script to help me find what is using the pvc so that&#xA;it can be deleted.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;NAMESPACE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;waylonwalker-com&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PVC_NAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;site-pvc-longhorn-new&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;⏳ Checking if PVC exists...&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl get pvc &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PVC_NAME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$NAMESPACE&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;✅ PVC already deleted.&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;🔍 Describe PVC...&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl describe pvc &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PVC_NAME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$NAMESPACE&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -e &lt;span class=&#34;s2&#34;&gt;&amp;#34;\n🔗 Checking if any pod is using this PVC...&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl get pods -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$NAMESPACE&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; -o json &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; jq -r &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  --arg PVC &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PVC_NAME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;.items[] | select(.spec.volumes[].persistentVolumeClaim.claimName == $PVC) | .metadata.name&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -e &lt;span class=&#34;s2&#34;&gt;&amp;#34;\n🧹 Checking finalizers...&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl get pvc &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PVC_NAME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$NAMESPACE&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; -o json &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; jq &lt;span class=&#34;s1&#34;&gt;&amp;#39;.metadata.finalizers&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -e &lt;span class=&#34;s2&#34;&gt;&amp;#34;\n🔎 Checking associated VolumeAttachment...&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PV_NAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;kubectl get pvc &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PVC_NAME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$NAMESPACE&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; -o &lt;span class=&#34;nv&#34;&gt;jsonpath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;{.spec.volumeName}&amp;#39;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;🔗 PVC is bound to PV: &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PV_NAME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl get volumeattachment -A -o json &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; jq &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  --arg PV &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PV_NAME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;.items[] | select(.spec.source.persistentVolumeName == $PV) | {name: .metadata.name, node: .spec.nodeName, attached: .status.attached}&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -e &lt;span class=&#34;s2&#34;&gt;&amp;#34;\n🚀 Done.&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I had still had cronjob pods completed, so I had to delete them first.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;🔗 Checking &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; any pod is using this PVC...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pvc-migration-ndv92&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;waylonwalker-com-cronjob-29057840-8s92p&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;waylonwalker-com-cronjob-29057850-4rvm9&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;waylonwalker-com-cronjob-29057860-6g89j&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl delete pod pvc-migration-ndv92 -n waylonwalker-com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl delete pod waylonwalker-com-cronjob-29057840-8s92p -n waylonwalker-com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl delete pod waylonwalker-com-cronjob-29057850-4rvm9 -n waylonwalker-com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl delete pod waylonwalker-com-cronjob-29057860-6g89j -n waylonwalker-com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>homelab drive ids</title>
    <id>https://waylonwalker.com/homelab-drive-ids/</id>
    <updated>2025-03-26T11:22:07Z</updated>
    <published>2025-03-26T11:22:07Z</published>
    <link href="https://waylonwalker.com/homelab-drive-ids/" rel="alternate" type="text/html"></link>
    <summary type="text">Drive Bay 1 ata-ST4000VN008-2DR166_ZDHBZSWZ</summary>
    <content type="html">&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls -l /dev/disk/by-id/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Drive Bay 1&#xA;ata-ST4000VN008-2DR166_ZDHBZSWZ&lt;/p&gt;&#xA;&lt;p&gt;+————————————————————————-+&#xA;| [ Power]  [ Reset ]                                                     |&#xA;+————————————————————————-+&#xA;| [ BAY 5 ]  3TB WD30EFRX WMC4N0D3J9R7 ext4 /mnt/sdf4                     |&#xA;+————————————————————————-+&#xA;| [ BAY 4 ]  14TB EXOS ZTM09R9N zfs main pool mirror /mnt/main            |&#xA;+————————————————————————-+&#xA;| [ BAY 3 ]  14TB EXOS ZTM0AALS zfs main pool mirror /mnt/main            |&#xA;+——————————————-+&#xA;| [ BAY 2 ]  4TB IRONWOLF ZDHBZV3N zfs tank pool mirror /mnt/tank         |&#xA;+————————————————————————-+&#xA;| [ BAY 1 ]  4TB IRONWOLF ZDHBZSWZ zfs tank pool mirror /mnt/tank         |&#xA;+————————————————————————-+&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Ramilito kubectl.nvim</title>
    <id>https://waylonwalker.com/ramilito-kubectl-nvim/</id>
    <updated>2025-03-25T19:16:43Z</updated>
    <published>2025-03-25T19:16:43Z</published>
    <link href="https://waylonwalker.com/ramilito-kubectl-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered kubectl.nvim by Ramilito, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/Ramilito/kubectl.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kubectl.nvim&lt;/a&gt; by &lt;a href=&#34;https://github.com/Ramilito&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Ramilito&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;⎈ Streamline your Kubernetes management within Neovim—control and monitor your cluster seamlessly, all without leaving your coding environment.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ xpipe-io xpipe-webtop</title>
    <id>https://waylonwalker.com/xpipe-io-xpipe-webtop/</id>
    <updated>2025-03-20T14:05:37Z</updated>
    <published>2025-03-20T14:05:37Z</published>
    <link href="https://waylonwalker.com/xpipe-io-xpipe-webtop/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on xpipe-webtop, created by xpipe-io.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/xpipe-io/xpipe-webtop&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;xpipe-webtop&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/xpipe-io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;xpipe-io&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A containerized web-based desktop environment for XPipe&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ xpipe-io xpipe</title>
    <id>https://waylonwalker.com/xpipe-io-xpipe/</id>
    <updated>2025-03-17T23:00:55Z</updated>
    <published>2025-03-17T23:00:55Z</published>
    <link href="https://waylonwalker.com/xpipe-io-xpipe/" rel="alternate" type="text/html"></link>
    <summary type="text">xpipe by xpipe-io is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/xpipe-io/xpipe&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;xpipe&lt;/a&gt; by &lt;a href=&#34;https://github.com/xpipe-io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;xpipe-io&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;Access your entire server infrastructure from your local desktop&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Use pbpaste for clean shell history</title>
    <id>https://waylonwalker.com/use-pbpaste-for-clean-shell-history/</id>
    <updated>2025-03-17T12:00:00Z</updated>
    <published>2025-03-17T12:00:00Z</published>
    <link href="https://waylonwalker.com/use-pbpaste-for-clean-shell-history/" rel="alternate" type="text/html"></link>
    <summary type="text">Using for command substitution keeps sensitive or long URLs out of your shell history. Instead of typing , copy the URL to clipboard and run . This prevents...</summary>
    <content type="html">&lt;p&gt;Using &lt;code&gt;pbpaste&lt;/code&gt; for command substitution keeps sensitive or long URLs out of&#xA;your shell history. Instead of typing &lt;code&gt;git clone https://github.com/user/repo-with-long-name.git&lt;/code&gt;, copy the URL to clipboard and&#xA;run &lt;code&gt;git clone &amp;#34;$(pbpaste)&amp;#34;&lt;/code&gt;. This prevents the URL from appearing in&#xA;&lt;code&gt;~/.bash_history&lt;/code&gt; or &lt;code&gt;~/.zsh_history&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;To get pbpaste working on both Xorg and Wayland, add this to your shell config:&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;command&lt;/span&gt; -v wl-copy&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;pbcopy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;wl-copy&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    pbpaste&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt; wl-paste&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;command&lt;/span&gt; -v xclip&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;pbcopy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;xclip -selection clipboard&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    pbpaste&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt; xclip -selection clipboard -o&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The function approach (instead of alias) enables command substitution, while&#xA;the quotes around &lt;code&gt;$(pbpaste)&lt;/code&gt; handle spaces and special characters safely.&lt;/p&gt;&#xA;&lt;p&gt;Now you can use it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;pbpaste&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;More importantly secrets can stay out of your history.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;GITHUB_TOKEN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;pbpaste&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;AWS_ACCESS_KEY_ID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;pbpaste&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;AWS_SECRET_ACCESS_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;pbpaste&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;DATABASE_URL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;pbpaste&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>THPS 1 Downtown Gaps</title>
    <id>https://waylonwalker.com/thps-1-downtown-gaps/</id>
    <updated>2025-03-15T18:46:01Z</updated>
    <published>2025-03-15T18:46:01Z</published>
    <link href="https://waylonwalker.com/thps-1-downtown-gaps/" rel="alternate" type="text/html"></link>
    <summary type="text">Previously thps-1-skate-park-gaps</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/74936acc-5cfb-430a-b31b-d8f9888b437d.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/74936acc-5cfb-430a-b31b-d8f9888b437d.png&#34; alt=&#34;screenshot-2025-02-28T00-44-32-696Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-02-28T00-44-32-696Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/bb603b2c-e1be-4d8f-80e3-47c2715a2643.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/bb603b2c-e1be-4d8f-80e3-47c2715a2643.png&#34; alt=&#34;screenshot-2025-02-28T00-45-05-468Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-02-28T00-45-05-468Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Previously &lt;a href=&#34;/thps-1-skate-park-gaps/&#34; class=&#34;wikilink&#34; data-title=&#34;THPS 1 Skate Park Gaps&#34; data-description=&#34;Previously thps-1-mall-gaps Next thps-1-downtown-gaps&#34; data-date=&#34;2025-03-08&#34; data-preview=&#34;Previously thps-1-mall-gaps Next thps-1-downtown-gaps&#34;&gt;THPS 1 Skate Park Gaps&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;big-ass&#34;&gt;Big Ass &lt;a href=&#34;#big-ass&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/c9020f68-1398-468b-8235-235be767f89d.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/c9020f68-1398-468b-8235-235be767f89d.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/c9020f68-1398-468b-8235-235be767f89d.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-5-BigAss.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;billboard-grind&#34;&gt;Billboard Grind &lt;a href=&#34;#billboard-grind&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/34593c9a-ca7d-435f-b1df-cd23081d13e9.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/34593c9a-ca7d-435f-b1df-cd23081d13e9.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/34593c9a-ca7d-435f-b1df-cd23081d13e9.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-5-BillboardGrind.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;bs-gap&#34;&gt;BS Gap &lt;a href=&#34;#bs-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/5521048b-9929-4153-994c-5abc7e88fc2a.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/5521048b-9929-4153-994c-5abc7e88fc2a.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/5521048b-9929-4153-994c-5abc7e88fc2a.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-5-BSGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;bs-grind&#34;&gt;BS Grind &lt;a href=&#34;#bs-grind&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/737d36ef-323c-4bf2-8294-cd962d0c5f47.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/737d36ef-323c-4bf2-8294-cd962d0c5f47.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/737d36ef-323c-4bf2-8294-cd962d0c5f47.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-5-BSGrind.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;burly-deck-gap&#34;&gt;Burly Deck Gap &lt;a href=&#34;#burly-deck-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/edcb7767-f6d9-4ce0-b6f3-07d5ceb82bbc.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/edcb7767-f6d9-4ce0-b6f3-07d5ceb82bbc.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/edcb7767-f6d9-4ce0-b6f3-07d5ceb82bbc.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-5-BurlyDeckGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;car-ollie&#34;&gt;Car Ollie &lt;a href=&#34;#car-ollie&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/e9a91ddf-318c-4e10-9268-b41c607ff8e8.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/e9a91ddf-318c-4e10-9268-b41c607ff8e8.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/e9a91ddf-318c-4e10-9268-b41c607ff8e8.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-5-CarOllie.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/5b813fb2-8b22-4129-a01e-3a1f9b7fcb3e.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/5b813fb2-8b22-4129-a01e-3a1f9b7fcb3e.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/5b813fb2-8b22-4129-a01e-3a1f9b7fcb3e.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-5-CarPlant.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;cheesy-deck-gap&#34;&gt;Cheesy Deck Gap &lt;a href=&#34;#cheesy-deck-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/c17b7db0-77b4-4769-af36-640070325846.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/c17b7db0-77b4-4769-af36-640070325846.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/c17b7db0-77b4-4769-af36-640070325846.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-5-CheesyDeckGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;death-grind&#34;&gt;Death Grind &lt;a href=&#34;#death-grind&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/af8da429-0ac1-469e-97fd-37971ad0ba79.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/af8da429-0ac1-469e-97fd-37971ad0ba79.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/af8da429-0ac1-469e-97fd-37971ad0ba79.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-5-DeathGrind.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;deck-gap&#34;&gt;Deck Gap &lt;a href=&#34;#deck-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/95ec787a-6520-4868-ae8c-b2953a2a1551.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/95ec787a-6520-4868-ae8c-b2953a2a1551.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/95ec787a-6520-4868-ae8c-b2953a2a1551.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-5-DeckGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;dirty-rail&#34;&gt;Dirty Rail &lt;a href=&#34;#dirty-rail&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/16028649-1e78-4a5a-a88b-f143eac6b538.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/16028649-1e78-4a5a-a88b-f143eac6b538.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/16028649-1e78-4a5a-a88b-f143eac6b538.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-5-DirtyRail.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;glass-gap&#34;&gt;Glass Gap &lt;a href=&#34;#glass-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/4138f100-9ec0-4e38-b328-20d3a2fd41b7.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/4138f100-9ec0-4e38-b328-20d3a2fd41b7.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/4138f100-9ec0-4e38-b328-20d3a2fd41b7.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-5-GlassGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;kicker-gap&#34;&gt;Kicker Gap &lt;a href=&#34;#kicker-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/4b0a0af2-24bd-4011-8c2c-536ef63fd63c.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/4b0a0af2-24bd-4011-8c2c-536ef63fd63c.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/4b0a0af2-24bd-4011-8c2c-536ef63fd63c.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-5-KickerGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;kicker-2-edge&#34;&gt;Kicker 2 Edge &lt;a href=&#34;#kicker-2-edge&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/16e84f08-73ba-4cc3-ba51-90dceb35e91d.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/16e84f08-73ba-4cc3-ba51-90dceb35e91d.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/16e84f08-73ba-4cc3-ba51-90dceb35e91d.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-5-Kicker2Edge.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;kicker-2-street&#34;&gt;Kicker 2 Street &lt;a href=&#34;#kicker-2-street&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/a3c73018-c602-4bd0-9c96-7e81b128889b.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/a3c73018-c602-4bd0-9c96-7e81b128889b.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/a3c73018-c602-4bd0-9c96-7e81b128889b.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-5-Kicker2Street.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;rail-2-rail&#34;&gt;Rail 2 Rail &lt;a href=&#34;#rail-2-rail&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/b07d1500-0e3a-4c0f-b98d-27d6a75ca305.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/b07d1500-0e3a-4c0f-b98d-27d6a75ca305.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/b07d1500-0e3a-4c0f-b98d-27d6a75ca305.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-5-Rail2Rail.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;roof-2-roof&#34;&gt;Roof 2 Roof &lt;a href=&#34;#roof-2-roof&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/fdcd25cd-a73a-49c4-bf06-e2058eb7cecb.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/fdcd25cd-a73a-49c4-bf06-e2058eb7cecb.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/fdcd25cd-a73a-49c4-bf06-e2058eb7cecb.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-5-Roof2Roof.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;secret-tunnel-entrance&#34;&gt;Secret Tunnel Entrance &lt;a href=&#34;#secret-tunnel-entrance&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/06f4bcef-ec5a-4480-80e8-8ea8423f5b28.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/06f4bcef-ec5a-4480-80e8-8ea8423f5b28.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/06f4bcef-ec5a-4480-80e8-8ea8423f5b28.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-5-SecretTunnelEntrance.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;sucky-room-gap&#34;&gt;Sucky Room Gap &lt;a href=&#34;#sucky-room-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/352402c1-943b-4588-9001-e79a8e25f45e.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/352402c1-943b-4588-9001-e79a8e25f45e.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/352402c1-943b-4588-9001-e79a8e25f45e.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-5-SuckyRoomGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;t-2-t-gap&#34;&gt;T 2 T Gap &lt;a href=&#34;#t-2-t-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/3ce8d7d9-93ea-4b9b-b25b-9b0436b4c664.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/3ce8d7d9-93ea-4b9b-b25b-9b0436b4c664.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/3ce8d7d9-93ea-4b9b-b25b-9b0436b4c664.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-5-T2TGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;transfer&#34;&gt;Transfer &lt;a href=&#34;#transfer&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/c58bb5c0-bd71-4e0a-9cf4-35ee09be7fef.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/c58bb5c0-bd71-4e0a-9cf4-35ee09be7fef.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/c58bb5c0-bd71-4e0a-9cf4-35ee09be7fef.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-5-Transfer.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;truck-gap&#34;&gt;Truck Gap &lt;a href=&#34;#truck-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/75f35652-a4d5-45bf-a5a6-3f9c7d60556e.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/75f35652-a4d5-45bf-a5a6-3f9c7d60556e.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/75f35652-a4d5-45bf-a5a6-3f9c7d60556e.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-5-TruckGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;tunnel-gap&#34;&gt;Tunnel Gap &lt;a href=&#34;#tunnel-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/e687f094-8b2e-4bd6-b393-bf856b8c6e82.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/e687f094-8b2e-4bd6-b393-bf856b8c6e82.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/e687f094-8b2e-4bd6-b393-bf856b8c6e82.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-5-TunnelGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;wimpy-gap&#34;&gt;Wimpy Gap &lt;a href=&#34;#wimpy-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/9b6b2e48-51b2-415a-8058-d9f9f325535f.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/9b6b2e48-51b2-415a-8058-d9f9f325535f.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/9b6b2e48-51b2-415a-8058-d9f9f325535f.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-5-WimpyGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;mechanic-gap&#34;&gt;Mechanic Gap &lt;a href=&#34;#mechanic-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/8a35d3a0-0566-4d4e-a641-7bc1cd950b99.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/8a35d3a0-0566-4d4e-a641-7bc1cd950b99.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/8a35d3a0-0566-4d4e-a641-7bc1cd950b99.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-5-MechanicGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;box-office-gap&#34;&gt;Box Office Gap &lt;a href=&#34;#box-office-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/9b8a3021-8cb7-42b6-b073-f5512bfa3f5f.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/9b8a3021-8cb7-42b6-b073-f5512bfa3f5f.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/9b8a3021-8cb7-42b6-b073-f5512bfa3f5f.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-5-BoxOfficeGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;skyway-gap&#34;&gt;Skyway Gap &lt;a href=&#34;#skyway-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/af7ec993-5409-401b-9c91-5265530dab47.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/af7ec993-5409-401b-9c91-5265530dab47.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/af7ec993-5409-401b-9c91-5265530dab47.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-5-SkywayGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;super-skyway-gap&#34;&gt;Super Skyway Gap &lt;a href=&#34;#super-skyway-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/d3e05a69-8295-46b6-ae99-a7dca9021306.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/d3e05a69-8295-46b6-ae99-a7dca9021306.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/d3e05a69-8295-46b6-ae99-a7dca9021306.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-5-SuperSkywayGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Y2Z monolith</title>
    <id>https://waylonwalker.com/y2z-monolith/</id>
    <updated>2025-03-11T14:18:31Z</updated>
    <published>2025-03-11T14:18:31Z</published>
    <link href="https://waylonwalker.com/y2z-monolith/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred monolith by Y2Z. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/Y2Z/monolith&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;monolith&lt;/a&gt; by &lt;a href=&#34;https://github.com/Y2Z&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Y2Z&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;⬛️ CLI tool and library for saving complete web pages as a single &lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;HTML&lt;/a&gt; file&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>THPS 1 Skate Park Gaps</title>
    <id>https://waylonwalker.com/thps-1-skate-park-gaps/</id>
    <updated>2025-03-08T14:36:23Z</updated>
    <published>2025-03-08T14:36:23Z</published>
    <link href="https://waylonwalker.com/thps-1-skate-park-gaps/" rel="alternate" type="text/html"></link>
    <summary type="text">Previously thps-1-mall-gaps Next thps-1-downtown-gaps</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/75b658de-1c88-4147-b06b-5c0cc0bc8b80.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/75b658de-1c88-4147-b06b-5c0cc0bc8b80.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Previously &lt;a href=&#34;/thps-1-mall-gaps/&#34; class=&#34;wikilink&#34; data-title=&#34;THPS 1 Mall Gaps&#34; data-description=&#34;This is one of the most memorable levels for me in THPS1 from when I had originally played it. Surprisingly there aren&amp;#39;t as many gaps in it as I thought...&#34; data-date=&#34;2025-03-01&#34; data-preview=&#34;This is one of the most memorable levels for me in THPS1 from when I had originally played it. Surprisingly there aren&amp;#39;t as many gaps in it as I thought...&#34;&gt;THPS 1 Mall Gaps&lt;/a&gt;&#xA;Next &lt;a href=&#34;/thps-1-downtown-gaps/&#34; class=&#34;wikilink&#34; data-title=&#34;THPS 1 Downtown Gaps&#34; data-description=&#34;Previously thps-1-skate-park-gaps&#34; data-date=&#34;2025-03-15&#34; data-preview=&#34;Previously thps-1-skate-park-gaps&#34;&gt;THPS 1 Downtown Gaps&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;acid-drop&#34;&gt;Acid Drop &lt;a href=&#34;#acid-drop&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/284daa63-abe2-4693-a533-fa4ae0478869.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/284daa63-abe2-4693-a533-fa4ae0478869.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/284daa63-abe2-4693-a533-fa4ae0478869.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-4-AcidDrop.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;across-the-park&#34;&gt;Across The Park &lt;a href=&#34;#across-the-park&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/01b21044-0bf8-4b06-9db1-a002c0519df6.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/01b21044-0bf8-4b06-9db1-a002c0519df6.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/01b21044-0bf8-4b06-9db1-a002c0519df6.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-4-AcrossThePark.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;around-the-bend&#34;&gt;Around The Bend &lt;a href=&#34;#around-the-bend&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/e9e42b76-de54-4828-9aaa-39f125ad39e5.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/e9e42b76-de54-4828-9aaa-39f125ad39e5.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/e9e42b76-de54-4828-9aaa-39f125ad39e5.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-4-AroundTheBend.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;hp-transfer&#34;&gt;HP Transfer &lt;a href=&#34;#hp-transfer&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/c39a29f4-3b18-4983-a1b0-d27a284a7f63.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/c39a29f4-3b18-4983-a1b0-d27a284a7f63.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/c39a29f4-3b18-4983-a1b0-d27a284a7f63.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-4-HPTransfer.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;light-grind&#34;&gt;Light Grind &lt;a href=&#34;#light-grind&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/b3e5b0bd-8f71-41b2-9fe3-5b45cde01ba4.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/b3e5b0bd-8f71-41b2-9fe3-5b45cde01ba4.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/b3e5b0bd-8f71-41b2-9fe3-5b45cde01ba4.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-4-LightGrind.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;over-the-box&#34;&gt;Over The Box &lt;a href=&#34;#over-the-box&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/96afe8f1-bffb-4a69-af64-17cafeb9ad3c.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/96afe8f1-bffb-4a69-af64-17cafeb9ad3c.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/96afe8f1-bffb-4a69-af64-17cafeb9ad3c.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-4-OverTheBox.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;over-the-pipe&#34;&gt;Over The Pipe &lt;a href=&#34;#over-the-pipe&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/90c96ad4-be68-4ab0-a907-0cc45d0aa853.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/90c96ad4-be68-4ab0-a907-0cc45d0aa853.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/90c96ad4-be68-4ab0-a907-0cc45d0aa853.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-4-OverThePipe.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;over-the-rafters&#34;&gt;Over the Rafters &lt;a href=&#34;#over-the-rafters&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/278ca420-8fe2-4f37-bdf9-14eae25fa07d.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/278ca420-8fe2-4f37-bdf9-14eae25fa07d.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/278ca420-8fe2-4f37-bdf9-14eae25fa07d.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-4-OverTheRafters.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;pool-2-walkway&#34;&gt;Pool 2 Walkway &lt;a href=&#34;#pool-2-walkway&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/78b6ecbc-c9d0-440b-809c-ae72a54af3ee.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/78b6ecbc-c9d0-440b-809c-ae72a54af3ee.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/78b6ecbc-c9d0-440b-809c-ae72a54af3ee.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-4-Pool2Walkway.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;pool-hip&#34;&gt;Pool Hip &lt;a href=&#34;#pool-hip&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/4c6cfaa7-c63a-41b8-8ed8-2e8cefe4c96a.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/4c6cfaa7-c63a-41b8-8ed8-2e8cefe4c96a.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/4c6cfaa7-c63a-41b8-8ed8-2e8cefe4c96a.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-4-PoolHip.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;pool-rail-trans&#34;&gt;Pool Rail Trans &lt;a href=&#34;#pool-rail-trans&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/6a72262c-6a31-4408-91c5-15e95d7fe4a7.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/6a72262c-6a31-4408-91c5-15e95d7fe4a7.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/6a72262c-6a31-4408-91c5-15e95d7fe4a7.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-4-PoolRailTrans.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;rafter-rail&#34;&gt;Rafter Rail &lt;a href=&#34;#rafter-rail&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/400830fc-5f7d-4f98-8784-1cb88dfa9c1b.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/400830fc-5f7d-4f98-8784-1cb88dfa9c1b.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/400830fc-5f7d-4f98-8784-1cb88dfa9c1b.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-4-RafterRail.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;transfer&#34;&gt;Transfer &lt;a href=&#34;#transfer&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/86bc0bf7-f6ae-4b0c-aed7-fc53845fcafb.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/86bc0bf7-f6ae-4b0c-aed7-fc53845fcafb.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/86bc0bf7-f6ae-4b0c-aed7-fc53845fcafb.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-4-Transfer.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;walkway-rail-trans&#34;&gt;Walkway Rail Trans &lt;a href=&#34;#walkway-rail-trans&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/e5af0838-371d-45c7-b0f2-2589e6c5e0d9.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/e5af0838-371d-45c7-b0f2-2589e6c5e0d9.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/e5af0838-371d-45c7-b0f2-2589e6c5e0d9.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-4-WalkwayRailTrans.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;wall-gap&#34;&gt;Wall Gap &lt;a href=&#34;#wall-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/70add6e4-c5d9-426b-8894-823922a714c5.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/70add6e4-c5d9-426b-8894-823922a714c5.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/70add6e4-c5d9-426b-8894-823922a714c5.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-4-WallGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;wall-gap-jr&#34;&gt;Wall Gap Jr &lt;a href=&#34;#wall-gap-jr&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/58caf655-2b2b-4683-9be7-6fc2c29feb5f.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/58caf655-2b2b-4683-9be7-6fc2c29feb5f.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/58caf655-2b2b-4683-9be7-6fc2c29feb5f.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-4-WallGapJr.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;whoop-gap&#34;&gt;Whoop Gap &lt;a href=&#34;#whoop-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/461c9b3c-891f-4c83-a158-932e5aa9f0ae.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/461c9b3c-891f-4c83-a158-932e5aa9f0ae.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/461c9b3c-891f-4c83-a158-932e5aa9f0ae.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-4-WhoopGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Trailmakers Pioneers</title>
    <id>https://waylonwalker.com/trailmakers-pioneers/</id>
    <updated>2025-03-06T20:27:37Z</updated>
    <published>2025-03-06T20:27:37Z</published>
    <link href="https://waylonwalker.com/trailmakers-pioneers/" rel="alternate" type="text/html"></link>
    <summary type="text">Trailmakers 2.0 Pioneers was released today as an update to trailmakers. It&#39;s a brand new campaign mode that requires you to mine resources to get materials...</summary>
    <content type="html">&lt;p&gt;Trailmakers 2.0 Pioneers was released today as an update to trailmakers.  It’s&#xA;a brand new campaign mode that requires you to mine resources to get materials&#xA;to craft your vehicles rather than salvage parts like you so in the Stranded&#xA;Campaign.  There also seems to be a more linear play through of the story with&#xA;the frogitts, unlike stranded where it let you do anything completely open&#xA;world, as long as you had the equipment to go there.&lt;/p&gt;&#xA;&lt;h2 id=&#34;four-frogitts&#34;&gt;Four Frogitts &lt;a href=&#34;#four-frogitts&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Out of the gate Wyatt came in with four frogitts to rescue, I don’t know how he&#xA;found them all, I’ve only been able to find the first one that the master gives&#xA;you to bring home as a tutorial.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/0e659c05-1c12-4524-aa54-ef52ba680865.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/0e659c05-1c12-4524-aa54-ef52ba680865.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/0e659c05-1c12-4524-aa54-ef52ba680865.mp4&#34; type=&#34;video/mp4&#34;&gt;four-frogitts.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;first-boss&#34;&gt;First Boss &lt;a href=&#34;#first-boss&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;After Wyatt left for bed I played a little more and beat the first of what felt&#xA;like a boss level enemy, he had much different attacks.  I did not think I&#xA;would make it as I got hit hard from his first explosion attack before I&#xA;realized what it did.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/08252dda-b943-4859-be58-0d504fd97f11.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/08252dda-b943-4859-be58-0d504fd97f11.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/08252dda-b943-4859-be58-0d504fd97f11.mp4&#34; type=&#34;video/mp4&#34;&gt;first-boss.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Here is where he was on the map.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/d0da1d66-63b2-4d29-8047-960cadb4e0c2.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/d0da1d66-63b2-4d29-8047-960cadb4e0c2.jpg&#34; alt=&#34;20250306195831_1.jpg&#34;/ data-glightbox=&#34;description: 20250306195831_1.jpg&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;first-mega-drill&#34;&gt;First Mega Drill &lt;a href=&#34;#first-mega-drill&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;So this first mega drill was a mistake we walked right into.  Master Sapo says,&#xA;“Hey go investigate the Drill, but be careful, you are not powerful enough for&#xA;it.”  Little did we know that getting too close will fully start the battle.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/3ccdda41-88a1-4159-9b28-0d3ddf46ccf4.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/3ccdda41-88a1-4159-9b28-0d3ddf46ccf4.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/3ccdda41-88a1-4159-9b28-0d3ddf46ccf4.mp4&#34; type=&#34;video/mp4&#34;&gt;mega-drill-1-1.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/d7fbbe02-dff6-442c-a622-6633dfe6dd36.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/d7fbbe02-dff6-442c-a622-6633dfe6dd36.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/d7fbbe02-dff6-442c-a622-6633dfe6dd36.mp4&#34; type=&#34;video/mp4&#34;&gt;mega-drill-1-2.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/7ae06e7c-2455-47e8-aae3-9593450b527c.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/7ae06e7c-2455-47e8-aae3-9593450b527c.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/7ae06e7c-2455-47e8-aae3-9593450b527c.mp4&#34; type=&#34;video/mp4&#34;&gt;mega-drill-1-3.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;leapsville-froggit-rescue&#34;&gt;Leapsville Froggit rescue &lt;a href=&#34;#leapsville-froggit-rescue&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Back to leapsville we were presented with two froggit rescues.  We later found&#xA;out that the settlement missions will repeat forever and cycle through a few&#xA;missions.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/3b20ce74-7f22-4f9b-9b09-53074750e7f3.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/3b20ce74-7f22-4f9b-9b09-53074750e7f3.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/3b20ce74-7f22-4f9b-9b09-53074750e7f3.mp4&#34; type=&#34;video/mp4&#34;&gt;leapsville-froggit-rescue-1.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/527b2fda-b1a2-49da-bfb4-4c30bcce9049.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/527b2fda-b1a2-49da-bfb4-4c30bcce9049.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/527b2fda-b1a2-49da-bfb4-4c30bcce9049.mp4&#34; type=&#34;video/mp4&#34;&gt;leapsville-froggit-rescue-2.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;After doing a few missions we completed leapsville.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/544b8197-303e-4b8e-9127-79ddac4dbc45.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/544b8197-303e-4b8e-9127-79ddac4dbc45.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/544b8197-303e-4b8e-9127-79ddac4dbc45.mp4&#34; type=&#34;video/mp4&#34;&gt;completing-leapsville.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;finding-sulfur&#34;&gt;Finding Sulfur &lt;a href=&#34;#finding-sulfur&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Finding sulfur in Trailmakers was a little tricky, first trying to find where&#xA;it was, then realizing that it was hidden in this bulbous plant.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/4f2be358-8a14-4033-adc4-ea941e605e0a.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/4f2be358-8a14-4033-adc4-ea941e605e0a.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/4f2be358-8a14-4033-adc4-ea941e605e0a.mp4&#34; type=&#34;video/mp4&#34;&gt;finding-sulfur.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;derogs-pond-froggit-rescue&#34;&gt;Derogs Pond Froggit Rescue &lt;a href=&#34;#derogs-pond-froggit-rescue&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/69965387-7eba-4d32-83b9-cf0aa42c5495.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/69965387-7eba-4d32-83b9-cf0aa42c5495.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/69965387-7eba-4d32-83b9-cf0aa42c5495.mp4&#34; type=&#34;video/mp4&#34;&gt;derogs-pond-froggit-rescue-2.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;meadows-intercity-bus-service&#34;&gt;Meadows Intercity Bus Service &lt;a href=&#34;#meadows-intercity-bus-service&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/777afbd6-7f75-4da6-aaeb-f35b1ef002d0.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/777afbd6-7f75-4da6-aaeb-f35b1ef002d0.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/777afbd6-7f75-4da6-aaeb-f35b1ef002d0.mp4&#34; type=&#34;video/mp4&#34;&gt;meadows-intercity-bus-service-2.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/933f6ff0-e1f8-421f-9de1-e6e7fffea841.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/933f6ff0-e1f8-421f-9de1-e6e7fffea841.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/933f6ff0-e1f8-421f-9de1-e6e7fffea841.mp4&#34; type=&#34;video/mp4&#34;&gt;meadows-intercity-bus-service-3.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;mega-drill-mudflats&#34;&gt;Mega Drill Mudflats &lt;a href=&#34;#mega-drill-mudflats&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;We came into this mega drill thinking we were prepared, but I was wrong.  I&#xA;equipped shotguns thinking it would be kinda like the last one, at the last&#xA;second Master Sapo tells you that you need an EMP, which we got equiped.  Once&#xA;we got in we realized that getting close to anything is really hard and all the&#xA;shotguns were useless, and to top it off all the Botnak attacks make it&#xA;impossible to reconfigure.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/a247d80a-88a5-4712-ba81-6282b704caa6.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/a247d80a-88a5-4712-ba81-6282b704caa6.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/a247d80a-88a5-4712-ba81-6282b704caa6.mp4&#34; type=&#34;video/mp4&#34;&gt;mega-drill-mudflats.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I really think the devs should make a small free zone where you don’t get&#xA;attacked where you respawn.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;huge-trophy-truck&#34;&gt;Huge Trophy Truck &lt;a href=&#34;#huge-trophy-truck&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I like making Trophy Trucks with big suspension.  They seem like they glitch&#xA;out more than they help, but I think they are fun, here is a huge jump I landed&#xA;hard in mine.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/251eaf40-c87d-466e-ab5c-24417a6b01ac.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/251eaf40-c87d-466e-ab5c-24417a6b01ac.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/251eaf40-c87d-466e-ab5c-24417a6b01ac.mp4&#34; type=&#34;video/mp4&#34;&gt;huge-trophy-truck-jump.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;emperical-extractions&#34;&gt;Emperical Extractions &lt;a href=&#34;#emperical-extractions&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;When pulling the scientists out of the their reserch to bring them back I did&#xA;not have enough boost to lift them, we needed to take a pitstop to get them up&#xA;to the treetops.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/95efd27b-af1e-450c-b27d-3108a404e62b.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/95efd27b-af1e-450c-b27d-3108a404e62b.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/95efd27b-af1e-450c-b27d-3108a404e62b.mp4&#34; type=&#34;video/mp4&#34;&gt;emperical-extractions-adding-boost.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/790ed882-b272-495c-889e-eb1cf8707e58.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/790ed882-b272-495c-889e-eb1cf8707e58.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/790ed882-b272-495c-889e-eb1cf8707e58.mp4&#34; type=&#34;video/mp4&#34;&gt;emperical-extractions-landing.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Doomlab7 homelab-compose</title>
    <id>https://waylonwalker.com/doomlab7-homelab-compose/</id>
    <updated>2025-03-06T14:56:33Z</updated>
    <published>2025-03-06T14:56:33Z</published>
    <link href="https://waylonwalker.com/doomlab7-homelab-compose/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on homelab-compose, created by Doomlab7.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/Doomlab7/homelab-compose&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;homelab-compose&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/Doomlab7&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Doomlab7&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A repository for the applications I run via docker-compose in my &lt;a href=&#34;/homelab/&#34; class=&#34;glossary-term&#34; title=&#34;A place to self host applications. For me this is primarily self built web applications, and applications for sharing files with my family. Techno Tim has a...&#34;&gt;homelab&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ deepseek-ai smallpond</title>
    <id>https://waylonwalker.com/deepseek-ai-smallpond/</id>
    <updated>2025-03-04T20:17:58Z</updated>
    <published>2025-03-04T20:17:58Z</published>
    <link href="https://waylonwalker.com/deepseek-ai-smallpond/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered smallpond by deepseek-ai, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/deepseek-ai/smallpond&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;smallpond&lt;/a&gt; by &lt;a href=&#34;https://github.com/deepseek-ai&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;deepseek-ai&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;A lightweight data processing framework built on DuckDB and 3FS.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nolar kopf</title>
    <id>https://waylonwalker.com/nolar-kopf/</id>
    <updated>2025-03-02T20:32:30Z</updated>
    <published>2025-03-02T20:32:30Z</published>
    <link href="https://waylonwalker.com/nolar-kopf/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on kopf by nolar.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/nolar/kopf&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kopf&lt;/a&gt; by &lt;a href=&#34;https://github.com/nolar&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nolar&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A Python framework to write Kubernetes operators in just a few lines of code&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>THPS 1 School Gaps</title>
    <id>https://waylonwalker.com/thps-1-school-gaps/</id>
    <updated>2025-03-01T10:39:28Z</updated>
    <published>2025-03-01T10:39:28Z</published>
    <link href="https://waylonwalker.com/thps-1-school-gaps/" rel="alternate" type="text/html"></link>
    <summary type="text">On the road to ** achievement I got all School Gaps in THPS1. This is a super fun level, I&#39;ll have to admit that I had to look up at least a quarter of them,...</summary>
    <content type="html">&lt;p&gt;On the road to &lt;strong&gt;Gap Master&lt;/strong&gt; achievement I got all School Gaps in THPS1.&#xA;This is a super fun level, I’ll have to admit that I had to look up at least a&#xA;quarter of them, and could not find them myself, mostly due to the naming, all&#xA;of the rail tricks were actually ledges and I was looking for big rails.  None&#xA;of the warehouse gaps were manuals so I had no idea that the downhill and&#xA;accross the gym would be manual tricks.&lt;/p&gt;&#xA;&lt;p&gt;Previously &lt;a href=&#34;/thps-1-warehouse-gaps/&#34; class=&#34;wikilink&#34; data-title=&#34;THPS 1 Warehouse Gaps&#34; data-description=&#34;On the road to ** achievement I got all Warehouse Gaps in THPS1. This is this classic warehouse level that everyone thinks of when THPS is mentioned. Such a...&#34; data-date=&#34;2025-02-22&#34; data-preview=&#34;On the road to ** achievement I got all Warehouse Gaps in THPS1. This is this classic warehouse level that everyone thinks of when THPS is mentioned. Such a...&#34;&gt;THPS 1 Warehouse Gaps&lt;/a&gt;&#xA;next &lt;a href=&#34;/thps-1-mall-gaps/&#34; class=&#34;wikilink&#34; data-title=&#34;THPS 1 Mall Gaps&#34; data-description=&#34;This is one of the most memorable levels for me in THPS1 from when I had originally played it. Surprisingly there aren&amp;#39;t as many gaps in it as I thought...&#34; data-date=&#34;2025-03-01&#34; data-preview=&#34;This is one of the most memorable levels for me in THPS1 from when I had originally played it. Surprisingly there aren&amp;#39;t as many gaps in it as I thought...&#34;&gt;THPS 1 Mall Gaps&lt;/a&gt;&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/0e56dc1e-27b6-4695-b4de-b8bc298285d7.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/0e56dc1e-27b6-4695-b4de-b8bc298285d7.png&#34; alt=&#34;screenshot-2025-02-20T16-38-32-148Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-02-20T16-38-32-148Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/71768034-e93c-4c48-bc0c-3d0b930dc327.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/71768034-e93c-4c48-bc0c-3d0b930dc327.png&#34; alt=&#34;screenshot-2025-02-20T16-39-53-452Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-02-20T16-39-53-452Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;ditchin-class&#34;&gt;Ditchin Class &lt;a href=&#34;#ditchin-class&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/cea84efd-5860-4ff4-ac17-6c2a9de4321e.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/cea84efd-5860-4ff4-ac17-6c2a9de4321e.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/cea84efd-5860-4ff4-ac17-6c2a9de4321e.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-2-DitchinClass.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;dumpster-rail-gap&#34;&gt;Dumpster Rail Gap &lt;a href=&#34;#dumpster-rail-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/40139234-0b55-498a-8c01-c9e5ddcdc9a7.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/40139234-0b55-498a-8c01-c9e5ddcdc9a7.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/40139234-0b55-498a-8c01-c9e5ddcdc9a7.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-2-DumpsterRailGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;funbox-table-transfer&#34;&gt;Funbox Table Transfer &lt;a href=&#34;#funbox-table-transfer&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/fedfcae4-82f1-4332-b768-3008427b4601.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/fedfcae4-82f1-4332-b768-3008427b4601.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/fedfcae4-82f1-4332-b768-3008427b4601.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-2-FunBoxToTableTransfer.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;garbage-ollie&#34;&gt;Garbage Ollie &lt;a href=&#34;#garbage-ollie&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/e42a47d8-fa31-46ab-92b7-7e634dcb1b21.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/e42a47d8-fa31-46ab-92b7-7e634dcb1b21.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/e42a47d8-fa31-46ab-92b7-7e634dcb1b21.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-2-GarbageOllie.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;gimme-gap&#34;&gt;Gimme Gap &lt;a href=&#34;#gimme-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/afa7cce3-33af-4c8f-bb40-99f3ff68f406.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/afa7cce3-33af-4c8f-bb40-99f3ff68f406.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/afa7cce3-33af-4c8f-bb40-99f3ff68f406.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-2-GimmeGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;hall-pass-gap&#34;&gt;Hall Pass gap &lt;a href=&#34;#hall-pass-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/e68285be-a9fd-4afb-977f-53cc0fff09e8.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/e68285be-a9fd-4afb-977f-53cc0fff09e8.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/e68285be-a9fd-4afb-977f-53cc0fff09e8.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-2-HallPassGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;all-access-gap&#34;&gt;All-Access Gap &lt;a href=&#34;#all-access-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/7ff62672-9ff2-4f2f-a47f-e5fe15174e6e.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/7ff62672-9ff2-4f2f-a47f-e5fe15174e6e.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/7ff62672-9ff2-4f2f-a47f-e5fe15174e6e.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-2-AllAccessGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;huge-rail&#34;&gt;Huge Rail &lt;a href=&#34;#huge-rail&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/0ba66287-8166-4573-875a-7ef7cac534d9.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/0ba66287-8166-4573-875a-7ef7cac534d9.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/0ba66287-8166-4573-875a-7ef7cac534d9.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-2-HugeRail.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;kicker-gap&#34;&gt;Kicker Gap &lt;a href=&#34;#kicker-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/974c4be7-0f80-49d6-85cd-ee3fd00f042e.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/974c4be7-0f80-49d6-85cd-ee3fd00f042e.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/974c4be7-0f80-49d6-85cd-ee3fd00f042e.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-2-KickerGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;long-ass-rail&#34;&gt;Long Ass Rail &lt;a href=&#34;#long-ass-rail&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/11e70881-e495-4988-b3fb-c7e6517394c6.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/11e70881-e495-4988-b3fb-c7e6517394c6.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/11e70881-e495-4988-b3fb-c7e6517394c6.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-2-LongAssRail.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;mini-gap&#34;&gt;Mini Gap &lt;a href=&#34;#mini-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/374f1155-96de-442d-9972-5fd728b50cc2.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/374f1155-96de-442d-9972-5fd728b50cc2.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/374f1155-96de-442d-9972-5fd728b50cc2.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-2-MiniGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;over-a-footbridge&#34;&gt;Over a Footbridge &lt;a href=&#34;#over-a-footbridge&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/1445e693-9586-45b8-855e-d90b98066454.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/1445e693-9586-45b8-855e-d90b98066454.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/1445e693-9586-45b8-855e-d90b98066454.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-2-OverAFootBridge.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;over-the-air-condidtioner&#34;&gt;Over the Air Condidtioner &lt;a href=&#34;#over-the-air-condidtioner&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/cdae2e2c-4ea9-49c1-b7b6-40a4f4fc4bce.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/cdae2e2c-4ea9-49c1-b7b6-40a4f4fc4bce.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/cdae2e2c-4ea9-49c1-b7b6-40a4f4fc4bce.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-2-OverTheAirConditioner.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;park-gap&#34;&gt;Park Gap &lt;a href=&#34;#park-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/e525a6e7-373f-431d-839e-6a38047f2aa1.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/e525a6e7-373f-431d-839e-6a38047f2aa1.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/e525a6e7-373f-431d-839e-6a38047f2aa1.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-2-ParkGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;planter-gap&#34;&gt;Planter Gap &lt;a href=&#34;#planter-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/f10f0ca2-141b-4463-a358-1ad65c077424.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/f10f0ca2-141b-4463-a358-1ad65c077424.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/f10f0ca2-141b-4463-a358-1ad65c077424.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-2-PlanterGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;playground-rail&#34;&gt;Playground Rail &lt;a href=&#34;#playground-rail&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/561dcdc2-6a59-40b4-9a0b-b973c16ee946.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/561dcdc2-6a59-40b4-9a0b-b973c16ee946.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/561dcdc2-6a59-40b4-9a0b-b973c16ee946.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-2-PlaygroundRail.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;rail-to-rail-transfer&#34;&gt;Rail to Rail Transfer &lt;a href=&#34;#rail-to-rail-transfer&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/71867722-fb1f-4fc6-97f5-186508e96611.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/71867722-fb1f-4fc6-97f5-186508e96611.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/71867722-fb1f-4fc6-97f5-186508e96611.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-2-RailToRailTransfer.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;roof-to-awning-gap&#34;&gt;Roof To Awning Gap &lt;a href=&#34;#roof-to-awning-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/32669ecc-784a-4aa9-8c29-1ab6a55a1311.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/32669ecc-784a-4aa9-8c29-1ab6a55a1311.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/32669ecc-784a-4aa9-8c29-1ab6a55a1311.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-2-RoofToAwningGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;roof-to-roof-gap&#34;&gt;Roof To Roof Gap &lt;a href=&#34;#roof-to-roof-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/bc543ef6-1aa3-46af-85e3-f469a63512fa.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/bc543ef6-1aa3-46af-85e3-f469a63512fa.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/bc543ef6-1aa3-46af-85e3-f469a63512fa.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-2-RoofToRoofGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;funbox-to-rail-transfer&#34;&gt;Funbox To Rail Transfer &lt;a href=&#34;#funbox-to-rail-transfer&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/61f44f4f-1b44-4168-996d-1f80a2318a22.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/61f44f4f-1b44-4168-996d-1f80a2318a22.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/61f44f4f-1b44-4168-996d-1f80a2318a22.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-2-FunboxToRailTransfer.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;downhill-manual&#34;&gt;Downhill Manual &lt;a href=&#34;#downhill-manual&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/04e51c14-c73f-479b-8e7c-d81b63010a27.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/04e51c14-c73f-479b-8e7c-d81b63010a27.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/04e51c14-c73f-479b-8e7c-d81b63010a27.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-2-DownhillManual.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;accross-the-gym&#34;&gt;Accross the Gym &lt;a href=&#34;#accross-the-gym&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/096328b8-a6b0-46be-b77e-ac89b5cac85e.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/096328b8-a6b0-46be-b77e-ac89b5cac85e.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/096328b8-a6b0-46be-b77e-ac89b5cac85e.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-2-AccrossTheGym.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;roof-hop&#34;&gt;Roof Hop &lt;a href=&#34;#roof-hop&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/394c6a37-892a-47e3-8269-63bec30da2d8.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/394c6a37-892a-47e3-8269-63bec30da2d8.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/394c6a37-892a-47e3-8269-63bec30da2d8.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-2-RoofHop.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;down-the-awning&#34;&gt;Down the Awning &lt;a href=&#34;#down-the-awning&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/6a11fdcb-fc52-49ba-b858-1936deda6c9c.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/6a11fdcb-fc52-49ba-b858-1936deda6c9c.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/6a11fdcb-fc52-49ba-b858-1936deda6c9c.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-2-DownTheAwning.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;perfectly-balanced&#34;&gt;Perfectly Balanced &lt;a href=&#34;#perfectly-balanced&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/b561af30-30d2-4fc3-9e42-8ee1b630fa32.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/b561af30-30d2-4fc3-9e42-8ee1b630fa32.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/b561af30-30d2-4fc3-9e42-8ee1b630fa32.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-2-PerfectlyBalanced.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;gigantic-rail&#34;&gt;Gigantic Rail &lt;a href=&#34;#gigantic-rail&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/7beb12ae-3b44-466f-a7d5-59bde6584929.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/7beb12ae-3b44-466f-a7d5-59bde6584929.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/7beb12ae-3b44-466f-a7d5-59bde6584929.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-2-GiganticRail.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;ridiculous-rail&#34;&gt;Ridiculous Rail &lt;a href=&#34;#ridiculous-rail&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/d3583f74-ce98-49bf-91d8-c5e5e6afe0c8.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/d3583f74-ce98-49bf-91d8-c5e5e6afe0c8.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/d3583f74-ce98-49bf-91d8-c5e5e6afe0c8.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-2-RidiculousRail.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;got-the-badge&#34;&gt;Got the badge &lt;a href=&#34;#got-the-badge&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/d6cfd19a-0f9d-4faa-a22f-887620ed9b6e.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/d6cfd19a-0f9d-4faa-a22f-887620ed9b6e.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>THPS 1 Mall Gaps</title>
    <id>https://waylonwalker.com/thps-1-mall-gaps/</id>
    <updated>2025-03-01T10:39:28Z</updated>
    <published>2025-03-01T10:39:28Z</published>
    <link href="https://waylonwalker.com/thps-1-mall-gaps/" rel="alternate" type="text/html"></link>
    <summary type="text">This is one of the most memorable levels for me in THPS1 from when I had originally played it. Surprisingly there aren&#39;t as many gaps in it as I thought...</summary>
    <content type="html">&lt;p&gt;This is one of the most memorable levels for me in THPS1 from when I had&#xA;originally played it.  Surprisingly there aren’t as many gaps in it as I&#xA;thought there would be, there are definitely a lot that you can make up on your&#xA;own.  Anyways here’s my playthrough of all the mall gaps in THPS1 on my way to gap master.&lt;/p&gt;&#xA;&lt;p&gt;Previously &lt;a href=&#34;/thps-1-school-gaps/&#34; class=&#34;wikilink&#34; data-title=&#34;THPS 1 School Gaps&#34; data-description=&#34;On the road to ** achievement I got all School Gaps in THPS1. This is a super fun level, I&amp;#39;ll have to admit that I had to look up at least a quarter of them,...&#34; data-date=&#34;2025-03-01&#34; data-preview=&#34;On the road to ** achievement I got all School Gaps in THPS1. This is a super fun level, I&amp;#39;ll have to admit that I had to look up at least a quarter of them,...&#34;&gt;THPS 1 School Gaps&lt;/a&gt;&#xA;Next &lt;a href=&#34;/thps-1-skate-park-gaps/&#34; class=&#34;wikilink&#34; data-title=&#34;THPS 1 Skate Park Gaps&#34; data-description=&#34;Previously thps-1-mall-gaps Next thps-1-downtown-gaps&#34; data-date=&#34;2025-03-08&#34; data-preview=&#34;Previously thps-1-mall-gaps Next thps-1-downtown-gaps&#34;&gt;THPS 1 Skate Park Gaps&lt;/a&gt;&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/e4c2feb1-4d5c-480d-b9bd-7e98b9a7c58c.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/e4c2feb1-4d5c-480d-b9bd-7e98b9a7c58c.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;huge-stair-set-off-a-mezzanine&#34;&gt;Huge Stair Set Off A Mezzanine &lt;a href=&#34;#huge-stair-set-off-a-mezzanine&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/dacd5c3a-1ded-470b-86fa-cb13c4f9fad0.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/dacd5c3a-1ded-470b-86fa-cb13c4f9fad0.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/dacd5c3a-1ded-470b-86fa-cb13c4f9fad0.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-3-HugeStairSetOffAMezzanine.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;coffee-grind&#34;&gt;Coffee Grind &lt;a href=&#34;#coffee-grind&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/4803cb45-6773-44c3-8650-536423d40741.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/4803cb45-6773-44c3-8650-536423d40741.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/4803cb45-6773-44c3-8650-536423d40741.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-3-CoffeeGrind.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;the-flying-leap&#34;&gt;The Flying Leap &lt;a href=&#34;#the-flying-leap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/c9e6fe6a-a06b-4304-828f-004f7758694e.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/c9e6fe6a-a06b-4304-828f-004f7758694e.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/c9e6fe6a-a06b-4304-828f-004f7758694e.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-3-TheFlyingLeap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;for-the-whole-atrium&#34;&gt;For the Whole Atrium &lt;a href=&#34;#for-the-whole-atrium&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/3319839a-b57a-4ea9-99ed-744471bfd377.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/3319839a-b57a-4ea9-99ed-744471bfd377.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/3319839a-b57a-4ea9-99ed-744471bfd377.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-3-ForTheWholeAtrium.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;fountain-gap&#34;&gt;Fountain Gap &lt;a href=&#34;#fountain-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/030956f6-d827-41da-8577-85e0e76f9041.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/030956f6-d827-41da-8577-85e0e76f9041.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/030956f6-d827-41da-8577-85e0e76f9041.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-3-FountainGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;exit-stage-right&#34;&gt;Exit Stage Right &lt;a href=&#34;#exit-stage-right&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/212eef81-eeb2-48c4-b8a4-392c1e6479e1.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/212eef81-eeb2-48c4-b8a4-392c1e6479e1.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/212eef81-eeb2-48c4-b8a4-392c1e6479e1.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-3-ExitStageRight.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;exit-stage-left&#34;&gt;Exit Stage Left &lt;a href=&#34;#exit-stage-left&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/8d9957e7-7cbd-4822-8b26-df9b9dc3f783.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/8d9957e7-7cbd-4822-8b26-df9b9dc3f783.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/8d9957e7-7cbd-4822-8b26-df9b9dc3f783.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-3-ExitStageLeft.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;over-a-stair-set&#34;&gt;Over A Stair Set &lt;a href=&#34;#over-a-stair-set&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/8c417457-0ea9-481d-af29-397fa2cbf1fa.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/8c417457-0ea9-481d-af29-397fa2cbf1fa.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/8c417457-0ea9-481d-af29-397fa2cbf1fa.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-3-OverAStairSet.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;over-a-huge-stair-set&#34;&gt;Over A Huge Stair Set &lt;a href=&#34;#over-a-huge-stair-set&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/4aa2815f-f1c8-473e-8ede-2235a1f3b9ad.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/4aa2815f-f1c8-473e-8ede-2235a1f3b9ad.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/4aa2815f-f1c8-473e-8ede-2235a1f3b9ad.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-3-OverAHugeStairSet.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;planter-gap&#34;&gt;Planter Gap &lt;a href=&#34;#planter-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/de81b233-d43d-4696-9e48-f84e8ecdb971.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/de81b233-d43d-4696-9e48-f84e8ecdb971.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/de81b233-d43d-4696-9e48-f84e8ecdb971.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-3-PlanterGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;rail-combo&#34;&gt;Rail Combo &lt;a href=&#34;#rail-combo&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/7edde848-0f0e-4160-b68b-17f9f567ab4b.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/7edde848-0f0e-4160-b68b-17f9f567ab4b.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/7edde848-0f0e-4160-b68b-17f9f567ab4b.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-3-RailCombo.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;skater-excalator-gap&#34;&gt;Skater Excalator Gap &lt;a href=&#34;#skater-excalator-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/d11a86da-56b0-4578-a5ff-eb752cbc4478.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/d11a86da-56b0-4578-a5ff-eb752cbc4478.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/d11a86da-56b0-4578-a5ff-eb752cbc4478.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-3-SkaterEscalatorGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;accross-the-light-beam&#34;&gt;Accross The Light Beam &lt;a href=&#34;#accross-the-light-beam&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/0888bd4b-4f57-41e8-8b43-78c665d13ec9.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/0888bd4b-4f57-41e8-8b43-78c665d13ec9.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/0888bd4b-4f57-41e8-8b43-78c665d13ec9.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-3-AcrossTheLightBeam.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;the-long-rail&#34;&gt;The Long Rail &lt;a href=&#34;#the-long-rail&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/79d246e4-5fef-4061-a60f-7fdac6b8e5d8.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/79d246e4-5fef-4061-a60f-7fdac6b8e5d8.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/79d246e4-5fef-4061-a60f-7fdac6b8e5d8.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-3-TheLongRail.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;the-short-rail&#34;&gt;The Short Rail &lt;a href=&#34;#the-short-rail&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/eaa5a04e-1f9b-48b6-ba9b-24f0923efeb2.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/eaa5a04e-1f9b-48b6-ba9b-24f0923efeb2.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/eaa5a04e-1f9b-48b6-ba9b-24f0923efeb2.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-3-TheShortRail.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ PrefectHQ marvin</title>
    <id>https://waylonwalker.com/prefecthq-marvin/</id>
    <updated>2025-02-28T14:37:43Z</updated>
    <published>2025-02-28T14:37:43Z</published>
    <link href="https://waylonwalker.com/prefecthq-marvin/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out PrefectHQ and their project marvin.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/PrefectHQ&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;PrefectHQ&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/PrefectHQ/marvin&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;marvin&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;✨ AI agents that spark joy&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ rancher system-upgrade-controller</title>
    <id>https://waylonwalker.com/rancher-system-upgrade-controller/</id>
    <updated>2025-02-26T13:10:31Z</updated>
    <published>2025-02-26T13:10:31Z</published>
    <link href="https://waylonwalker.com/rancher-system-upgrade-controller/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred system-upgrade-controller by rancher. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/rancher/system-upgrade-controller&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;system-upgrade-controller&lt;/a&gt; by &lt;a href=&#34;https://github.com/rancher&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rancher&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;In your Kubernetes, upgrading your nodes&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pythonarcade arcade</title>
    <id>https://waylonwalker.com/pythonarcade-arcade/</id>
    <updated>2025-02-25T14:03:02Z</updated>
    <published>2025-02-25T14:03:02Z</published>
    <link href="https://waylonwalker.com/pythonarcade-arcade/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred arcade by pythonarcade. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/pythonarcade/arcade&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;arcade&lt;/a&gt; by &lt;a href=&#34;https://github.com/pythonarcade&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pythonarcade&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;Easy to use Python library for creating 2D arcade games.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>THPS 1 Warehouse Gaps</title>
    <id>https://waylonwalker.com/thps-1-warehouse-gaps/</id>
    <updated>2025-02-22T20:46:03Z</updated>
    <published>2025-02-22T20:46:03Z</published>
    <link href="https://waylonwalker.com/thps-1-warehouse-gaps/" rel="alternate" type="text/html"></link>
    <summary type="text">On the road to ** achievement I got all Warehouse Gaps in THPS1. This is this classic warehouse level that everyone thinks of when THPS is mentioned. Such a...</summary>
    <content type="html">&lt;p&gt;On the road to &lt;strong&gt;Gap Master&lt;/strong&gt; achievement I got all Warehouse Gaps in THPS1.&#xA;This is this classic warehouse level that everyone thinks of when THPS is&#xA;mentioned.  Such a good level, compact, easy to play, with some fun gaps that&#xA;might take a few tries to hit.&lt;/p&gt;&#xA;&lt;p&gt;Next up &lt;a href=&#34;/thps-1-school-gaps/&#34; class=&#34;wikilink&#34; data-title=&#34;THPS 1 School Gaps&#34; data-description=&#34;On the road to ** achievement I got all School Gaps in THPS1. This is a super fun level, I&amp;#39;ll have to admit that I had to look up at least a quarter of them,...&#34; data-date=&#34;2025-03-01&#34; data-preview=&#34;On the road to ** achievement I got all School Gaps in THPS1. This is a super fun level, I&amp;#39;ll have to admit that I had to look up at least a quarter of them,...&#34;&gt;THPS 1 School Gaps&lt;/a&gt;&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/8b21df1c-9a79-4a07-a7c6-b660979aa3a1.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/8b21df1c-9a79-4a07-a7c6-b660979aa3a1.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;big-rail&#34;&gt;Big Rail &lt;a href=&#34;#big-rail&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/973527d4-3cac-4034-8e4c-24eff10a11fa.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/973527d4-3cac-4034-8e4c-24eff10a11fa.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/973527d4-3cac-4034-8e4c-24eff10a11fa.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-1-BigRail.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;channel-gap&#34;&gt;Channel Gap &lt;a href=&#34;#channel-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/c05d4ced-c0e8-448b-89f8-c5837e55e073.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/c05d4ced-c0e8-448b-89f8-c5837e55e073.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/c05d4ced-c0e8-448b-89f8-c5837e55e073.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-1-ChannelGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;deck-2-rail&#34;&gt;Deck 2 Rail &lt;a href=&#34;#deck-2-rail&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/5525ce76-d7c6-4047-b4f3-d0b811df2b82.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/5525ce76-d7c6-4047-b4f3-d0b811df2b82.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/5525ce76-d7c6-4047-b4f3-d0b811df2b82.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-1-Deck2Rail.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;face-plant&#34;&gt;Face Plant &lt;a href=&#34;#face-plant&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/83b23279-12fb-44e4-8a6f-6fbd6303879c.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/83b23279-12fb-44e4-8a6f-6fbd6303879c.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/83b23279-12fb-44e4-8a6f-6fbd6303879c.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-1-FacePlant.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;high-rail&#34;&gt;High Rail &lt;a href=&#34;#high-rail&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/6aa41edf-90a5-4390-88be-0ffd198fcf1d.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/6aa41edf-90a5-4390-88be-0ffd198fcf1d.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/6aa41edf-90a5-4390-88be-0ffd198fcf1d.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-1-HighRail.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;holy-shi&#34;&gt;Holy Shi &lt;a href=&#34;#holy-shi&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/d8b2f149-a388-4b17-b2a2-d64bfce4af49.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/d8b2f149-a388-4b17-b2a2-d64bfce4af49.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/d8b2f149-a388-4b17-b2a2-d64bfce4af49.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-1-HolyShi.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;kicker-2-ledge&#34;&gt;Kicker 2 Ledge &lt;a href=&#34;#kicker-2-ledge&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/e727f014-1388-4d12-bc60-8bd8741e73f7.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/e727f014-1388-4d12-bc60-8bd8741e73f7.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/e727f014-1388-4d12-bc60-8bd8741e73f7.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-1-Kicker2Ledge.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;kicker-gap&#34;&gt;Kicker Gap &lt;a href=&#34;#kicker-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/0a4aa8fd-d565-4587-b6d7-39f2d90c63ec.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/0a4aa8fd-d565-4587-b6d7-39f2d90c63ec.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/0a4aa8fd-d565-4587-b6d7-39f2d90c63ec.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-1-KickerGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;monster-grind&#34;&gt;Monster Grind &lt;a href=&#34;#monster-grind&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/d51f61a5-8732-4398-adb2-53af9091564f.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/d51f61a5-8732-4398-adb2-53af9091564f.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/d51f61a5-8732-4398-adb2-53af9091564f.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-1-MonsterGrind.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;over-the-pipe&#34;&gt;Over The Pipe &lt;a href=&#34;#over-the-pipe&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/48af7cf1-c708-4560-ad21-c523de5029a7.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/48af7cf1-c708-4560-ad21-c523de5029a7.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/48af7cf1-c708-4560-ad21-c523de5029a7.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-1-OverThePipe.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;secret-room&#34;&gt;Secret Room &lt;a href=&#34;#secret-room&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/ee5c0bf7-6a37-49ef-93c0-68ae9178c4ec.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/ee5c0bf7-6a37-49ef-93c0-68ae9178c4ec.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/ee5c0bf7-6a37-49ef-93c0-68ae9178c4ec.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-1-SecretRoom.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;taxi-2-ledge&#34;&gt;Taxi 2 Ledge &lt;a href=&#34;#taxi-2-ledge&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/fd3a20ae-dca6-4426-ab70-69525acbc34d.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/fd3a20ae-dca6-4426-ab70-69525acbc34d.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/fd3a20ae-dca6-4426-ab70-69525acbc34d.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-1-Taxi2Ledge.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;taxi-gap&#34;&gt;Taxi Gap &lt;a href=&#34;#taxi-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/c16310d0-48a3-46f5-ab68-83a58e1a249b.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/c16310d0-48a3-46f5-ab68-83a58e1a249b.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/c16310d0-48a3-46f5-ab68-83a58e1a249b.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-1-TaxiGap.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;transfer&#34;&gt;Transfer &lt;a href=&#34;#transfer&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/980adcb5-87c9-4e23-bb1c-62d6833853f1.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/980adcb5-87c9-4e23-bb1c-62d6833853f1.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/980adcb5-87c9-4e23-bb1c-62d6833853f1.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-1-Transfer.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;transition-grind&#34;&gt;Transition Grind &lt;a href=&#34;#transition-grind&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/63f6f560-36e5-4d14-a200-9357f60ef468.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/63f6f560-36e5-4d14-a200-9357f60ef468.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/63f6f560-36e5-4d14-a200-9357f60ef468.mp4&#34; type=&#34;video/mp4&#34;&gt;THPS1-1-TransitionGrind.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tailscale github-action</title>
    <id>https://waylonwalker.com/tailscale-github-action/</id>
    <updated>2025-02-21T14:14:22Z</updated>
    <published>2025-02-21T14:14:22Z</published>
    <link href="https://waylonwalker.com/tailscale-github-action/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out tailscale and their project github-action.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/tailscale&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tailscale&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/tailscale/github-action&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;github-action&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A GitHub Action to connect your workflow to your Tailscale network.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ kubenetworks kubevpn</title>
    <id>https://waylonwalker.com/kubenetworks-kubevpn/</id>
    <updated>2025-02-21T14:14:01Z</updated>
    <published>2025-02-21T14:14:01Z</published>
    <link href="https://waylonwalker.com/kubenetworks-kubevpn/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered kubevpn by kubenetworks, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/kubenetworks/kubevpn&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kubevpn&lt;/a&gt; by &lt;a href=&#34;https://github.com/kubenetworks&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kubenetworks&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;KubeVPN offers a Cloud Native Dev Environment that connects to kubernetes cluster network.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>pre-commit exclude</title>
    <id>https://waylonwalker.com/pre-commit-exclude/</id>
    <updated>2025-02-20T08:11:35Z</updated>
    <published>2025-02-20T08:11:35Z</published>
    <link href="https://waylonwalker.com/pre-commit-exclude/" rel="alternate" type="text/html"></link>
    <summary type="text">I run tailwind for my personal blog, whenever I update it, pre-commit goes in and fixes end of file. I&#39;m sick of these things fighting each other, since it...</summary>
    <content type="html">&lt;p&gt;I run tailwind for my personal blog, whenever I update it, pre-commit goes in&#xA;and fixes end of file.  I’m sick of these things fighting each other, since it&#xA;is a generated app it is going to et ignored from pre-commit from now on.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;exclude&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;^static/app.*\.css$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;repos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;repo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://github.com/pre-commit/pre-commit-hooks&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;rev&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;v2.4.0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;hooks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;trailing-whitespace&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;end-of-file-fixer&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;check-yaml&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;check-added-large-files&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Dont Starve Together Session One - Nooo Luuucy</title>
    <id>https://waylonwalker.com/shots/dont-starve-together-session-one---nooo-luuucy/</id>
    <updated>2025-02-17T09:40:05Z</updated>
    <published>2025-02-17T09:40:05Z</published>
    <link href="https://waylonwalker.com/shots/dont-starve-together-session-one---nooo-luuucy/" rel="alternate" type="text/html"></link>
    <summary type="text">After that embarrasing death I made my way over to a touchstone I found and Woodie is back from the dead, but without his beloved Lucy, to get her we will need to go</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/33c62075-535f-47c9-847e-3f0b0a05ec10.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/33c62075-535f-47c9-847e-3f0b0a05ec10.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/33c62075-535f-47c9-847e-3f0b0a05ec10.mp4&#34; type=&#34;video/mp4&#34;&gt;Dont Starve Together session one - NOOO LUUUCY&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;After that embarrasing death I made my way over to a touchstone I found and Woodie is back from the dead, but without his beloved Lucy, to get her we will need to go&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ valkey-io valkey-py</title>
    <id>https://waylonwalker.com/valkey-io-valkey-py/</id>
    <updated>2025-02-17T02:24:49Z</updated>
    <published>2025-02-17T02:24:49Z</published>
    <link href="https://waylonwalker.com/valkey-io-valkey-py/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on valkey-py, created by valkey-io.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/valkey-io/valkey-py&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;valkey-py&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/valkey-io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;valkey-io&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Valkey Python client based on a fork of redis-py&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ valkey-io valkey</title>
    <id>https://waylonwalker.com/valkey-io-valkey/</id>
    <updated>2025-02-17T02:22:53Z</updated>
    <published>2025-02-17T02:22:53Z</published>
    <link href="https://waylonwalker.com/valkey-io-valkey/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about valkey, an amazing project by valkey-io. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/valkey-io/valkey&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;valkey&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/valkey-io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;valkey-io&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;A flexible distributed key-value datastore that is optimized for caching and other realtime workloads.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Dont Starve Together Session One - Burt Food</title>
    <id>https://waylonwalker.com/shots/dont-starve-together-session-one---burt-food/</id>
    <updated>2025-02-16T09:40:05Z</updated>
    <published>2025-02-16T09:40:05Z</published>
    <link href="https://waylonwalker.com/shots/dont-starve-together-session-one---burt-food/" rel="alternate" type="text/html"></link>
    <summary type="text">To kick off the second session, I noticed that when you have a torch you can light your cooking pot, what I did not realize was that this burns your cooking pot to smitherines. Nothing left but a frame of ** ashes.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/24fa3268-04a5-4c23-b62c-c60bfdad0084.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/24fa3268-04a5-4c23-b62c-c60bfdad0084.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/24fa3268-04a5-4c23-b62c-c60bfdad0084.mp4&#34; type=&#34;video/mp4&#34;&gt;Dont Starve Together session one - burt food&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;To kick off the second session, I noticed that when you have a torch you can light your cooking pot, what I did not realize was that this burns your cooking pot to smitherines.  Nothing left but a frame of &lt;strong&gt;useless&lt;/strong&gt; ashes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Dont Starve Together Session One - Getting Into It With A Clockwork Bishop</title>
    <id>https://waylonwalker.com/shots/dont-starve-together-session-one---getting-into-it-with-a-clockwork-bishop/</id>
    <updated>2025-02-15T09:40:05Z</updated>
    <published>2025-02-15T09:40:05Z</published>
    <link href="https://waylonwalker.com/shots/dont-starve-together-session-one---getting-into-it-with-a-clockwork-bishop/" rel="alternate" type="text/html"></link>
    <summary type="text">As I was gathering resources with Lucy, minding my own business ** I got hit with an attack from a Clockwork Bishop, man these things hit hard and have really good aim. I took three hits before getting away, leaving me with very low heath at the end of this play session.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/36f4e4b8-16ee-4183-8de3-c2f96edd36e2.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/36f4e4b8-16ee-4183-8de3-c2f96edd36e2.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/36f4e4b8-16ee-4183-8de3-c2f96edd36e2.mp4&#34; type=&#34;video/mp4&#34;&gt;Dont Starve Together session one - Getting into it with a Clockwork Bishop&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;As I was gathering resources with Lucy, minding my own business &lt;strong&gt;BAM&lt;/strong&gt; I got hit with an attack from a Clockwork Bishop, man these things hit hard and have really good aim.  I took three hits before getting away, leaving me with very low heath at the end of this play session.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>fragmention</title>
    <id>https://waylonwalker.com/fragmention/</id>
    <updated>2025-02-15T09:32:43Z</updated>
    <published>2025-02-15T09:32:43Z</published>
    <link href="https://waylonwalker.com/fragmention/" rel="alternate" type="text/html"></link>
    <summary type="text">This post is still WIP. .....</summary>
    <content type="html">&lt;p&gt;This post is still WIP. …..&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://indieweb.org/fragmention##Challenges&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/indieweb.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/indieweb.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://indieweb.org/fragmention##Challenges&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I’ve been digging through David Bushell’s blog over the past day, he has some&#xA;really good ideas about blogging and webdev.  One really interesting post I&#xA;came accross is&#xA;&lt;a href=&#34;https://dbushell.com/2024/12/05/url-fragment-text-directives/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/dbushell.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/dbushell.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;url-fragment-text-directives&lt;/a&gt;.&#xA;I’ve long had id’s linked on my headings, though sometimes broken, or now&#xA;showing the link, I’ve done my best to include them.  Fragmentions extend this&#xA;to allow any text to be linkable like this.&lt;/p&gt;&#xA;&lt;p&gt;fragmentioner ui: &lt;a href=&#34;https://github.com/kartikprabhu/fragmentioner/tree/master?tab=readme-ov-file&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/kartikprabhu/fragmentioner/tree/master?tab=readme-ov-file&lt;/a&gt;&#xA;fragmentioner js: &lt;a href=&#34;https://github.com/chapmanu/fragmentions&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/chapmanu/fragmentions&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;examples&#34;&gt;Examples &lt;a href=&#34;#examples&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://resilientwebdesign.com/#This%20is%20a%20web%20book&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/resilientwebdesign.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/resilientwebdesign.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://resilientwebdesign.com/#This%20is%20a%20web%20book&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>newlines in css before</title>
    <id>https://waylonwalker.com/newlines-in-css-before/</id>
    <updated>2025-02-15T09:28:48Z</updated>
    <published>2025-02-15T09:28:48Z</published>
    <link href="https://waylonwalker.com/newlines-in-css-before/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m building in a fragmentions implementation into my blog, I wanted to add some text before the fragment to indidate that it was the highlighted fragment...</summary>
    <content type="html">&lt;p&gt;I’m building in a [[ fragmentions ]] implementation into my blog, I wanted to&#xA;add some text before the fragment to indidate that it was the highlighted&#xA;fragment that someone may have intended to share with you.&lt;/p&gt;&#xA;&lt;p&gt;To get a newline in a &lt;code&gt;:before&lt;/code&gt; I need to use &lt;code&gt;\A&lt;/code&gt; and &lt;code&gt;white-space: pre-line&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;body&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;target&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;before&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;body&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;fragmention&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;before&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Highlighted Fragment:\A&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;white-space&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;pre-line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;err&#34;&gt;@apply&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;font-bold&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;text-yellow-600&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here is what it looks like on my not yet live implementation of fragmentions.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/fb693b92-3744-45a5-9220-bd914162f435.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/fb693b92-3744-45a5-9220-bd914162f435.png&#34; alt=&#34;screenshot-2025-02-15T15-43-06-372Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-02-15T15-43-06-372Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ bigskysoftware fixi</title>
    <id>https://waylonwalker.com/bigskysoftware-fixi/</id>
    <updated>2025-02-15T00:21:48Z</updated>
    <published>2025-02-15T00:21:48Z</published>
    <link href="https://waylonwalker.com/bigskysoftware-fixi/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered fixi by bigskysoftware, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/bigskysoftware/fixi&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fixi&lt;/a&gt; by &lt;a href=&#34;https://github.com/bigskysoftware&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;bigskysoftware&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ duckdb pg_duckdb</title>
    <id>https://waylonwalker.com/duckdb-pg_duckdb/</id>
    <updated>2025-02-14T13:56:38Z</updated>
    <published>2025-02-14T13:56:38Z</published>
    <link href="https://waylonwalker.com/duckdb-pg_duckdb/" rel="alternate" type="text/html"></link>
    <summary type="text">I like duckdb&#39;s project pg_duckdb.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/duckdb&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;duckdb’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/duckdb/pg_duckdb&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pg_duckdb&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;DuckDB-powered Postgres for high performance apps &amp;amp; analytics.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ medialab xan</title>
    <id>https://waylonwalker.com/medialab-xan/</id>
    <updated>2025-02-14T13:56:21Z</updated>
    <published>2025-02-14T13:56:21Z</published>
    <link href="https://waylonwalker.com/medialab-xan/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred xan by medialab. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/medialab/xan&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;xan&lt;/a&gt; by &lt;a href=&#34;https://github.com/medialab&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;medialab&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;The CSV magician&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ johnwarne upvote-rss</title>
    <id>https://waylonwalker.com/johnwarne-upvote-rss/</id>
    <updated>2025-02-14T13:54:30Z</updated>
    <published>2025-02-14T13:54:30Z</published>
    <link href="https://waylonwalker.com/johnwarne-upvote-rss/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by upvote-rss from johnwarne.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/johnwarne/upvote-rss&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;upvote-rss&lt;/a&gt; from &lt;a href=&#34;https://github.com/johnwarne&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;johnwarne&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Generate rich RSS feeds from Reddit, Hacker News, and Lemmy&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Dont Starve Together Session One - Getting A Hat</title>
    <id>https://waylonwalker.com/shots/dont-starve-together-session-one---getting-a-hat/</id>
    <updated>2025-02-14T09:40:05Z</updated>
    <published>2025-02-14T09:40:05Z</published>
    <link href="https://waylonwalker.com/shots/dont-starve-together-session-one---getting-a-hat/" rel="alternate" type="text/html"></link>
    <summary type="text">I had the grass for a hat, so I figured why not. I&#39;m not sure if it really helps this time of year, but I thought it looked good on Woodie.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/813977e6-f954-43e8-882d-82afb66814d6.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/813977e6-f954-43e8-882d-82afb66814d6.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/813977e6-f954-43e8-882d-82afb66814d6.mp4&#34; type=&#34;video/mp4&#34;&gt;Dont Starve Together session one - Getting a Hat&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I had the grass for a hat, so I figured why not.  I’m not sure if  it really helps this time of year, but I thought it looked good on Woodie.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ caniszczyk rugpulls.dev</title>
    <id>https://waylonwalker.com/caniszczyk-rugpulls-dev/</id>
    <updated>2025-02-13T17:15:44Z</updated>
    <published>2025-02-13T17:15:44Z</published>
    <link href="https://waylonwalker.com/caniszczyk-rugpulls-dev/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? rugpulls.dev by caniszczyk.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/caniszczyk/rugpulls.dev&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rugpulls.dev&lt;/a&gt; by &lt;a href=&#34;https://github.com/caniszczyk&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;caniszczyk&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ fosrl pangolin</title>
    <id>https://waylonwalker.com/fosrl-pangolin/</id>
    <updated>2025-02-13T17:14:43Z</updated>
    <published>2025-02-13T17:14:43Z</published>
    <link href="https://waylonwalker.com/fosrl-pangolin/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about pangolin, an amazing project by fosrl. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/fosrl/pangolin&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pangolin&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/fosrl&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fosrl&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Tunneled Mesh Reverse Proxy Server with Identity and Access Control and Dashboard UI&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ prazzon Flexbox-Labs</title>
    <id>https://waylonwalker.com/prazzon-flexbox-labs/</id>
    <updated>2025-02-13T17:12:58Z</updated>
    <published>2025-02-13T17:12:58Z</published>
    <link href="https://waylonwalker.com/prazzon-flexbox-labs/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? Flexbox-Labs by prazzon.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/prazzon/Flexbox-Labs&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Flexbox-Labs&lt;/a&gt; by &lt;a href=&#34;https://github.com/prazzon&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;prazzon&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A web app for creating flexible layouts with the power of CSS Flexbox.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ vagos llm-sort</title>
    <id>https://waylonwalker.com/vagos-llm-sort/</id>
    <updated>2025-02-13T17:10:55Z</updated>
    <published>2025-02-13T17:10:55Z</published>
    <link href="https://waylonwalker.com/vagos-llm-sort/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out llm-sort by vagos. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/vagos/llm-sort&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;llm-sort&lt;/a&gt; by &lt;a href=&#34;https://github.com/vagos&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vagos&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;Sort input lines semantically with llm&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Dont Starve Together Session One - Opening Up The Garden</title>
    <id>https://waylonwalker.com/shots/dont-starve-together-session-one---opening-up-the-garden/</id>
    <updated>2025-02-13T09:40:05Z</updated>
    <published>2025-02-13T09:40:05Z</published>
    <link href="https://waylonwalker.com/shots/dont-starve-together-session-one---opening-up-the-garden/" rel="alternate" type="text/html"></link>
    <summary type="text">On day two I had enough materials gathered to make the garden digamajig to prep the soil for gardening. I planted the few seeds that I stole from the birds right away.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/43e6e5db-4750-4a32-8f53-652fbd7ffaf7.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/43e6e5db-4750-4a32-8f53-652fbd7ffaf7.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/43e6e5db-4750-4a32-8f53-652fbd7ffaf7.mp4&#34; type=&#34;video/mp4&#34;&gt;Dont Starve Together session one - Opening up the Garden&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;On day two I had enough materials gathered to make the garden digamajig to prep the soil for gardening.  I planted the few seeds that I stole from the birds right away.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>fixed long standing nvim startup error</title>
    <id>https://waylonwalker.com/fixed-long-standing-nvim-startup-error/</id>
    <updated>2025-02-13T08:41:39Z</updated>
    <published>2025-02-13T08:41:39Z</published>
    <link href="https://waylonwalker.com/fixed-long-standing-nvim-startup-error/" rel="alternate" type="text/html"></link>
    <summary type="text">Here&#39;s the diff, this is it.</summary>
    <content type="html">&lt;p&gt;Here’s the diff, this is it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  local M = {}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  M.setup = require(&amp;#34;waylonwalker.setup&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  M.settings = require(&amp;#34;waylonwalker.settings&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+ M.lazy = require(&amp;#34;waylonwalker.lazy&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;  M.options = require(&amp;#34;waylonwalker.options&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  M.globals = require(&amp;#34;waylonwalker.globals&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  M.keymap = require(&amp;#34;waylonwalker.keymap&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;- M.lazy = require(&amp;#34;waylonwalker.lazy&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;  M.autocmds = require(&amp;#34;waylonwalker.autocmds&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  M.util = require(&amp;#34;waylonwalker.util&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  M.plugins = require(&amp;#34;waylonwalker.plugins&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  M.snippets = require(&amp;#34;waylonwalker.snippets&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  return M&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;the-error&#34;&gt;The error &lt;a href=&#34;#the-error&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;On first install of my dotfiles I’m presenting with this flashbang of an error&#xA;filling the screen with red background.  Its kinda hard to read, I’m not deep&#xA;into lua and reading their tracebacks.  It pops up in this pager that if I&#xA;scroll too far it quits and the error is gone before I know what it is or how&#xA;it got there.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/20eafd2f-fbcd-4f93-8bd9-541edf42fba4.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/20eafd2f-fbcd-4f93-8bd9-541edf42fba4.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;For the longest time it just felt like it randomly showed up without much warning.&lt;/p&gt;&#xA;&lt;h2 id=&#34;i-sent-ai-at-the-issue&#34;&gt;I sent ai at the issue &lt;a href=&#34;#i-sent-ai-at-the-issue&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I tried some chatgpt and windsurf, both gave me overconfident answers that all&#xA;did nothing.  They just sent me in loops for way too long.&lt;/p&gt;&#xA;&lt;h2 id=&#34;i-fixed-it&#34;&gt;I fixed it &lt;a href=&#34;#i-fixed-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;What did it take??&lt;/p&gt;&#xA;&lt;p&gt;Just sitting down and thinking about what the problem was and setting up a good&#xA;test workflow.  Yesterday I worked out &lt;a href=&#34;/testing-nvim-installs/&#34; class=&#34;wikilink&#34; data-title=&#34;testing nvim installs&#34; data-description=&#34;Testing fresh nvim installs can be a pain, and hard to di without borking your known good install. I&amp;#39;ve been using to run a test nvim in a sandbox that wont...&#34; data-date=&#34;2025-02-12&#34; data-preview=&#34;Testing fresh nvim installs can be a pain, and hard to di without borking your known good install. I&amp;#39;ve been using to run a test nvim in a sandbox that wont...&#34;&gt;testing nvim installs&lt;/a&gt; and I was&#xA;immediately able to replicate the error over and over.  Unlike before where it&#xA;felt random, I now have a good problem statement that I can replicate.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;clean install&lt;/li&gt;&#xA;&lt;li&gt;start nvim&lt;/li&gt;&#xA;&lt;li&gt;Lazy pops up&lt;/li&gt;&#xA;&lt;li&gt;FLASHBANG!! Error that treesitter is not installed&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;What was confusing for so long was that treesitter was the first thing in lazy,&#xA;and it appeared that lazy was running before the error.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-fix&#34;&gt;The fix &lt;a href=&#34;#the-fix&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Once I really thought about &lt;package&gt; not installed, it clicked.  It must be&#xA;the order of operations. I popped open my &lt;code&gt;init.lua&lt;/code&gt; and there it was, lazy&#xA;running after things that use treesitter.  A little &lt;span class=&#34;keys&#34;&gt;&lt;kbd class=&#34;kbd&#34;&gt;d&lt;/kbd&gt;&lt;span class=&#34;key-separator&#34;&gt;+&lt;/span&gt;&lt;kbd class=&#34;kbd&#34;&gt;d&lt;/kbd&gt;&lt;span class=&#34;key-separator&#34;&gt;+&lt;/span&gt;&lt;kbd class=&#34;kbd&#34;&gt;k&lt;/kbd&gt;&lt;span class=&#34;key-separator&#34;&gt;+&lt;/span&gt;&lt;kbd class=&#34;kbd&#34;&gt;k&lt;/kbd&gt;&lt;span class=&#34;key-separator&#34;&gt;+&lt;/span&gt;&lt;kbd class=&#34;kbd&#34;&gt;k&lt;/kbd&gt;&lt;span class=&#34;key-separator&#34;&gt;+&lt;/span&gt;&lt;kbd class=&#34;kbd&#34;&gt;k&lt;/kbd&gt;&lt;span class=&#34;key-separator&#34;&gt;+&lt;/span&gt;&lt;kbd class=&#34;kbd&#34;&gt;k&lt;/kbd&gt;&lt;span class=&#34;key-separator&#34;&gt;+&lt;/span&gt;&lt;kbd class=&#34;kbd&#34;&gt;p&lt;/kbd&gt;&lt;/span&gt; and it&#xA;was fixed. running &lt;code&gt;just testnvim&lt;/code&gt; the next time there was no flashbang!&lt;/package&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  local M = {}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  M.setup = require(&amp;#34;waylonwalker.setup&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  M.settings = require(&amp;#34;waylonwalker.settings&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+ M.lazy = require(&amp;#34;waylonwalker.lazy&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;&lt;/span&gt;  M.options = require(&amp;#34;waylonwalker.options&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  M.globals = require(&amp;#34;waylonwalker.globals&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  M.keymap = require(&amp;#34;waylonwalker.keymap&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;- M.lazy = require(&amp;#34;waylonwalker.lazy&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;  M.autocmds = require(&amp;#34;waylonwalker.autocmds&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  M.util = require(&amp;#34;waylonwalker.util&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  M.plugins = require(&amp;#34;waylonwalker.plugins&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  M.snippets = require(&amp;#34;waylonwalker.snippets&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  return M&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>testing nvim installs</title>
    <id>https://waylonwalker.com/testing-nvim-installs/</id>
    <updated>2025-02-12T21:02:03Z</updated>
    <published>2025-02-12T21:02:03Z</published>
    <link href="https://waylonwalker.com/testing-nvim-installs/" rel="alternate" type="text/html"></link>
    <summary type="text">Testing fresh nvim installs can be a pain, and hard to di without borking your known good install. I&#39;ve been using to run a test nvim in a sandbox that wont...</summary>
    <content type="html">&lt;p&gt;Testing fresh nvim installs can be a pain, and hard to di without borking your&#xA;known good install.  I’ve been using &lt;code&gt;NVIM_APPNAME&lt;/code&gt; to run a test nvim in a&#xA;sandbox that wont bork my main install.  This usually runs for me in under a&#xA;minute, can be down under 15s if I remove some of the TreeSitter installs at&#xA;the end.  This beats a full docker build of my full devtainer to test out nvim&#xA;packaging woes.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm ~/.cache/wwtest -rf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm ~/.local/share/wwtest -rf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm ~/.config/wwtest -rf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp -r nvim/.config/nvim/ ~/.config/wwtest&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;NVIM_APPNAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;wwtest nvim --headless &lt;span class=&#34;s2&#34;&gt;&amp;#34;+Lazy sync&amp;#34;&lt;/span&gt; +qa&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;NVIM_APPNAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;wwtest nvim --headless &lt;span class=&#34;s2&#34;&gt;&amp;#34;+TSUpdateSync&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;+sleep 5000m&amp;#34;&lt;/span&gt; +qa&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;NVIM_APPNAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;wwtest nvim --headless &lt;span class=&#34;s2&#34;&gt;&amp;#34;+MasonUpdate&amp;#34;&lt;/span&gt; +qa&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;NVIM_APPNAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;wwtest nvim --headless &lt;span class=&#34;s2&#34;&gt;&amp;#34;+TSInstallSync! c cpp go lua python rust tsx javascript typescript vimdoc vim bash yaml toml vue just&amp;#34;&lt;/span&gt; +qa&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;NVIM_APPNAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;wwtest nvim --headless &lt;span class=&#34;s2&#34;&gt;&amp;#34;+MasonInstall lua-language-server rustywind ruff ruff-lsp html-lsp typescript-language-server beautysh fixjson isort markdownlint stylua yamlfmt python-lsp-server&amp;#34;&lt;/span&gt; +qa&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;NVIM_APPNAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;wwtest nvim&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I’ve started to use this as a &lt;code&gt;just&lt;/code&gt; recipe to run before deploying a new&#xA;version of my dotfiles. So far its pairing nicely with &lt;a href=&#34;/nvim-manager/&#34; class=&#34;wikilink&#34; data-title=&#34;nvim-manager&#34; data-description=&#34;I recently built a cli application as a nearly-one-shot-app called nvim-manager. It manages your nvim dotfiles install.&#34; data-date=&#34;2025-01-12&#34; data-preview=&#34;I recently built a cli application as a nearly-one-shot-app called nvim-manager. It manages your nvim dotfiles install.&#34;&gt;nvim-manager&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Setting up 4G Backup with Google Fi and Netgear LM1200</title>
    <id>https://waylonwalker.com/setting-up-4g-backup-with-google-fi-and-netgear-lm1200/</id>
    <updated>2025-02-12T13:23:35Z</updated>
    <published>2025-02-12T13:23:35Z</published>
    <link href="https://waylonwalker.com/setting-up-4g-backup-with-google-fi-and-netgear-lm1200/" rel="alternate" type="text/html"></link>
    <summary type="text">I connected my home network to have 4G bakcup with Google Fi and Netgear LM1200. Goodle Fi offers free data-only sim cards that you can order from their...</summary>
    <content type="html">&lt;p&gt;I connected my home network to have 4G bakcup with Google Fi and Netgear&#xA;LM1200.  Goodle Fi offers free data-only sim cards that you can order from&#xA;their service.  It takes a couple of days, and a new sim arrives in the mail&#xA;free of charge.  It does pull data from your account, so if you are not on an&#xA;unlimited plan be careful of how much you let go through the sim.&lt;/p&gt;&#xA;&lt;p&gt;I’ve owned this for a few years now, but it’s been disconnected for a good six&#xA;months or so.  I’m not s[e what happened, but it stopped recognizing the old&#xA;sim card. &lt;em&gt;no need to point out the coffee stains at the end, its&#xA;&lt;strong&gt;definitely&lt;/strong&gt; not related&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;follow-the-provided-instuctions&#34;&gt;Follow the provided instuctions &lt;a href=&#34;#follow-the-provided-instuctions&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Activating the sim asked for a confirmation code shipped with the sim card,&#xA;then brought me to this page.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/ec4d4272-7f61-4cf7-b3f5-ed2a57d0c11b.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/ec4d4272-7f61-4cf7-b3f5-ed2a57d0c11b.png&#34; alt=&#34;screenshot-2025-02-11T19-24-38-431Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-02-11T19-24-38-431Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Clicking &lt;code&gt;Have a Different Device?&lt;/code&gt; brought up instructions to set up the APN in the LM1200.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/b54d9a7f-c768-45b8-bf90-e692a6525788.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/b54d9a7f-c768-45b8-bf90-e692a6525788.png&#34; alt=&#34;screenshot-2025-02-11T19-14-39-662Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-02-11T19-14-39-662Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;restart&#34;&gt;Restart &lt;a href=&#34;#restart&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;First thing for me was that the sim was not recognized, restarting the LM1200&#xA;did the trick to recognize it as a Google Fi sim, and I started setting up by&#xA;adding the APN as instructed from Google.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/9f10f86d-734a-4b6f-a1f6-1bed27c5db13.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/9f10f86d-734a-4b6f-a1f6-1bed27c5db13.png&#34; alt=&#34;screenshot-2025-02-11T19-22-55-062Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-02-11T19-22-55-062Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;setup-lm1200&#34;&gt;Setup LM1200 &lt;a href=&#34;#setup-lm1200&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Once restarted the LM1200 was recognize the sim right away and I was able to&#xA;add the APN details.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/4c9b0dde-69ce-4d73-af89-06d32c70c9d3.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/4c9b0dde-69ce-4d73-af89-06d32c70c9d3.png&#34; alt=&#34;screenshot-2025-02-11T19-21-24-608Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-02-11T19-21-24-608Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;connected&#34;&gt;Connected &lt;a href=&#34;#connected&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;After Saving these I was immediately connected as a backup.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/eb224d5a-6332-49e7-bde5-9f67c19d090f.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/eb224d5a-6332-49e7-bde5-9f67c19d090f.png&#34; alt=&#34;screenshot-2025-02-11T19-22-13-849Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-02-11T19-22-13-849Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;testing-failover&#34;&gt;Testing Failover &lt;a href=&#34;#testing-failover&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Backups do not exist without testing.  I pulled the WAN cable from the LM1200&#xA;and after a few seconds it swapped over to the backup.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/3fe17ab6-0fa6-4aa9-96d9-0d7ef6d191c0.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/3fe17ab6-0fa6-4aa9-96d9-0d7ef6d191c0.png&#34; alt=&#34;screenshot-2025-02-11T19-45-00-555Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-02-11T19-45-00-555Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;The dashboard shows fully connected, and it popped up that it sent an alert to&#xA;my phone, but that did not work for me.  I might hae something misconfigured.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/0229f36a-0b6b-4699-97c4-d526096c77fb.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/0229f36a-0b6b-4699-97c4-d526096c77fb.png&#34; alt=&#34;screenshot-2025-02-11T19-36-08-431Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-02-11T19-36-08-431Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;I ran a speed test and got a pretty respectable 38 Mbit/s up and 12 Mbit/s down.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/83647660-cf04-422b-a0f3-8b860c6585e1.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/83647660-cf04-422b-a0f3-8b860c6585e1.png&#34; alt=&#34;screenshot-2025-02-11T19-54-49-024Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-02-11T19-54-49-024Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;I reconnected the WAN cable and it went back to the primary, and it sat at&#xA;orange for about 10 seconds before switching back to wired connection.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/e6c0f5fe-ec2c-4546-aaa1-d5e2fba0ae0c.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/e6c0f5fe-ec2c-4546-aaa1-d5e2fba0ae0c.png&#34; alt=&#34;screenshot-2025-02-11T19-45-31-516Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-02-11T19-45-31-516Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Fully back on wired.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/70f9fd2b-9611-466a-a07b-11525e2a7aaa.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/70f9fd2b-9611-466a-a07b-11525e2a7aaa.png&#34; alt=&#34;screenshot-2025-02-11T19-47-13-699Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-02-11T19-47-13-699Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Now its all back up and running giving me a super cheap 4G backup with pretty&#xA;low effort.  Hopefully its reliable, I’ve upgraded about everything else on my&#xA;network since last running this, I think it will behave much better.  I think&#xA;some other issues were actually causing me to think I was not getting&#xA;connection and this fully got pulled from the network to try to fix it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-not-5g&#34;&gt;Why not 5G? &lt;a href=&#34;#why-not-5g&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The devices are way more expensive and this gives me all I need for a backup.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>ahrefs-cleanup-2024</title>
    <id>https://waylonwalker.com/ahrefs-cleanup-2024/</id>
    <updated>2025-02-12T12:56:40Z</updated>
    <published>2025-02-12T12:56:40Z</published>
    <link href="https://waylonwalker.com/ahrefs-cleanup-2024/" rel="alternate" type="text/html"></link>
    <summary type="text">This post is a big work in progress, expect it to keep getting better.</summary>
    <content type="html">&lt;p&gt;This post is a big work in progress, expect it to keep getting better.&lt;/p&gt;&#xA;&lt;h2 id=&#34;initial-score&#34;&gt;Initial Score &lt;a href=&#34;#initial-score&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/b26d4352-1bce-43a1-942e-bd6d7bd7c11d.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/b26d4352-1bce-43a1-942e-bd6d7bd7c11d.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;404-not-found-generate-a-page-for-each-tag&#34;&gt;404 Not Found, generate a page for each tag &lt;a href=&#34;#404-not-found-generate-a-page-for-each-tag&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/c501e0f7-b3c1-4124-b6b4-727d7e3e95a8.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/c501e0f7-b3c1-4124-b6b4-727d7e3e95a8.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;title-too-long&#34;&gt;Title too long &lt;a href=&#34;#title-too-long&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/4184948f-3527-4a17-8c65-b61e75d9ec75.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/4184948f-3527-4a17-8c65-b61e75d9ec75.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;404-not-found-comma-separated-tags&#34;&gt;404 Not Found, comma separated tags &lt;a href=&#34;#404-not-found-comma-separated-tags&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Another hit on 404’s caused by tags, was tag parsing from thoughts into posts,&#xA;this cause links to the full comma separated list of tags rather than one per&#xA;tag.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/c01ebd69-5ac4-4d9b-b720-43a16f64f421.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/c01ebd69-5ac4-4d9b-b720-43a16f64f421.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;You can see on the website the whole dang set of tags was being treated as a single tag.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/398b3bc7-8cfe-4190-968d-73eb15e18ea2.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/398b3bc7-8cfe-4190-968d-73eb15e18ea2.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;broken-images&#34;&gt;Broken images &lt;a href=&#34;#broken-images&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’m not fully sure what happened to all of these gifs in my old host and why&#xA;they didn’t show up, but I moved them all and they are solid now.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/b3a1e8de-9344-40b4-8020-9e75a59b5dd9.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/b3a1e8de-9344-40b4-8020-9e75a59b5dd9.png&#34; alt=&#34;screenshot-2025-01-15T17-31-20-430Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-01-15T17-31-20-430Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;i-burned-all-of-my-january-credits&#34;&gt;I burned all of my January Credits &lt;a href=&#34;#i-burned-all-of-my-january-credits&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;So I had an issue with my &lt;a href=&#34;/self-host/&#34; class=&#34;glossary-term&#34; title=&#34;Self hosting is the act of hosting your own applications and services without using a SAS provider. This is typically done with your own hardware, but there...&#34;&gt;self hosted&lt;/a&gt; shots not making them fast enough for&#xA;ahrefs, and essentially ddosing myself on one of their runs.  The long wait&#xA;times for images burnt all of my credits.&lt;/p&gt;&#xA;&lt;p&gt;Here was the next successful run with a HUGE improvement in overall score.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/cfed3e97-8dd4-4381-b38f-5dc6f40e7fad.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/cfed3e97-8dd4-4381-b38f-5dc6f40e7fad.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;The trend for errors is looking quite good.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/1ffbd8f7-1f81-40b9-b110-1b0f03bdd56f.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/1ffbd8f7-1f81-40b9-b110-1b0f03bdd56f.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;md-files-were-missing&#34;&gt;md files were Missing &lt;a href=&#34;#md-files-were-missing&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I had several links out to the raw source of some pages generally hosted at&#xA;&lt;code&gt;{slug}.md&lt;/code&gt;, but I had turned it off due to it causing builds to fail.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/db074f86-725a-4b34-a5e2-8424628f521e.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/db074f86-725a-4b34-a5e2-8424628f521e.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Taking another look at the error it was obvious what was going on, thoughts&#xA;never had a file extension and Pathlib was throwing isADirecotryError because&#xA;the path was already a directory for the index.&lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;html&lt;/a&gt;, adding a .md to the path&#xA;for the thoughts plugin fixed it.&lt;/p&gt;&#xA;&lt;p&gt;I made this fix in commit&#xA;&lt;a href=&#34;https://github.com/WaylonWalker/waylonwalker.com/commit/e0bbc777efd5d0309a107b0d3e7355b2426e8c47&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;e0bbc&lt;/a&gt;&#xA;on my site repo.&lt;/p&gt;&#xA;&lt;h2 id=&#34;broken-links-to-tags&#34;&gt;Broken links to tags &lt;a href=&#34;#broken-links-to-tags&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I wrote a cli plugin to automatically generate feeds for my tags, but I have&#xA;not ran it in awhile so I had a number of posts trying to link tags to feeds&#xA;that did not exist.  I fixed this in commit&#xA;[5d2e22](&lt;a href=&#34;https://github.com/WaylonWalker/waylonwalker.com/commit/5d2e227a03acb1104e4214507872c61ae2a47d64&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/WaylonWalker/waylonwalker.com/commit/5d2e227a03acb1104e4214507872c61ae2a47d64&lt;/a&gt;].&lt;/p&gt;&#xA;&lt;h2 id=&#34;fix-open-graph-url-not-matching-canonical&#34;&gt;fix: Open Graph URL not matching canonical &lt;a href=&#34;#fix-open-graph-url-not-matching-canonical&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;[[ thoughts-565 ]] fixes an error introduced while fixing &lt;a href=&#34;/og/&#34; class=&#34;glossary-term&#34; title=&#34;OG is short for open graph, a set of standard meta tags that are used for social media sharing. This is what tells other websites how to describe and display...&#34;&gt;og&lt;/a&gt; tags.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>vim date</title>
    <id>https://waylonwalker.com/vim-date/</id>
    <updated>2025-02-12T12:51:00Z</updated>
    <published>2025-02-12T12:51:00Z</published>
    <link href="https://waylonwalker.com/vim-date/" rel="alternate" type="text/html"></link>
    <summary type="text">When I want to put a date in a document like a blog post from vim I use !!date from insert mode. Note that entering from normal mode puts you in command mode...</summary>
    <content type="html">&lt;p&gt;When I want to put a date in a document like a blog post from vim I use !!date&#xA;from insert mode.  Note that entering &lt;code&gt;!!&lt;/code&gt; from normal mode puts you in command&#xA;mode with &lt;code&gt;:.!&lt;/code&gt; filled out.  This runs a shell command, i.e. &lt;code&gt;date&lt;/code&gt; for this&#xA;example.&lt;/p&gt;&#xA;&lt;p&gt;It outputs the following&lt;/p&gt;&#xA;&lt;p&gt;Fri Jan 31 08:46:11 PM CST 2025&lt;/p&gt;&#xA;&lt;p&gt;You can also pass in a date such as tommorrow by pasdding in the -d &lt;code&gt;date -d tomorrow&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;It outputs the following&lt;/p&gt;&#xA;&lt;p&gt;Sat Feb  1 08:53:20 PM CST 2025&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;codeium just taught me this one with autocomplete&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;put&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;strftime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%Y-%m-%d&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This outputs the following&lt;/p&gt;&#xA;&lt;p&gt;2025-01-31&lt;/p&gt;&#xA;&lt;p&gt;What I like about the &lt;code&gt;:put =strftime(&lt;/code&gt; method is that you can add a format,&#xA;but that is a lot more for me to remember than &lt;code&gt;!!date&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;a-few-weeks-later&#34;&gt;A few weeks later &lt;a href=&#34;#a-few-weeks-later&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’m going through a bunch of blog posts and dont want my date formats to change&#xA;to the Wed Feb format so I broke down and made these keybindings.  I think I’m&#xA;still going to be using &lt;code&gt;.!date&lt;/code&gt; a lot, but these keybindings will be nice for&#xA;editing blog post frontmatter.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;leader&amp;gt;dd&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;cmd&amp;gt;put =strftime(&amp;#39;%Y-%m-%d&amp;#39;)&amp;lt;cr&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;noremap&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;silent&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;leader&amp;gt;dt&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;cmd&amp;gt;put =strftime(&amp;#39;%Y-%m-%d %H:%M:%S&amp;#39;)&amp;lt;cr&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;noremap&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;silent&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;leader&gt;dd 2025-02-12&lt;/leader&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;leader&gt;dt 2025-02-12 12:53:47&lt;/leader&gt;&lt;/li&gt;&#xA;&lt;li&gt;:.!date    Wed Feb 12 12:53:47 PM CST 2025&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Dont Starve Together Session One - Setting Up Base</title>
    <id>https://waylonwalker.com/shots/dont-starve-together-session-one---setting-up-base/</id>
    <updated>2025-02-12T09:40:05Z</updated>
    <published>2025-02-12T09:40:05Z</published>
    <link href="https://waylonwalker.com/shots/dont-starve-together-session-one---setting-up-base/" rel="alternate" type="text/html"></link>
    <summary type="text">Just after the first night started I found my way back to the center of the map and made a stone campfire. I really like to use the stone campfires as they last forever, you just have to add wood. I was lucky enough to find stone by the Tall Bird to make this one on first day.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/f6d07c07-1d0a-40c9-9930-36c1e48aa69e.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/f6d07c07-1d0a-40c9-9930-36c1e48aa69e.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/f6d07c07-1d0a-40c9-9930-36c1e48aa69e.mp4&#34; type=&#34;video/mp4&#34;&gt;Dont Starve Together session one - setting up base&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Just after the first night started I found my way back to the center of the map and made a stone campfire.  I really like to use the stone campfires as they last forever, you just have to add wood.  I was lucky enough to find stone by the Tall Bird to make this one on first day.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ DigitalHarbor7 engineering-status-pages</title>
    <id>https://waylonwalker.com/digitalharbor7-engineering-status-pages/</id>
    <updated>2025-02-12T03:19:59Z</updated>
    <published>2025-02-12T03:19:59Z</published>
    <link href="https://waylonwalker.com/digitalharbor7-engineering-status-pages/" rel="alternate" type="text/html"></link>
    <summary type="text">I like DigitalHarbor7&#39;s project engineering-status-pages.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/DigitalHarbor7&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;DigitalHarbor7’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/DigitalHarbor7/engineering-status-pages&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;engineering-status-pages&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Static sites for engineering project status updates&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>aptitude why</title>
    <id>https://waylonwalker.com/aptitude-why/</id>
    <updated>2025-02-11T13:55:04Z</updated>
    <published>2025-02-11T13:55:04Z</published>
    <link href="https://waylonwalker.com/aptitude-why/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I ran into an interesting question, why am I being asked to configure tzdata while installing npm. Turns out that the cli has a why command that very...</summary>
    <content type="html">&lt;p&gt;Today I ran into an interesting question, why am I being asked to configure&#xA;tzdata while installing npm.  Turns out that the &lt;code&gt;aptitude&lt;/code&gt; cli has a why&#xA;command that very handily nails down why you have something installed on a&#xA;debian based system.&lt;/p&gt;&#xA;&lt;h2 id=&#34;install-aptitude&#34;&gt;Install aptitude &lt;a href=&#34;#install-aptitude&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install aptitude&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;why-tzdata&#34;&gt;Why tzdata &lt;a href=&#34;#why-tzdata&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now we can query why we need tzdata and see the full chain with the root&#xA;package being &lt;code&gt;npm&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root@47685221fb82:/# aptitude why tzdata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i   npm        Depends  node-gyp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i A node-gyp   Depends  gyp &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&amp;gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 0.1+20200513gitcaa6002&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i A gyp        Depends  python3:any&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i A python3    Provides python3:any&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i A python3    Depends  python3.12 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&amp;gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 3.12.3-0~&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i A python3.12 Depends  tzdata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Dont Starve Together Session One - First Encounter With A Tall Bird</title>
    <id>https://waylonwalker.com/shots/first-encounter-with-a-tall-bird/</id>
    <updated>2025-02-11T09:40:05Z</updated>
    <published>2025-02-11T09:40:05Z</published>
    <link href="https://waylonwalker.com/shots/first-encounter-with-a-tall-bird/" rel="alternate" type="text/html"></link>
    <summary type="text">On the first day I made a look around my home biome, and ran into a Tall Bird</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/8bb62b1c-4a0f-4660-9f54-1c4ad04b28cf.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/8bb62b1c-4a0f-4660-9f54-1c4ad04b28cf.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/8bb62b1c-4a0f-4660-9f54-1c4ad04b28cf.mp4&#34; type=&#34;video/mp4&#34;&gt;First encounter with a Tall Bird&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;On the first day I made a look around my home biome, and ran into a Tall Bird&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>configure timezone</title>
    <id>https://waylonwalker.com/configure-tz/</id>
    <updated>2025-02-10T13:35:24Z</updated>
    <published>2025-02-10T13:35:24Z</published>
    <link href="https://waylonwalker.com/configure-tz/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I ran into this interactive prompt on ubuntu while installing node and npm, and I do not want to manually configure this interactively every time I run...</summary>
    <content type="html">&lt;p&gt;Today I ran into this interactive prompt on ubuntu while installing node and&#xA;npm, and I do not want to manually configure this interactively every time I&#xA;run an install, moreso in docker I do not have the interactive terminal to do&#xA;so.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Configuring tzdata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;------------------&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Please &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt; the geographic area in which you live. Subsequent configuration questions will narrow this down by presenting a list of cities, representing the &lt;span class=&#34;nb&#34;&gt;time&lt;/span&gt; zones in which they are located.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  1. Africa  2. America  3. Antarctica  4. Arctic  5. Asia  6. Atlantic  7. Australia  8. Europe  9. Indian  10. Pacific  11. Etc  12. Legacy&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Geographic area:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;why-tzdata&#34;&gt;Why tzdata &lt;a href=&#34;#why-tzdata&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Checking aptitude why tzdata it shows that the chain goes back through npm.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root@47685221fb82:/# aptitude why tzdata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i   npm        Depends  node-gyp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i A node-gyp   Depends  gyp &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&amp;gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 0.1+20200513gitcaa6002&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i A gyp        Depends  python3:any&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i A python3    Provides python3:any&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i A python3    Depends  python3.12 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&amp;gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 3.12.3-0~&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i A python3.12 Depends  tzdata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;the-solution-configure-tzdata&#34;&gt;The solution, configure tzdata &lt;a href=&#34;#the-solution-configure-tzdata&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;TZ&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;America/Chicago&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;DEBIAN_FRONTEND&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;noninteractive&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install tzdata -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -fs /usr/share/zoneinfo/&lt;span class=&#34;nv&#34;&gt;$TZ&lt;/span&gt; /etc/localtime&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg-reconfigure -f noninteractive tzdata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition tip&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;DEBIAN_FRONTEND=noninteractive&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;This is required, because apt installing tzdata will trigger the&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;interactive prompt.  You will manually configure it in the next two steps.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Dont Starve Together Session One Start</title>
    <id>https://waylonwalker.com/shots/dont-starve-together-session-one-start/</id>
    <updated>2025-02-10T09:40:05Z</updated>
    <published>2025-02-10T09:40:05Z</published>
    <link href="https://waylonwalker.com/shots/dont-starve-together-session-one-start/" rel="alternate" type="text/html"></link>
    <summary type="text">I always select the character _. He comes with an axe called _ she has some dark humor (but not too dark), I like her. She also does not wear out so you always have a weapon and way to chop wood with you.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/4408f5bd-4f20-4e88-8d0f-599155c5637c.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/4408f5bd-4f20-4e88-8d0f-599155c5637c.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/4408f5bd-4f20-4e88-8d0f-599155c5637c.mp4&#34; type=&#34;video/mp4&#34;&gt;Dont Starve Together Session One Start&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I always select the character &lt;em&gt;Woodie&lt;/em&gt;.  He comes with an axe called &lt;em&gt;Lucy&lt;/em&gt; she has some dark humor (but not too dark), I like her.  She also does not wear out so you always have a weapon and way to chop wood with you.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>dst session one</title>
    <id>https://waylonwalker.com/dst-session-one/</id>
    <updated>2025-02-09T09:40:05Z</updated>
    <published>2025-02-09T09:40:05Z</published>
    <link href="https://waylonwalker.com/dst-session-one/" rel="alternate" type="text/html"></link>
    <summary type="text">Wyatt is also documenting his run, while we aren&#39;t playing in the same world we are playing together.</summary>
    <content type="html">&lt;p&gt;Wyatt is also documenting his run, while we aren’t playing in the same world we&#xA;are playing together.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://wyattbubbylee.com/dst-forever-world/&#34;&gt;https://wyattbubbylee.com/dst-forever-world/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;loading-into-the-world&#34;&gt;Loading into the world &lt;a href=&#34;#loading-into-the-world&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I always select the character &lt;em&gt;Woodie&lt;/em&gt;.  He comes with an axe called &lt;em&gt;Lucy&lt;/em&gt; she&#xA;has some dark humor (but not too dark), I like her.  She also does not wear out&#xA;so you always have a weapon and way to chop wood with you.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/4408f5bd-4f20-4e88-8d0f-599155c5637c.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/4408f5bd-4f20-4e88-8d0f-599155c5637c.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/4408f5bd-4f20-4e88-8d0f-599155c5637c.mp4&#34; type=&#34;video/mp4&#34;&gt;dst-1-1.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;first-encounter-with-a-tall-bird&#34;&gt;First encounter with a Tall Bird &lt;a href=&#34;#first-encounter-with-a-tall-bird&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;On the first day I made a look around my home biome, and ran into a Tall Bird&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/8bb62b1c-4a0f-4660-9f54-1c4ad04b28cf.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/8bb62b1c-4a0f-4660-9f54-1c4ad04b28cf.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/8bb62b1c-4a0f-4660-9f54-1c4ad04b28cf.mp4&#34; type=&#34;video/mp4&#34;&gt;dst-1-2.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;tall-bird-stats&#34;&gt;Tall Bird Stats &lt;a href=&#34;#tall-bird-stats&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/9d18495d-300b-4719-8bf6-13408ad507f1.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/9d18495d-300b-4719-8bf6-13408ad507f1.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Here are the tall bird stats from the &lt;a href=&#34;https://dontstarve.fandom.com/wiki/Tallbird&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/dontstarve.fandom.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/dontstarve.fandom.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;wiki&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;setting-up-base&#34;&gt;Setting up base &lt;a href=&#34;#setting-up-base&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Just after the first night started I found my way back to the center of the map&#xA;and made a stone campfire.  I really like to use the stone campfires as they&#xA;last forever, you just have to add wood.  I was lucky enough to find stone by&#xA;the Tall Bird to make this one on first day.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/f6d07c07-1d0a-40c9-9930-36c1e48aa69e.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/f6d07c07-1d0a-40c9-9930-36c1e48aa69e.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/f6d07c07-1d0a-40c9-9930-36c1e48aa69e.mp4&#34; type=&#34;video/mp4&#34;&gt;dst-1-3.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;opening-up-the-garden&#34;&gt;Opening up the garden &lt;a href=&#34;#opening-up-the-garden&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;On day two I had enough materials gathered to make the garden digamajig to prep&#xA;the soil for gardening.  I planted the few seeds that I stole from the birds&#xA;right away.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/43e6e5db-4750-4a32-8f53-652fbd7ffaf7.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/43e6e5db-4750-4a32-8f53-652fbd7ffaf7.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/43e6e5db-4750-4a32-8f53-652fbd7ffaf7.mp4&#34; type=&#34;video/mp4&#34;&gt;dst-1-4.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;getting-a-hat&#34;&gt;Getting a hat &lt;a href=&#34;#getting-a-hat&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I had the grass for a hat, so I figured why not.  I’m not sure if  it really&#xA;helps this time of year, but I thought it looked good on Woodie.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/813977e6-f954-43e8-882d-82afb66814d6.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/813977e6-f954-43e8-882d-82afb66814d6.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/813977e6-f954-43e8-882d-82afb66814d6.mp4&#34; type=&#34;video/mp4&#34;&gt;dst-1-5.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;getting-into-it-with-a-clockwork-bishop&#34;&gt;Getting into it with a Clockwork Bishop &lt;a href=&#34;#getting-into-it-with-a-clockwork-bishop&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As I was gathering resources with Lucy, minding my own business &lt;strong&gt;BAM&lt;/strong&gt; I got&#xA;hit with an attack from a Clockwork Bishop, man these things hit hard and have&#xA;really good aim.  I took three hits before getting away, leaving me with very&#xA;low heath at the end of this play session.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/36f4e4b8-16ee-4183-8de3-c2f96edd36e2.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/36f4e4b8-16ee-4183-8de3-c2f96edd36e2.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/36f4e4b8-16ee-4183-8de3-c2f96edd36e2.mp4&#34; type=&#34;video/mp4&#34;&gt;dst-1-6.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/805aadc7-9dff-44ee-8640-8f8ec1d21de8.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/805aadc7-9dff-44ee-8640-8f8ec1d21de8.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Here is the clockwork bishop stats from the &lt;a href=&#34;https://dontstarve.fandom.com/wiki/Clockwork_Bishop&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/dontstarve.fandom.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/dontstarve.fandom.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;wiki&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;session-two&#34;&gt;Session Two &lt;a href=&#34;#session-two&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;To kick off the second session, I noticed that when you have a torch you can&#xA;light your cooking pot, what I did not realize was that this burns your cooking&#xA;pot to smitherines.  Nothing left but a frame of &lt;strong&gt;useless&lt;/strong&gt; ashes.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/24fa3268-04a5-4c23-b62c-c60bfdad0084.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/24fa3268-04a5-4c23-b62c-c60bfdad0084.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/24fa3268-04a5-4c23-b62c-c60bfdad0084.mp4&#34; type=&#34;video/mp4&#34;&gt;dst-2-1.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;the-treeguard&#34;&gt;The TreeGuard &lt;a href=&#34;#the-treeguard&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;After that terrible mistake I was off with Lucy collecting wood when I awoken&#xA;the &lt;a href=&#34;https://dontstarve.fandom.com/wiki/Treeguard&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/dontstarve.fandom.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/dontstarve.fandom.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;TreeGuard&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/f12b162b-c1be-431d-91ae-a8559490befe.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/f12b162b-c1be-431d-91ae-a8559490befe.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/f12b162b-c1be-431d-91ae-a8559490befe.mp4&#34; type=&#34;video/mp4&#34;&gt;dst-2-2.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/61712606-6aeb-43b1-bea0-5f879d52345b.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/61712606-6aeb-43b1-bea0-5f879d52345b.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;The dude is slow, has terrible aim, but he is so persistent.  No matter how far&#xA;you get away he just shows up trying to kill you.&lt;/p&gt;&#xA;&lt;p&gt;I needed to get my cooking pot back, so the next step was to get charcoal.  So&#xA;while I was collecting charcoal I did my best to try to take down the TreeGuard&#xA;by burning him.  But to no avail, he lives on.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/9c8b4b37-beb4-41e3-b264-388811eb8f62.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/9c8b4b37-beb4-41e3-b264-388811eb8f62.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/9c8b4b37-beb4-41e3-b264-388811eb8f62.mp4&#34; type=&#34;video/mp4&#34;&gt;dst-2-3.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Once back at camp with my new cooking pot, he snuck up on me with his gigantic&#xA;sluggish form, one wrong keystroke on mybehalf and I walked straight into his&#xA;attack and I was done for.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/510c8290-01b1-4350-b668-ac8ca53cf6c1.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/510c8290-01b1-4350-b668-ac8ca53cf6c1.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/510c8290-01b1-4350-b668-ac8ca53cf6c1.mp4&#34; type=&#34;video/mp4&#34;&gt;dst-2-4.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;After that embarrasing death I made my way over to a touchstone I found and&#xA;Woodie is back from the dead, but without his beloved Lucy, to get her we will&#xA;need to go&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/33c62075-535f-47c9-847e-3f0b0a05ec10.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/33c62075-535f-47c9-847e-3f0b0a05ec10.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/33c62075-535f-47c9-847e-3f0b0a05ec10.mp4&#34; type=&#34;video/mp4&#34;&gt;dst-2-5.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>bc</title>
    <id>https://waylonwalker.com/bc/</id>
    <updated>2025-02-08T09:30:08Z</updated>
    <published>2025-02-08T09:30:08Z</published>
    <link href="https://waylonwalker.com/bc/" rel="alternate" type="text/html"></link>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=03KsS09YS4E&amp;amp;t=610s&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://www.youtube.com/watch?v=03KsS09YS4E&amp;amp;t=610s&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Today I learned about the basic calculator, bc.  At the very end of this video&#xA;prime uses it to add numbers in vim.&lt;/p&gt;&#xA;&lt;h2 id=&#34;repl&#34;&gt;REPL &lt;a href=&#34;#repl&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can start a calculator repl at the command line, by running bc.&lt;/p&gt;&#xA;&lt;h2 id=&#34;vim&#34;&gt;Vim &lt;a href=&#34;#vim&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Since bc supports standard unix pipes you can easily pipe data from vim into bc&#xA;and back out using &lt;code&gt;!!bc&lt;/code&gt;.  All you need is a string of math on the line you&#xA;want to calculate, go to normal mode and run &lt;code&gt;!!bc&lt;/code&gt; to get the answer.&lt;/p&gt;&#xA;&lt;p&gt;Traditionally I will open my system calculator or ipython to do something like&#xA;this.&lt;/p&gt;&#xA;&lt;p&gt;To keep the equation and the result in the same line you can send the equation&#xA;to stderr and the result to stdout using tee.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;:.!tee &amp;gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;cat &amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ carpedm20 emoji</title>
    <id>https://waylonwalker.com/carpedm20-emoji/</id>
    <updated>2025-02-07T22:08:01Z</updated>
    <published>2025-02-07T22:08:01Z</published>
    <link href="https://waylonwalker.com/carpedm20-emoji/" rel="alternate" type="text/html"></link>
    <summary type="text">emoji by carpedm20 is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/carpedm20/emoji&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;emoji&lt;/a&gt; by &lt;a href=&#34;https://github.com/carpedm20&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;carpedm20&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;emoji terminal output for Python&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ uktrade sqlite-s3vfs</title>
    <id>https://waylonwalker.com/uktrade-sqlite-s3vfs/</id>
    <updated>2025-02-07T17:09:49Z</updated>
    <published>2025-02-07T17:09:49Z</published>
    <link href="https://waylonwalker.com/uktrade-sqlite-s3vfs/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on sqlite-s3vfs by uktrade.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/uktrade/sqlite-s3vfs&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sqlite-s3vfs&lt;/a&gt; by &lt;a href=&#34;https://github.com/uktrade&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;uktrade&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Python writable virtual filesystem for SQLite on S3&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>markdown split panel</title>
    <id>https://waylonwalker.com/markdown-split-panel/</id>
    <updated>2025-02-03T13:21:23Z</updated>
    <published>2025-02-03T13:21:23Z</published>
    <link href="https://waylonwalker.com/markdown-split-panel/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I was playing with markdown split panels. I want to be able to compare and constrast occasionually, today the inspiration hit to do this using...</summary>
    <content type="html">&lt;p&gt;Today I was playing with markdown split panels.  I want to be able to compare&#xA;and constrast occasionually, today the inspiration hit to do this using&#xA;admonitions.&lt;/p&gt;&#xA;&lt;!-- ![screenshot-2025-02-04T02-28-26-951Z.png](https://dropper.waylonwalker.com/api/file/46ead069-5731-4028-886a-f76d56792691.png){.more-cinematic} --&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/e3d40c22-643d-433c-8eb4-c3ddf91d0527.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img src=&#34;https://dropper.waylonwalker.com/api/file/e3d40c22-643d-433c-8eb4-c3ddf91d0527.png&#34; alt=&#34;screenshot-2025-02-04T02-28-46-750Z.png&#34; class=&#34;more-cinematic glightbox&#34;/ data-glightbox=&#34;description: screenshot-2025-02-04T02-28-46-750Z.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p class=&#34;rounded-xl&#34;&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Mobile Users 🔄&lt;/p&gt;&#xA;&lt;p&gt;You will need to rotate your device to see the side by side feature.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;the-markdown&#34;&gt;The Markdown &lt;a href=&#34;#the-markdown&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is what I am going for, one admonition that is easy to remember, that&#xA;nests inside of itself , and I can put as much markdown on the inside that I&#xA;want.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;!!! vsplit I Have two opinions&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    !!! vsplit Left Opinion&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        supporting arguments&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; lorem ipsum&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; ipsum dolor&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;- [x]&lt;/span&gt; lorem ipsum&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;- [ ]&lt;/span&gt; ipsum dolor&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    !!! vsplit Right Opinion&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        supporting arguments&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; lorem ipsum&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; ipsum dolor&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;- [ ]&lt;/span&gt; lorem ipsum&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;- [x]&lt;/span&gt; ipsum dolor&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here is the result of that markdown.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition vsplit&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;I Have two opinions&lt;/p&gt;&#xA;&lt;div class=&#34;admonition vsplit&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Left Opinion&lt;/p&gt;&#xA;&lt;p&gt;supporting arguments&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;lorem ipsum&lt;/li&gt;&#xA;&lt;li&gt;ipsum dolor&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;/&gt; lorem ipsum&lt;/li&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;/&gt; ipsum dolor&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition vsplit&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Right Opinion&lt;/p&gt;&#xA;&lt;p&gt;supporting arguments&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;lorem ipsum&lt;/li&gt;&#xA;&lt;li&gt;ipsum dolor&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;/&gt; lorem ipsum&lt;/li&gt;&#xA;&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;/&gt; ipsum dolor&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p class=&#34;clean&#34;&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition vsplit&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Vsplit&lt;/p&gt;&#xA;&lt;div class=&#34;admonition vsplit&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Hello World&lt;/p&gt;&#xA;&lt;p&gt;Here is a hello world application written in the typer cli framework&#xA;for cli.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition vsplit&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Vsplit&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    ``` python&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;#!/usr/bin/env -S uv run –quiet –script&lt;/p&gt;&#xA;&lt;h1 id=&#34;heading&#34;&gt;///&lt;/h1&gt;&#xA;&lt;h1 id=&#34;requires-python--312&#34;&gt;requires-python = “&amp;gt;=3.12”&lt;/h1&gt;&#xA;&lt;h1 id=&#34;dependencies--&#34;&gt;dependencies = [&lt;/h1&gt;&#xA;&lt;h1 id=&#34;typer&#34;&gt;“typer”,&lt;/h1&gt;&#xA;&lt;h1 id=&#34;heading-1&#34;&gt;]&lt;/h1&gt;&#xA;&lt;h1 id=&#34;heading-2&#34;&gt;///&lt;/h1&gt;&#xA;&lt;p&gt;import typer&lt;/p&gt;&#xA;&lt;p&gt;app = typer.Typer()&lt;/p&gt;&#xA;&lt;p&gt;@app.command()&#xA;def hello(name: str = “World”):&#xA;“““Prints a greeting message.”””&#xA;typer.echo(f&amp;#34;Hello, {name}!&amp;#34;)&lt;/p&gt;&#xA;&lt;p&gt;if &lt;strong&gt;name&lt;/strong&gt; == “&lt;strong&gt;main&lt;/strong&gt;”:&#xA;app()&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Make MinIO Access Key</title>
    <id>https://waylonwalker.com/make-minio-access-key/</id>
    <updated>2025-02-02T19:18:05Z</updated>
    <published>2025-02-02T19:18:05Z</published>
    <link href="https://waylonwalker.com/make-minio-access-key/" rel="alternate" type="text/html"></link>
    <summary type="text">Today in my homelab I wanted to setup a new service that needed a MinIO access key. So I created a new user and a new access key with the MinIO CLI rather...</summary>
    <content type="html">&lt;p&gt;Today in my &lt;a href=&#34;/homelab/&#34; class=&#34;glossary-term&#34; title=&#34;A place to self host applications. For me this is primarily self built web applications, and applications for sharing files with my family. Techno Tim has a...&#34;&gt;homelab&lt;/a&gt; I wanted to setup a new service that needed a MinIO access&#xA;key. So I created a new user and a new access key with the MinIO CLI rather&#xA;than poking through the ui like I have before.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/2f706c5d-c591-4465-8d2b-eb18ce26aeca.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img src=&#34;https://dropper.waylonwalker.com/api/file/2f706c5d-c591-4465-8d2b-eb18ce26aeca.png&#34; alt=&#34;screenshot-2025-02-03T02-13-38-628Z.png&#34; class=&#34;more-cinematic glightbox&#34;/ data-glightbox=&#34;description: screenshot-2025-02-03T02-13-38-628Z.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;global-level-vs-user-level&#34;&gt;Global Level vs User Level &lt;a href=&#34;#global-level-vs-user-level&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The MinIO CLI has two levels of access, global and user level. Most of the&#xA;commands in this post will have several ways to do similar tasks that would&#xA;potentially work.  We are going to prefer to use the user level commands for&#xA;more control.  For some commands such as listing Keys it is handy to use the&#xA;global level.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-policy&#34;&gt;The Policy &lt;a href=&#34;#the-policy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;First we are going to make a new policy file named &lt;code&gt;mypages_rw_policy.json&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Version&amp;#34;&lt;/span&gt;: &lt;span class=&#34;s2&#34;&gt;&amp;#34;2012-10-17&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Statement&amp;#34;&lt;/span&gt;: &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;Action&amp;#34;&lt;/span&gt;: &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;s3:GetBucketLocation&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;s3:ListBucket&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;Effect&amp;#34;&lt;/span&gt;: &lt;span class=&#34;s2&#34;&gt;&amp;#34;Allow&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;Resource&amp;#34;&lt;/span&gt;: &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;arn:aws:s3:::mybucket&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;Action&amp;#34;&lt;/span&gt;: &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;s3:GetObject&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;s3:PutObject&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;s3:DeleteObject&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;s3:ListMultipartUploadParts&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;s3:AbortMultipartUpload&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;Effect&amp;#34;&lt;/span&gt;: &lt;span class=&#34;s2&#34;&gt;&amp;#34;Allow&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;Resource&amp;#34;&lt;/span&gt;: &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;arn:aws:s3:::mybucket/*&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;set-the-minio-alias&#34;&gt;Set the Minio Alias &lt;a href=&#34;#set-the-minio-alias&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Before we can create new access keys we will need to start by settin up an&#xA;alias in minio that has admin rights to the minio server.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# default values&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;MINIO_ACCESS_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;minioadmin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;MINIO_SECRET_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;minioadmin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mc &lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; myminio https://myminio.example.com &lt;span class=&#34;nv&#34;&gt;$MINIO_ACCESS_KEY&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$MINIO_SECRET_KEY&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Check to see if your alias exists.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mc &lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; list&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;the-script&#34;&gt;The Script &lt;a href=&#34;#the-script&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now we are going to pick a SECRETKEY and a NEWUSERNAME, create the policy,&#xA;create the user, attach the policy to the user and add the user to the alias.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;NEWUSERNAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;MYPAGESUSER&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;NEWPASSWORD&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;mysupersecretkey&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; USERNAME: &lt;span class=&#34;nv&#34;&gt;$NEWUSERNAME&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; PASSWORD: &lt;span class=&#34;nv&#34;&gt;$NEWPASSWORD&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# create a new policy for read/write to the bucket&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mc admin policy create myminio mybucket-readwrite mypages_rw_policy.json&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# create a new user&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mc admin user add myminio &lt;span class=&#34;nv&#34;&gt;$NEWUSERNAME&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$NEWPASSWORD&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# attach the policy to the user, giving them read/write to the bucket&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mc admin policy attach myminio mybucket-readwrite --user &lt;span class=&#34;nv&#34;&gt;$NEWUSERNAME&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# add the user to the alias&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mc config host add myminio https://minio.wayl.one &lt;span class=&#34;nv&#34;&gt;$NEWUSERNAME&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$NEWPASSWORD&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# create a new access key for the user with thier permissions&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mc admin user svcacct add                       &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;myminio MYPAGESUSER                     &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;--name mypagesRWKey                       &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;--description &lt;span class=&#34;s2&#34;&gt;&amp;#34;MYPAGESUSER Key for myminio&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;--expiry 2025-03-01&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;NEWSECRETKEY&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3e11************************************************************&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Access Key: IL4*****************&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Secret Key: M3D*************************************&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Expiration: 2025-03-01 06:00:00 +0000 UTC&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition attention&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Attention&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;* This is the secret key, do not share it with anyone.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This secret key will only be displayed once here, make sure you copy it&#xA;to a secure location now.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;give-it-a-test&#34;&gt;Give it a test &lt;a href=&#34;#give-it-a-test&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now we can test that it works, by creating a file and copying it into the&#xA;bucket.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# set up to work with the aws cli&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;AWS_DEFAULT_REGION&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;us-east-1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;AWS_ACCESS_KEY_ID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;IL4*****************&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;AWS_SECRET_ACCESS_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;M3D*************************************&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;AWS_ENDPOINT_URL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;https://myminio.example.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# create a test file&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;You How&amp;#34;&lt;/span&gt; &amp;gt; hi-hello.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# upload the file&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aws s3 cp hi-hello.txt s3://mybucket/hi-hello.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# test the file exists&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aws s3 ls s3://mybucket&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# output&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 2025-02-02 19:25:02          8 hi-hello.txt&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;I am using the aws cli to test, I installed it with pip.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx install awscli&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;h2 id=&#34;managing-access-keys&#34;&gt;Managing Access Keys &lt;a href=&#34;#managing-access-keys&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can list all of the access keys for a user, or all users.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# for one user&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mc admin accesskey ls myminio/ MYPAGESUSER&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# for all users&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mc admin accesskey ls myminio/ --all&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The output will show you all of the access keys for each user.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;User: MYPAGESUSER&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Access Keys:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    IL4*****************, expires: &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; weeks from now, sts: &lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can also get a list of the service accounts for a user with this command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mc admin user svcacct ls myminio/ MYPAGESUSER&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   Access Key        &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; Expiry&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;IL4***************** &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; 2025-03-01 06:00:00 +0000 UTC&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;You cannot see all of these keys from the web ui, the cli seems to be the&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;only way to display all access keys, including access keys for other users.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;creating-an-ro-access-key&#34;&gt;Creating an RO Access Key &lt;a href=&#34;#creating-an-ro-access-key&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I ran into errors when trying to create a new key with exactly the same&#xA;permissions as the user, I’m not sure if adding a policy that does not match&#xA;the user is allowed or not.&lt;/p&gt;&#xA;&lt;p&gt;I made a new policy that has read only access to the bucket as &lt;code&gt;mypages_ro_policy.json&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;#34;Version&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;2012-10-17&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;#34;Statement&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;Action&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;s3:GetBucketLocation&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;s3:ListBucket&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;Effect&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Allow&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;Resource&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;arn:aws:s3:::mypages&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;Action&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;s3:GetObject&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;s3:ListMultipartUploadParts&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;Effect&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Allow&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;Resource&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;arn:aws:s3:::mypages/*&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This command will use the above policy to create a new read only access key.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mc admin user svcacct add &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  myminio MYPAGESUSER &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  --name mypagesRWKey &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  --description &lt;span class=&#34;s2&#34;&gt;&amp;#34;MYPAGESUSER READ ONLY Key for myminio&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  --expiry 2025-03-01 &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  --policy mypages_ro_policy.json&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The output will show you the access key and secret key.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Access Key: KDM*****************&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Secret Key: 8Ww*************************************&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Expiration: 2025-03-01 06:00:00 +0000 UTC&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition attention&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Attention&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;* This is the secret key, do not share it with anyone.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;This secret key will only be displayed once here, make sure you copy it&#xA;to a secure location now.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;removing-a-service-account&#34;&gt;Removing a service account &lt;a href=&#34;#removing-a-service-account&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you want to remove a service account, you can use the &lt;code&gt;rm&lt;/code&gt; command to remove&#xA;the Access Key, by alias and Access Key.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mc admin user svcacct rm myminio/ QH6*****************&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;getting-info&#34;&gt;Getting info &lt;a href=&#34;#getting-info&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can get the info for a user or service accounts using the &lt;code&gt;info&lt;/code&gt;&#xA;subcommands.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;⬢ &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;devtainer&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; ❯ mc admin user info minio-wayl-one/ MYPAGESUSER&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AccessKey: MYPAGESUSER&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Status: enabled&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PolicyName: mypages-readwrite&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MemberOf: &lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;⬢ &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;devtainer&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; ❯ mc admin user svcacct ls minio-wayl-one/ MYPAGESUSER&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   Access Key        &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; Expiry&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;KDM***************** &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; 2025-03-01 06:00:00 +0000 UTC&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;IL4***************** &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; 2025-03-01 06:00:00 +0000 UTC&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;⬢ &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;devtainer&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; ❯ mc admin user svcacct info myminio/ IL4*****************&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AccessKey: IL4*****************&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ParentUser: MYPAGESUSER&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Status: on&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Name: mypagesRWKey&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Description: MYPAGESUSER Key &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; myminio&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Policy: implied&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Expiration: &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; weeks from now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;⬢ &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;devtainer&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; ❯ mc admin user svcacct info myminio/ KDM*****************&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AccessKey: KDM*****************&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ParentUser: MYPAGESUSER&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Status: on&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Name: mypagesRWKey&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Description: MYPAGESUSER READ ONLY Key &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; myminio&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Policy: embedded&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Expiration: &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; weeks from now&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ cloudnative-pg cloudnative-pg</title>
    <id>https://waylonwalker.com/cloudnative-pg-cloudnative-pg/</id>
    <updated>2025-02-02T18:40:11Z</updated>
    <published>2025-02-02T18:40:11Z</published>
    <link href="https://waylonwalker.com/cloudnative-pg-cloudnative-pg/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out cloudnative-pg and their project cloudnative-pg.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/cloudnative-pg&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cloudnative-pg&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/cloudnative-pg/cloudnative-pg&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cloudnative-pg&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;CloudNativePG is a comprehensive platform designed to seamlessly manage PostgreSQL databases within Kubernetes environments, covering the entire operational lifecycle from initial deployment to ongoing maintenance&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ open-webui open-webui</title>
    <id>https://waylonwalker.com/open-webui-open-webui/</id>
    <updated>2025-02-02T15:38:37Z</updated>
    <published>2025-02-02T15:38:37Z</published>
    <link href="https://waylonwalker.com/open-webui-open-webui/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred open-webui by open-webui. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/open-webui/open-webui&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;open-webui&lt;/a&gt; by &lt;a href=&#34;https://github.com/open-webui&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;open-webui&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;User-friendly AI Interface (Supports Ollama, OpenAI API, …)&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ fcsonline tmux-thumbs</title>
    <id>https://waylonwalker.com/fcsonline-tmux-thumbs/</id>
    <updated>2025-02-02T15:36:30Z</updated>
    <published>2025-02-02T15:36:30Z</published>
    <link href="https://waylonwalker.com/fcsonline-tmux-thumbs/" rel="alternate" type="text/html"></link>
    <summary type="text">I like fcsonline&#39;s project tmux-thumbs.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/fcsonline&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fcsonline’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/fcsonline/tmux-thumbs&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-thumbs&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A lightning fast version of tmux-fingers written in Rust, copy/pasting tmux like vimium/vimperator&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tailwind aspect</title>
    <id>https://waylonwalker.com/tailwind-aspect/</id>
    <updated>2025-02-02T14:35:02Z</updated>
    <published>2025-02-02T14:35:02Z</published>
    <link href="https://waylonwalker.com/tailwind-aspect/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been back to putting some images on my blog lately and thinking about making them a bit thinner through the use of aspect ratio for simplicity. I&#39;m...</summary>
    <content type="html">&lt;p&gt;I’ve been back to putting some images on my blog lately and thinking about&#xA;making them a bit thinner through the use of aspect ratio for simplicity.  I’m&#xA;leaning pretty heavy on tailwindcss these days due to some weird quirks of&#xA;markdown-it-attrs I cannot have slashes in classes from markdown so I made a&#xA;&lt;code&gt;.cinematic&lt;/code&gt; class to achieve this.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;cinematic&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;err&#34;&gt;@apply&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;aspect-[2.39/1]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Example&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img src=&#34;https://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png&#34; alt=&#34;screenshot-2025-01-31T14-50-00-094Z.png&#34; class=&#34;cinematic glightbox&#34;/ data-glightbox=&#34;description: screenshot-2025-01-31T14-50-00-094Z.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>markdown it attrs with slashes dont work</title>
    <id>https://waylonwalker.com/markdown-it-attrs-with-slashes-dont-work/</id>
    <updated>2025-02-01T11:21:10Z</updated>
    <published>2025-02-01T11:21:10Z</published>
    <link href="https://waylonwalker.com/markdown-it-attrs-with-slashes-dont-work/" rel="alternate" type="text/html"></link>
    <summary type="text">Attrs does not like &#39;/&#39; characters in its classes, so to use some tailwind classes with custom values we must make new classes in our tailwind input css.</summary>
    <content type="html">&lt;p&gt;Attrs does not like ‘/’ characters in its classes, so to use some tailwind&#xA;classes with custom values we must make new classes in our tailwind input css.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;cinematic&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;err&#34;&gt;@apply&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;aspect-[2.39/1]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Given the following markdown with attrs added to the image and to the paragraph&#xA;block.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;![&lt;span class=&#34;nt&#34;&gt;screenshot-2025-01-31T14-50-00-094Z.png&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png&lt;/span&gt;){.aspect-[2.39/1]}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;![&lt;span class=&#34;nt&#34;&gt;screenshot-2025-01-31T14-50-00-094Z.png&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png&lt;/span&gt;){.cinematic}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{.cinematic}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;![&lt;span class=&#34;nt&#34;&gt;screenshot-2025-01-31T14-50-00-094Z.png&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We get the following output with only the middle one working correctly.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png&#34; alt=&#34;screenshot-2025-01-31T14-50-00-094Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-01-31T14-50-00-094Z.png&#34;&gt;&lt;/a&gt;{.aspect-[2.39/1]}&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img src=&#34;https://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png&#34; alt=&#34;screenshot-2025-01-31T14-50-00-094Z.png&#34; class=&#34;cinematic glightbox&#34;/ data-glightbox=&#34;description: screenshot-2025-01-31T14-50-00-094Z.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p class=&#34;cinematic&#34;&gt;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png&#34; alt=&#34;screenshot-2025-01-31T14-50-00-094Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-01-31T14-50-00-094Z.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;The inline version of `.cinematic` works, but `.aspect-[2.39/1]` does not,&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;it turns into text after the image.  The block version with the class&#xA;before the image applies to the paragraph, not the image.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>markata 0.8.0</title>
    <id>https://waylonwalker.com/markata-0-8-0/</id>
    <updated>2025-01-31T20:17:00Z</updated>
    <published>2025-01-31T20:17:00Z</published>
    <link href="https://waylonwalker.com/markata-0-8-0/" rel="alternate" type="text/html"></link>
    <summary type="text">I realize that I never did a post on markata 0.8.0, so here it is. 0.8.0 was released on Jan 2, 2024, just over a year ago at this point. This was the...</summary>
    <content type="html">&lt;p&gt;I realize that I never did a post on markata  0.8.0, so here it is. 0.8.0 was&#xA;released on Jan 2, 2024, just over a year ago at this point.  This was the&#xA;release that we got pydantic support, and multi feeds.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dropper.waylonwalker.com/file/76e6f022-360f-4566-9b35-a06cecd48738.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img src=&#34;https://dropper.waylonwalker.com/file/76e6f022-360f-4566-9b35-a06cecd48738.png&#34; alt=&#34;screenshot-2025-02-01T02-37-59-690Z.png&#34; class=&#34;more-cinematic glightbox&#34;/ data-glightbox=&#34;description: screenshot-2025-02-01T02-37-59-690Z.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;pydantic-support-was-kinda-big&#34;&gt;Pydantic Support Was kinda big &lt;a href=&#34;#pydantic-support-was-kinda-big&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Markata is leaning on pydantic for configuration and Post models.  These&#xA;models are filled with validators such that you can give it an empty markdown&#xA;post and it will figure out some pretty sane default values for the&#xA;frontmatter. From there you can progressively enhance your post with more&#xA;information like title, date, tags, slug, description.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;validators are awesome!!&lt;/strong&gt; for instance I don’t set the description on many&#xA;of my posts by hand, I let the auto_description grab the first bit of text&#xA;from the post most of the time.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;multi-feeds&#34;&gt;Multi Feeds &lt;a href=&#34;#multi-feeds&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Markata==0.8.1 brought multiple feeds into the mix, and started to take place&#xA;of RSS and sitemap.  Feeds are a list of posts that are configured with a slug,&#xA;filter, sort, reverse, description, and a template.  These feeds then become&#xA;objects you can use to access posts, as well as &lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;html&lt;/a&gt; pages, RSS feeds and&#xA;sitemaps.&lt;/p&gt;&#xA;&lt;h2 id=&#34;jinja-templates&#34;&gt;Jinja Templates &lt;a href=&#34;#jinja-templates&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The final major change within this series is the change out from string&#xA;templates to proper jinja templates with partial templates that you can&#xA;include.  This has made maintaining templates much easier, as well as the&#xA;ability to customize.  Markata will load templates from both your local&#xA;templates directory then from its built in templates directory if it does not&#xA;find a template locally.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;markata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;feeds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;slug&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;python&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;filter&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;date&amp;lt;=today and &amp;#39;python&amp;#39; in str(tags).lower()&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;sort&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;date&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;reverse&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;description&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;A feed of all my python posts&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/python/&#34;&gt;https://waylonwalker.com/python/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/python/rss.xml&#34;&gt;https://waylonwalker.com/python/rss.xml&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/python/sitemap.xml&#34;&gt;https://waylonwalker.com/python/sitemap.xml&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/python/partial/&#34;&gt;https://waylonwalker.com/python/partial/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;directly-from-the-release-notes&#34;&gt;Directly from the release notes &lt;a href=&#34;#directly-from-the-release-notes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The rest of the post is details directly from the release notes.&lt;/p&gt;&#xA;&lt;h2 id=&#34;082&#34;&gt;0.8.2 &lt;a href=&#34;#082&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Fix: markata installs setuptools required by one dependency&lt;/li&gt;&#xA;&lt;li&gt;Fix: cleanup cli output&lt;/li&gt;&#xA;&lt;li&gt;Fix: speed up cli startup with some lazy imports&lt;/li&gt;&#xA;&lt;li&gt;Fix: all cache.adds were replaced with cache.set&lt;/li&gt;&#xA;&lt;li&gt;Fix: Updated to new typer format requiring name=&lt;/li&gt;&#xA;&lt;li&gt;Fix: teardown only runs if the build process was started, i.e. some cli’s&#xA;will not need to teardown&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;081&#34;&gt;0.8.1 &lt;a href=&#34;#081&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;feeds-have-partials&#34;&gt;Feeds have partials &lt;a href=&#34;#feeds-have-partials&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;The &lt;code&gt;feeds&lt;/code&gt; plugin now has configurable &lt;code&gt;partial_template&lt;/code&gt; that can be used to&#xA;render only the inside of the feeds page.  This is indented to allow you to&#xA;load small feeds into a page with &lt;a href=&#34;/htmx/&#34; class=&#34;glossary-term&#34; title=&#34;htmx is a frontend javascript library for creating dynamic web applications.&#34;&gt;htmx&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;better-jinja-templates&#34;&gt;Better Jinja Templates &lt;a href=&#34;#better-jinja-templates&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Markata now fully supports jinja templates with a loader that will load from&#xA;your templates directory, the markata built-in templates, and from a&#xA;dynamically generated templates directory in your .markata.cache directory.&lt;/p&gt;&#xA;&lt;h4 id=&#34;cli&#34;&gt;cli &lt;a href=&#34;#cli&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;You can list out your templates and configuration with the following command&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;markata templates show&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;variables&#34;&gt;Variables &lt;a href=&#34;#variables&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;The following variables are available within jinja templates for post&#xA;templates.  This is now consistent across all three built in plugins that&#xA;render jinja templates.&lt;/p&gt;&#xA;&lt;h5 id=&#34;post-template&#34;&gt;post_template&lt;/h5&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;__version__&lt;/code&gt; - the version of markata&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;markata&lt;/code&gt; - the markata instance&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;config&lt;/code&gt; - the markata config&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;body&lt;/code&gt; - the body of the post&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;post&lt;/code&gt; - the current post object&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h5 id=&#34;feeds&#34;&gt;feeds&lt;/h5&gt;&#xA;&lt;p&gt;Similarly from within rendering feeds.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;__version__&lt;/code&gt; - the version of markata&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;markata&lt;/code&gt; - the markata instance&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;config&lt;/code&gt; - the markata config&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;posts&lt;/code&gt; - the list of posts&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;post&lt;/code&gt; - a pseudo post object with title, slug, description, and date for template consistency&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;feed&lt;/code&gt; - the current feed object&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h5 id=&#34;jinja-md&#34;&gt;jinja_md&lt;/h5&gt;&#xA;&lt;p&gt;Similar to posts from within jinja_md to render a markdown post as a template.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;__version__&lt;/code&gt; - the version of markata&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;markata&lt;/code&gt; - the markata instance&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;body&lt;/code&gt; - the body of the post&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;config&lt;/code&gt; - the markata config&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;post&lt;/code&gt; - the current post object&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;feeds-cli&#34;&gt;Feeds cli &lt;a href=&#34;#feeds-cli&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;The feeds cli will help show which templates each feed will be using.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ markata feeds show&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                          Feeds &lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;┏━━━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;┃            Feed ┃ posts ┃ config                                                        ┃&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;┡━━━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ project_gallery │ &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;     │ DEFAULT_TITLE: All Posts                                      │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ title: Project Gallery                                        │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ slug: project-gallery                                         │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ name: project_gallery                                         │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ filter: &lt;span class=&#34;s1&#34;&gt;&amp;#39;project-gallery&amp;#39;&lt;/span&gt; in str&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;path&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;                        │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ sort: title                                                   │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ reverse: False                                                │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ rss: True                                                     │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ sitemap: True                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ card_template: card.html                                      │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ template: feed.html                                           │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ rss_template: rss.xml                                         │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ sitemap_template: sitemap.xml                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ xsl_template: rss.xsl                                         │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │                                                               │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│            docs │ &lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;    │ DEFAULT_TITLE: All Posts                                      │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ title: Documentation                                          │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ slug: docs                                                    │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ name: docs                                                    │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ filter: &lt;span class=&#34;s2&#34;&gt;&amp;#34;markata&amp;#34;&lt;/span&gt; not in slug and &lt;span class=&#34;s2&#34;&gt;&amp;#34;tests&amp;#34;&lt;/span&gt; not in slug and ... │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ sort: slug                                                    │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ reverse: False                                                │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ rss: True                                                     │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ sitemap: True                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ card_template: card.html                                      │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ template: feed.html                                           │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ rss_template: rss.xml                                         │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ sitemap_template: sitemap.xml                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ xsl_template: rss.xsl                                         │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │                                                               │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│         autodoc │ &lt;span class=&#34;m&#34;&gt;17&lt;/span&gt;    │ DEFAULT_TITLE: All Posts                                      │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ title: AutoDoc Python Modules.                                │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ slug: autodoc                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ name: autodoc                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                 │       │ filter: &lt;span class=&#34;s2&#34;&gt;&amp;#34;markata&amp;#34;&lt;/span&gt; in slug and &lt;span class=&#34;s2&#34;&gt;&amp;#34;plugin&amp;#34;&lt;/span&gt; not in slug and &lt;span class=&#34;s2&#34;&gt;&amp;#34;te... │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ sort: slug                                                    │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ reverse: False                                                │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ rss: True                                                     │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ sitemap: True                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ card_template: card.html                                      │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ template: feed.html                                           │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ rss_template: rss.xml                                         │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ sitemap_template: sitemap.xml                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ xsl_template: rss.xsl                                         │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │                                                               │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│             all │ 73    │ DEFAULT_TITLE: All Posts                                      │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ title: All Markata Modules                                    │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ slug: all                                                     │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ name: all                                                     │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ filter: True                                                  │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ sort: date                                                    │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ reverse: False                                                │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ rss: True                                                     │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ sitemap: True                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ card_template: card.html                                      │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ template: feed.html                                           │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ rss_template: rss.xml                                         │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ sitemap_template: sitemap.xml                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ xsl_template: rss.xsl                                         │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │                                                               │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│    core_modules │ 17    │ DEFAULT_TITLE: All Posts                                      │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ title: Markata Core Modules                                   │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ slug: core_modules                                            │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ name: core_modules                                            │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ filter: &amp;#39;plugin&amp;#39; not in slug and &amp;#39;test&amp;#39; not in slug and ti... │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ sort: date                                                    │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ reverse: False                                                │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ rss: True                                                     │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ sitemap: True                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ card_template: card.html                                      │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ template: feed.html                                           │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ rss_template: rss.xml                                         │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ sitemap_template: sitemap.xml                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ xsl_template: rss.xsl                                         │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │                                                               │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│         plugins │ 42    │ DEFAULT_TITLE: All Posts                                      │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ title: Markata Plugins                                        │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ slug: plugins                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ name: plugins                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ filter: &amp;#39;plugin&amp;#39; in slug and &amp;#39;test&amp;#39; not in slug               │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ sort: date                                                    │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ reverse: False                                                │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ rss: True                                                     │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ sitemap: True                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ card_template: card.html                                      │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ template: feed.html                                           │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ rss_template: rss.xml                                         │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ sitemap_template: sitemap.xml                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │ xsl_template: rss.xsl                                         │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;│                 │       │                                                               │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;└─────────────────┴───────┴───────────────────────────────────────────────────────────────┘&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;080&#34;&gt;0.8.0 &lt;a href=&#34;#080&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;pydantic support&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;pydantic-support&#34;&gt;Pydantic Support &lt;a href=&#34;#pydantic-support&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Now plugins are configured through a pydantic Config object.&lt;/p&gt;&#xA;&lt;h3 id=&#34;breaking-changes&#34;&gt;breaking changes &lt;a href=&#34;#breaking-changes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;There are a number of breaking changes going into 0.8.0. Use caution when&#xA;upgrading.&lt;/p&gt;&#xA;&lt;h4 id=&#34;glob-config-is-now-under-markataglob&#34;&gt;glob config is now under markata.glob &lt;a href=&#34;#glob-config-is-now-under-markataglob&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;- [markata]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;- glob_patterns = &amp;#34;pages/**/*.md&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+ [markata.glob]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+ glob_patterns = &amp;#34;pages/**/*.md&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;feeds-are-now-a-list&#34;&gt;Feeds are now a list &lt;a href=&#34;#feeds-are-now-a-list&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;Feeds are now a list of Objects within the configuration that you choose from&#xA;whether its toml or yaml.  Also templates_dir is now configurable, and once you&#xA;have a templates dir it is better to specify templates by name relative to your&#xA;templates_dir.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;markata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;templates_dir&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pages/templates&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;markata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;feeds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;published&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;archive_template.html&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;card_template&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;feed_card.html&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;date&amp;lt;=today and templateKey in [&amp;#39;blog-post&amp;#39;, &amp;#39;til&amp;#39;] and status.lower()==&amp;#39;published&amp;#39;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;sort&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;date&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;old&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;markata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;feeds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;published&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;pages/templates/archive_template.html&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;card_template&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pages/templates/feed_card.html&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;date&amp;lt;=today and templateKey in [&amp;#39;blog-post&amp;#39;, &amp;#39;til&amp;#39;] and status.lower()==&amp;#39;published&amp;#39;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;sort&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;date&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;new&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;markatasummaryfilter-count-is-now-a-list&#34;&gt;markata.summary.filter_count is now a list &lt;a href=&#34;#markatasummaryfilter-count-is-now-a-list&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;The old way was to set up a dict, where the keys were the name, now its a list&#xA;of Objects with an explicit name field.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;markata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;summary&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;filter_count&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;drafts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;published == &amp;#39;False&amp;#39;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;red&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Old&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;markata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;summary&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;filter_count&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;drafts&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;published == &amp;#39;False&amp;#39;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;red&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ asottile all-repos</title>
    <id>https://waylonwalker.com/asottile-all-repos/</id>
    <updated>2025-01-31T17:12:20Z</updated>
    <published>2025-01-31T17:12:20Z</published>
    <link href="https://waylonwalker.com/asottile-all-repos/" rel="alternate" type="text/html"></link>
    <summary type="text">asottile has done a fantastic job with all-repos. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/asottile&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;asottile&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/asottile/all-repos&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;all-repos&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Clone all your repositories and apply sweeping changes.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ turbot tailpipe</title>
    <id>https://waylonwalker.com/turbot-tailpipe/</id>
    <updated>2025-01-31T17:05:00Z</updated>
    <published>2025-01-31T17:05:00Z</published>
    <link href="https://waylonwalker.com/turbot-tailpipe/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on tailpipe, created by turbot.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/turbot/tailpipe&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tailpipe&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/turbot&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;turbot&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;select * from logs; Tailpipe is an open source SIEM for instant log insights, powered by DuckDB. Analyze millions of events in seconds, right from your terminal.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ muni-town roomy</title>
    <id>https://waylonwalker.com/muni-town-roomy/</id>
    <updated>2025-01-31T17:02:22Z</updated>
    <published>2025-01-31T17:02:22Z</published>
    <link href="https://waylonwalker.com/muni-town-roomy/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered roomy by muni-town, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/muni-town/roomy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;roomy&lt;/a&gt; by &lt;a href=&#34;https://github.com/muni-town&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;muni-town&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;ATproto-connected p2p group comms&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>markata search</title>
    <id>https://waylonwalker.com/markata-search/</id>
    <updated>2025-01-30T20:21:36Z</updated>
    <published>2025-01-30T20:21:36Z</published>
    <link href="https://waylonwalker.com/markata-search/" rel="alternate" type="text/html"></link>
    <summary type="text">A side effect of markata-didyoumean is that we are able to implement some rudimentary search based on slug, title, tags, and description.</summary>
    <content type="html">&lt;p&gt;A side effect of &lt;a href=&#34;/markata-didyoumean/&#34; class=&#34;wikilink&#34; data-title=&#34;Markata DidYouMean&#34; data-description=&#34;Coming in Markata 0.9.1 is far better documentation. i.e. Documentation that actually exists for everything. As part of poking around I realized that I often...&#34; data-date=&#34;2025-01-29&#34; data-preview=&#34;Coming in Markata 0.9.1 is far better documentation. i.e. Documentation that actually exists for everything. As part of poking around I realized that I often...&#34;&gt;Markata DidYouMean&lt;/a&gt; is that we are able to implement some&#xA;rudimentary search based on slug, title, tags, and description.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img src=&#34;https://dropper.waylonwalker.com/api/file/50cfa8dc-9d46-4f02-877b-688fa5510a83.png&#34; alt=&#34;screenshot-2025-01-31T14-50-00-094Z.png&#34; class=&#34;more-cinematic glightbox&#34;/ data-glightbox=&#34;description: screenshot-2025-01-31T14-50-00-094Z.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I made a video of the early work on using this side effect to search for content on markata.dev.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/fd677374-5ef1-41c7-8845-6de0e10f224b.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/fd677374-5ef1-41c7-8845-6de0e10f224b.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/fd677374-5ef1-41c7-8845-6de0e10f224b.mp4&#34; type=&#34;video/mp4&#34;&gt;Replay markata-search-1.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;This was first implemented to solve 404 pages giving users a way to try to find&#xA;the page that they tried to access.  But it turned out to be a decent way to&#xA;search through the docs.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Markata DidYouMean</title>
    <id>https://waylonwalker.com/markata-didyoumean/</id>
    <updated>2025-01-29T20:28:36Z</updated>
    <published>2025-01-29T20:28:36Z</published>
    <link href="https://waylonwalker.com/markata-didyoumean/" rel="alternate" type="text/html"></link>
    <summary type="text">Coming in Markata 0.9.1 is far better documentation. i.e. Documentation that actually exists for everything. As part of poking around I realized that I often...</summary>
    <content type="html">&lt;p&gt;Coming in Markata 0.9.1 is far better documentation. i.e. Documentation that&#xA;actually exists for everything.  As part of poking around I realized that I&#xA;often go to look up the docs for a plugin and forget that the path is&#xA;&lt;code&gt;/markta/plugins/feeds&lt;/code&gt;, sometimes I might try &lt;code&gt;/markata/feeds&lt;/code&gt; or&#xA;&lt;code&gt;/plugins/feeds.py&lt;/code&gt; or &lt;code&gt;/feeds&lt;/code&gt; or I might even forget the plugin name exactly&#xA;and try something like &lt;code&gt;feed&lt;/code&gt; and get a 404.  So I added a  &lt;code&gt;didyoumean&lt;/code&gt; plugin&#xA;to markata that takes care of this.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/9c1e92dd-4ea1-4b0f-80bc-e6c3414cf219.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img src=&#34;https://dropper.waylonwalker.com/api/file/9c1e92dd-4ea1-4b0f-80bc-e6c3414cf219.png&#34; alt=&#34;screenshot-2025-01-31T14-53-31-264Z.png&#34; class=&#34;more-cinematic glightbox&#34;/ data-glightbox=&#34;description: screenshot-2025-01-31T14-53-31-264Z.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I made a quick recording of this early feature, pay close attention to the url&#xA;as it automatically updates to the correct page.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/3e9a1af6-59e0-4d0a-9540-2514c492cc49.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/3e9a1af6-59e0-4d0a-9540-2514c492cc49.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/3e9a1af6-59e0-4d0a-9540-2514c492cc49.mp4&#34; type=&#34;video/mp4&#34;&gt;markata-didyoumean.mp4&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;happy-path&#34;&gt;Happy Path &lt;a href=&#34;#happy-path&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;direct forward&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you have one post called &lt;code&gt;/markata/plugins/feeds&lt;/code&gt;, and it is the only post&#xA;called feeds, any combination of &lt;code&gt;/markata/feeds&lt;/code&gt; or &lt;code&gt;/plugins/feeds&lt;/code&gt; or&#xA;&lt;code&gt;/feeds&lt;/code&gt; will all automatically redirect with an &lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;html&lt;/a&gt; page (not a server 3xx)&#xA;to the &lt;code&gt;/markata/plugins/feeds&lt;/code&gt; post.&lt;/p&gt;&#xA;&lt;p&gt;Here is the snippet that does the redirect.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;container mx-auto px-4 py-8&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;h1&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text-2xl font-bold mb-4&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;Redirecting...&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;h1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;mb-4&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;You will be redirected to &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;/markata/plugins/feeds&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text-blue-500 hover:underline&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;/markata/plugins/feeds&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;window&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;location&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/markata/plugins/feeds&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You won’t see it unless you are on a really bad network, or you have js&#xA;disabled, but this is what it would look like if you ever saw it.  Notice there&#xA;is a backup link if you have js disabled.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/52d95c41-e27a-4a6c-be39-5c57601fc33f.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/52d95c41-e27a-4a6c-be39-5c57601fc33f.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;multiple-similar-posts&#34;&gt;Multiple Similar Posts &lt;a href=&#34;#multiple-similar-posts&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;list of options&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you have multiple posts called &lt;code&gt;didyoumean&lt;/code&gt; from different directories, in&#xA;the video I made a clashing post at &lt;code&gt;/markata/cli/didyoumean&lt;/code&gt; with&#xA;&lt;code&gt;/markata/plugins/didyoumean&lt;/code&gt;.  If you go to &lt;code&gt;/didyoumean&lt;/code&gt; it will notice that&#xA;there are multiple options and present you with a list of all of the potential&#xA;pages that match.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/e05f8314-33a3-4dca-90b0-6009b8642c8a.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/e05f8314-33a3-4dca-90b0-6009b8642c8a.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;finally-no-matches&#34;&gt;Finally No Matches &lt;a href=&#34;#finally-no-matches&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;404.html&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Last ditch effort is to implement a 404 page.  This page will know all of the&#xA;possible paths in your project and give you a list of all the similar pages&#xA;more like a traditional &lt;code&gt;didyoumean&lt;/code&gt; plugin.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/a59c9736-da16-4dce-b867-29679e6b9ec3.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/a59c9736-da16-4dce-b867-29679e6b9ec3.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>cold builds</title>
    <id>https://waylonwalker.com/cold-builds/</id>
    <updated>2025-01-27T20:28:43Z</updated>
    <published>2025-01-27T20:28:43Z</published>
    <link href="https://waylonwalker.com/cold-builds/" rel="alternate" type="text/html"></link>
    <summary type="text">Here are a list of some cold builds from my site. I&#39;ve ran this site for a long time and would like to have some references to go back to, and wish I had...</summary>
    <content type="html">&lt;p&gt;Here are a list of some cold builds from my site.  I’ve ran this site for a&#xA;long time and would like to have some references to go back to, and wish I had&#xA;kept a few profiles of cold builds laying around to compare with. The time is&#xA;now lets keep some cold build links around for reference.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/cd8f9d96-948a-4e94-aa3d-2c352bb5657b.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img src=&#34;https://dropper.waylonwalker.com/api/file/cd8f9d96-948a-4e94-aa3d-2c352bb5657b.png&#34; alt=&#34;screenshot-2025-01-31T21-23-56-725Z.png&#34; class=&#34;more-cinematic glightbox&#34;/ data-glightbox=&#34;description: screenshot-2025-01-31T21-23-56-725Z.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;01272025&#34;&gt;01/27/2025 &lt;a href=&#34;#01272025&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ec314b08.waylonwalker-com.pages.dev/_profile/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/ec314b08.waylonwalker-com.pages.dev.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/ec314b08.waylonwalker-com.pages.dev.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://ec314b08.waylonwalker-com.pages.dev/_profile/&lt;/a&gt; - 429s - markata==0.9.0.dev5 has md_video open cache on every post issue&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://27f117fd.waylonwalker-com.pages.dev/_profile/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/27f117fd.waylonwalker-com.pages.dev.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/27f117fd.waylonwalker-com.pages.dev.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://27f117fd.waylonwalker-com.pages.dev/_profile/&lt;/a&gt; - 112s- markata==0.9.0.dev5 after fixing md_video issue&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://e6b8f64a.waylonwalker-com.pages.dev/_profile/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/e6b8f64a.waylonwalker-com.pages.dev.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/e6b8f64a.waylonwalker-com.pages.dev.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://e6b8f64a.waylonwalker-com.pages.dev/_profile/&lt;/a&gt; - 16s - markata==0.9.0.dev5 1 post not skipped, this one&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://10b778b4.waylonwalker-com.pages.dev/_profile/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/10b778b4.waylonwalker-com.pages.dev.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/10b778b4.waylonwalker-com.pages.dev.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://10b778b4.waylonwalker-com.pages.dev/_profile/&lt;/a&gt; - 5.65s - markata==0.9.0.dev5 fully hot cache build with no changes&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>pesos</title>
    <id>https://waylonwalker.com/pesos/</id>
    <updated>2025-01-25T17:20:55Z</updated>
    <published>2025-01-25T17:20:55Z</published>
    <link href="https://waylonwalker.com/pesos/" rel="alternate" type="text/html"></link>
    <summary type="text">Pesos is the act of Publish Elsewhere Syncicate to Own Site. It is an indieweb concept that I recently started applying to my own site.</summary>
    <content type="html">&lt;p&gt;Pesos is the act of Publish Elsewhere Syncicate to Own Site.  It is an indieweb&#xA;concept that I recently started applying to my own site.&lt;/p&gt;&#xA;&lt;p&gt;here does it skip again&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;See &amp;lt;https://indieweb.org/PESOS&amp;gt; for more information, they have a ton of&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;information about the indieweb&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;In short it is the concept of pulling data from other sites that you use and&#xA;republishing it to your own site.  This gives a single source of information&#xA;for you, and protection against sites and apis changing or rug pulling.  Other&#xA;people might have a lot more use cases for this, but I already begin a lot of&#xA;my data right on my site.&lt;/p&gt;&#xA;&lt;h2 id=&#34;github-stars&#34;&gt;GitHub stars &lt;a href=&#34;#github-stars&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I am using the github api to get a list of my stars and then create posts in&#xA;the github repo for my blog.  This allows me to keep track of things I star on&#xA;GitHub in my own way, and share them out with my rss feeds.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/2380f814-a8cb-45d1-bb5b-538d171933e3.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/2380f814-a8cb-45d1-bb5b-538d171933e3.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ veekaybee gitfeed</title>
    <id>https://waylonwalker.com/veekaybee-gitfeed/</id>
    <updated>2025-01-24T19:34:10Z</updated>
    <published>2025-01-24T19:34:10Z</published>
    <link href="https://waylonwalker.com/veekaybee-gitfeed/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out veekaybee and their project gitfeed.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/veekaybee&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;veekaybee&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/veekaybee/gitfeed&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gitfeed&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Feed of posts from Bluesky that have a GitHub link&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ggml-org llama.vim</title>
    <id>https://waylonwalker.com/ggml-org-llama-vim/</id>
    <updated>2025-01-24T01:01:28Z</updated>
    <published>2025-01-24T01:01:28Z</published>
    <link href="https://waylonwalker.com/ggml-org-llama-vim/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across llama.vim from ggml-org, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/ggml-org/llama.vim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;llama.vim&lt;/a&gt; from &lt;a href=&#34;https://github.com/ggml-org&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ggml-org&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;Vim plugin for LLM-assisted code/text completion&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>hover z-index and positioning</title>
    <id>https://waylonwalker.com/hover-z-index-and-positioning/</id>
    <updated>2025-01-23T15:54:07Z</updated>
    <published>2025-01-23T15:54:07Z</published>
    <link href="https://waylonwalker.com/hover-z-index-and-positioning/" rel="alternate" type="text/html"></link>
    <summary type="text">I broke my sick-wikilink-hover recently in a refactor, today I did some diving in to figure out what happened.</summary>
    <content type="html">&lt;p&gt;I broke my &lt;a href=&#34;/sick-wikilink-hover/&#34; class=&#34;wikilink&#34; data-title=&#34;sick wikilink hover&#34; data-description=&#34;Today I set up some sick wikilink hover effects using tailwind see a-case-for-tailwindcss. When you hover over them they show an image preview of the link...&#34; data-date=&#34;2024-05-30&#34; data-preview=&#34;Today I set up some sick wikilink hover effects using tailwind see a-case-for-tailwindcss. When you hover over them they show an image preview of the link...&#34;&gt;sick wikilink hover&lt;/a&gt; recently in a refactor, today I did some&#xA;diving in to figure out what happened.&lt;/p&gt;&#xA;&lt;h2 id=&#34;before&#34;&gt;Before &lt;a href=&#34;#before&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As you can see in the screenshot below, the link is in a list of links, and&#xA;when the hover image pops up it sits behind all of the other text.  The z-index&#xA;of the list-item is supposed to be raised above the others on hover.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/b3158b49-5c0f-4e52-b3e3-47ba67f5c801.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/b3158b49-5c0f-4e52-b3e3-47ba67f5c801.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Manually setting z-index to 20 in the inspector I noticed this message from&#xA;devtools, &lt;em&gt;“The position: static property prevents z-index from having an&#xA;effect. Try setting position to something other than static.”&lt;/em&gt;, looking back at&#xA;some of my refactoring I had relative in an old template and it was lost.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/1c7fb24c-b77d-4962-adfc-8e2eb5e6145c.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/1c7fb24c-b77d-4962-adfc-8e2eb5e6145c.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;after&#34;&gt;After &lt;a href=&#34;#after&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;After properly setting position to relative on the list-item, the hover image&#xA;is raised above the others.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/ef207afb-a3a5-463a-a615-fdfe8a4256c5.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/ef207afb-a3a5-463a-a615-fdfe8a4256c5.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>analytics</title>
    <id>https://waylonwalker.com/analytics/</id>
    <updated>2025-01-22T08:36:27Z</updated>
    <published>2025-01-22T08:36:27Z</published>
    <link href="https://waylonwalker.com/analytics/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been posting on this site since 2016, when the company I worked for went through a large round of layoffs. I was worried about being laid off, so I...</summary>
    <content type="html">&lt;p&gt;I’ve been posting on this site since 2016, when the company I worked for went&#xA;through a large round of layoffs. I was worried about being laid off, so I&#xA;started looking at what I needed to do to build my resume. A personal blog and&#xA;side projects were at the top of the list, so off I went. This site is built on&#xA;&lt;a href=&#34;/markata/&#34; class=&#34;wikilink&#34; data-title=&#34;markata&#34; data-description=&#34;This post is a work in progress.&#34; data-date=&#34;2024-05-30&#34; data-preview=&#34;This post is a work in progress.&#34;&gt;markata&lt;/a&gt;. You can read more about that in the &lt;a href=&#34;/colophon/&#34; class=&#34;wikilink&#34; data-title=&#34;/colophon&#34; data-description=&#34;Colophon a page that describes how the site &amp;gt; is made, with what tools, supporting what technologies&#34; data-date=&#34;2025-01-02&#34; data-preview=&#34;Colophon a page that describes how the site &amp;gt; is made, with what tools, supporting what technologies&#34;&gt;/colophon&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/7b6cf2c2-2299-4320-b58f-b0bebf2d0504.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/7b6cf2c2-2299-4320-b58f-b0bebf2d0504.png&#34; alt=&#34;screenshot-2025-01-31T21-23-13-643Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-01-31T21-23-13-643Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;total-posts-over-time&#34;&gt;Total Posts over time &lt;a href=&#34;#total-posts-over-time&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;/total_posts_over_time.svg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;/total_posts_over_time.svg&#34; alt=&#34;Total Cumulative Posts Over Time&#34;/ data-glightbox=&#34;description: Total Cumulative Posts Over Time&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;post-contributions-in-2025&#34;&gt;Post Contributions in 2025 &lt;a href=&#34;#post-contributions-in-2025&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;contribution-graph-container&#34;&gt;&#xA;  &lt;div id=&#34;contribution-graph-1&#34;&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;post-contributions-in-2024&#34;&gt;Post Contributions in 2024 &lt;a href=&#34;#post-contributions-in-2024&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;contribution-graph-container&#34;&gt;&#xA;  &lt;div id=&#34;contribution-graph-2&#34;&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;post-contributions-in-2023&#34;&gt;Post Contributions in 2023 &lt;a href=&#34;#post-contributions-in-2023&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;2023 was a very busy year, and I started slowing down. About halfway through&#xA;the year, I felt like I had a lot I wanted to get out, but not enough time to&#xA;turn every idea into a full blog post. I added &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;Thoughts&lt;/a&gt; on 7/22/2023,&#xA;starting with this &lt;a href=&#34;https://waylonwalker.com/thoughts-2/&#34;&gt;first thought&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;contribution-graph-container&#34;&gt;&#xA;  &lt;div id=&#34;contribution-graph-3&#34;&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Notice the huge uptick that starts right after I added &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;Thoughts&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;post-contributions-in-2022&#34;&gt;Post Contributions in 2022 &lt;a href=&#34;#post-contributions-in-2022&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;contribution-graph-container&#34;&gt;&#xA;  &lt;div id=&#34;contribution-graph-4&#34;&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;post-contributions-in-2021&#34;&gt;Post Contributions in 2021 &lt;a href=&#34;#post-contributions-in-2021&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;At the end of 2021, I started posting &lt;a href=&#34;/til/&#34; class=&#34;wikilink&#34; data-title=&#34;TIL&#34; data-description=&#34;Here are the latest snippets from the /til directory:&#34; data-date=&#34;2026-03-01&#34; data-preview=&#34;Here are the latest snippets from the /til directory:&#34;&gt;TIL&lt;/a&gt;s daily for a few months. This&#xA;is the point when I really started lowering the barrier to entry for publishing.&#xA;A post did not need to be a long essay. It could be the size of a tweet.&lt;/p&gt;&#xA;&lt;div class=&#34;contribution-graph-container&#34;&gt;&#xA;  &lt;div id=&#34;contribution-graph-5&#34;&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;post-contributions-in-2020&#34;&gt;Post Contributions in 2020 &lt;a href=&#34;#post-contributions-in-2020&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;contribution-graph-container&#34;&gt;&#xA;  &lt;div id=&#34;contribution-graph-6&#34;&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;post-contributions-in-2019&#34;&gt;Post Contributions in 2019 &lt;a href=&#34;#post-contributions-in-2019&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;2019 was a huge learning year for me. I was busy leading a migration to the&#xA;cloud, working on containerized data pipeline orchestration, and setting up new&#xA;projects and templates with &lt;a href=&#34;/kedro/&#34; class=&#34;wikilink&#34; data-title=&#34;Kedro&#34; data-description=&#34;My Notes about using kedro&#34; data-date=&#34;2019-11-02&#34; data-preview=&#34;My Notes about using kedro&#34;&gt;Kedro&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;contribution-graph-container&#34;&gt;&#xA;  &lt;div id=&#34;contribution-graph-7&#34;&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;post-contributions-in-2018&#34;&gt;Post Contributions in 2018 &lt;a href=&#34;#post-contributions-in-2018&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This was the year I really started reaching for the terminal, kicking off the&#xA;year with &lt;a href=&#34;/vim-notes/&#34; class=&#34;wikilink&#34; data-title=&#34;Vim Notes&#34; data-description=&#34;norcalli/neovim-plugin&#34; data-date=&#34;2018-02-01&#34; data-preview=&#34;norcalli/neovim-plugin&#34;&gt;Vim Notes&lt;/a&gt; and rounding it out with &lt;a href=&#34;/bash/&#34; class=&#34;wikilink&#34; data-title=&#34;📝 Bash Notes&#34; data-description=&#34;Waylon Walker&amp;#39;s Bash Notes&#34; data-date=&#34;2019-09-08&#34; data-preview=&#34;Waylon Walker&amp;#39;s Bash Notes&#34;&gt;📝 Bash Notes&lt;/a&gt;. I had been watching&#xA;Luke Smith for a while, and I started managing my first Linux server at work. I&#xA;was stuck with Windows at the time, but WSL was new and let me run Linux in the&#xA;terminal.&lt;/p&gt;&#xA;&lt;div class=&#34;contribution-graph-container&#34;&gt;&#xA;  &lt;div id=&#34;contribution-graph-8&#34;&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;post-contributions-in-2017&#34;&gt;Post Contributions in 2017 &lt;a href=&#34;#post-contributions-in-2017&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;2017 was the year of getting started. I was coming up on five years in my&#xA;career, and layoffs were hitting hard. I remember first landing the job five&#xA;years earlier and being told that, in the company’s long history, they had&#xA;never laid off engineers. It felt like a very safe place to be. This was a wake&#xA;up call that things could turn around and I might take nothing with me.&#xA;Blogging became my way to document what I was learning. It made me better at&#xA;communicating and gave me a reason to take a deeper dive into interesting&#xA;topics.&lt;/p&gt;&#xA;&lt;div class=&#34;contribution-graph-container&#34;&gt;&#xA;  &lt;div id=&#34;contribution-graph-9&#34;&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;post-contributions-in-2016&#34;&gt;Post Contributions in 2016 &lt;a href=&#34;#post-contributions-in-2016&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;2016 was the year I created my GitHub account and got serious about switching&#xA;from mechanical engineering to software engineering. All of my 2016 posts are&#xA;backdated GitHub stars.&lt;/p&gt;&#xA;&lt;div class=&#34;contribution-graph-container&#34;&gt;&#xA;  &lt;div id=&#34;contribution-graph-10&#34;&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;style&gt;&#xA;.contribution-graph-container {&#xA;  width: 100%;&#xA;  overflow-x: auto;&#xA;  margin: 1rem 0;&#xA;  display: flex;&#xA;  justify-content: center;&#xA;}&#xA;.contribution-graph-container &gt; div {&#xA;  flex-shrink: 0;&#xA;}&#xA;#ch-tooltip {&#xA;  background: var(--color-surface, #333);&#xA;  color: var(--color-text, #fff);&#xA;  padding: 0.5rem 0.75rem;&#xA;  border-radius: 4px;&#xA;  font-size: 0.875rem;&#xA;  box-shadow: 0 2px 8px rgba(0,0,0,0.2);&#xA;  z-index: 10000 !important;&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;link rel=&#34;stylesheet&#34; href=&#34;/assets/vendor/cal-heatmap/cal-heatmap.css&#34;&gt;&#xA;&lt;script src=&#34;https://d3js.org/d3.v7.min.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script src=&#34;https://unpkg.com/@popperjs/core@2&#34;&gt;&lt;/script&gt;&#xA;&lt;script src=&#34;/assets/vendor/cal-heatmap/cal-heatmap.min.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script src=&#34;/assets/vendor/cal-heatmap/plugins/Tooltip.min.js&#34;&gt;&lt;/script&gt;&#xA;&lt;script&gt;&#xA;document.addEventListener(&#39;DOMContentLoaded&#39;, function() {&#xA;  // Initialize graphs&#xA;  &#xA;  (function() {&#xA;    const graphId = &#39;contribution-graph-1&#39;;&#xA;    const data = null;&#xA;    const options = {date: { start: new Date(&#39;2025-01-01&#39;) }, domain: { type: &#39;year&#39; }, subDomain: { type: &#39;day&#39; }};&#xA;&#xA;    function paintGraph() {&#xA;      // Clear existing graph&#xA;      const container = document.getElementById(graphId);&#xA;      if (!container) return;&#xA;      container.innerHTML = &#39;&#39;;&#xA;&#xA;      // Calculate max value for this graph&#39;s scale&#xA;      const maxValue = Math.max(1, ...data.map(d =&gt; d.value || 0));&#xA;&#xA;      // Get theme colors from CSS variables&#xA;      const styles = getComputedStyle(document.documentElement);&#xA;      const bgColor = styles.getPropertyValue(&#39;--color-background&#39;).trim();&#xA;      const surfaceColor = styles.getPropertyValue(&#39;--color-surface&#39;).trim();&#xA;      const primaryColor = styles.getPropertyValue(&#39;--color-primary&#39;).trim();&#xA;&#xA;      // Use surface color as base, primary as accent&#xA;      const baseColor = surfaceColor || bgColor || &#39;#ebedf0&#39;;&#xA;      const accentColor = primaryColor || &#39;#216e39&#39;;&#xA;&#xA;      const cal = new CalHeatmap();&#xA;      cal.paint(&#xA;        {&#xA;          itemSelector: &#39;#&#39; + graphId,&#xA;          data: {&#xA;            source: data,&#xA;            x: &#39;date&#39;,&#xA;            y: &#39;value&#39;&#xA;          },&#xA;          date: options.date,&#xA;          domain: options.domain || { type: &#39;year&#39; },&#xA;          subDomain: options.subDomain || { type: &#39;day&#39; },&#xA;          range: options.range,&#xA;          scale: {&#xA;            color: {&#xA;              type: &#39;linear&#39;,&#xA;              range: [baseColor, accentColor],&#xA;              domain: [0, maxValue]&#xA;            }&#xA;          }&#xA;        },&#xA;        [&#xA;          [&#xA;            Tooltip,&#xA;            {&#xA;              text: function (date, value, dayjsDate) {&#xA;                return (value ? value : &#39;No&#39;) + &#39; posts on &#39; + dayjsDate.format(&#39;MMM D, YYYY&#39;);&#xA;              },&#xA;            },&#xA;          ],&#xA;        ]&#xA;      );&#xA;    }&#xA;&#xA;    // Initial paint&#xA;    paintGraph();&#xA;&#xA;    // Register for theme changes&#xA;    if (!window._contributionGraphPainters) {&#xA;      window._contributionGraphPainters = [];&#xA;    }&#xA;    window._contributionGraphPainters.push(paintGraph);&#xA;  })();&#xA;&#xA;  (function() {&#xA;    const graphId = &#39;contribution-graph-2&#39;;&#xA;    const data = null;&#xA;    const options = {date: { start: new Date(&#39;2024-01-01&#39;) }, domain: { type: &#39;year&#39; }, subDomain: { type: &#39;day&#39; }};&#xA;&#xA;    function paintGraph() {&#xA;      // Clear existing graph&#xA;      const container = document.getElementById(graphId);&#xA;      if (!container) return;&#xA;      container.innerHTML = &#39;&#39;;&#xA;&#xA;      // Calculate max value for this graph&#39;s scale&#xA;      const maxValue = Math.max(1, ...data.map(d =&gt; d.value || 0));&#xA;&#xA;      // Get theme colors from CSS variables&#xA;      const styles = getComputedStyle(document.documentElement);&#xA;      const bgColor = styles.getPropertyValue(&#39;--color-background&#39;).trim();&#xA;      const surfaceColor = styles.getPropertyValue(&#39;--color-surface&#39;).trim();&#xA;      const primaryColor = styles.getPropertyValue(&#39;--color-primary&#39;).trim();&#xA;&#xA;      // Use surface color as base, primary as accent&#xA;      const baseColor = surfaceColor || bgColor || &#39;#ebedf0&#39;;&#xA;      const accentColor = primaryColor || &#39;#216e39&#39;;&#xA;&#xA;      const cal = new CalHeatmap();&#xA;      cal.paint(&#xA;        {&#xA;          itemSelector: &#39;#&#39; + graphId,&#xA;          data: {&#xA;            source: data,&#xA;            x: &#39;date&#39;,&#xA;            y: &#39;value&#39;&#xA;          },&#xA;          date: options.date,&#xA;          domain: options.domain || { type: &#39;year&#39; },&#xA;          subDomain: options.subDomain || { type: &#39;day&#39; },&#xA;          range: options.range,&#xA;          scale: {&#xA;            color: {&#xA;              type: &#39;linear&#39;,&#xA;              range: [baseColor, accentColor],&#xA;              domain: [0, maxValue]&#xA;            }&#xA;          }&#xA;        },&#xA;        [&#xA;          [&#xA;            Tooltip,&#xA;            {&#xA;              text: function (date, value, dayjsDate) {&#xA;                return (value ? value : &#39;No&#39;) + &#39; posts on &#39; + dayjsDate.format(&#39;MMM D, YYYY&#39;);&#xA;              },&#xA;            },&#xA;          ],&#xA;        ]&#xA;      );&#xA;    }&#xA;&#xA;    // Initial paint&#xA;    paintGraph();&#xA;&#xA;    // Register for theme changes&#xA;    if (!window._contributionGraphPainters) {&#xA;      window._contributionGraphPainters = [];&#xA;    }&#xA;    window._contributionGraphPainters.push(paintGraph);&#xA;  })();&#xA;&#xA;  (function() {&#xA;    const graphId = &#39;contribution-graph-3&#39;;&#xA;    const data = null;&#xA;    const options = {date: { start: new Date(&#39;2023-01-01&#39;) }, domain: { type: &#39;year&#39; }, subDomain: { type: &#39;day&#39; }};&#xA;&#xA;    function paintGraph() {&#xA;      // Clear existing graph&#xA;      const container = document.getElementById(graphId);&#xA;      if (!container) return;&#xA;      container.innerHTML = &#39;&#39;;&#xA;&#xA;      // Calculate max value for this graph&#39;s scale&#xA;      const maxValue = Math.max(1, ...data.map(d =&gt; d.value || 0));&#xA;&#xA;      // Get theme colors from CSS variables&#xA;      const styles = getComputedStyle(document.documentElement);&#xA;      const bgColor = styles.getPropertyValue(&#39;--color-background&#39;).trim();&#xA;      const surfaceColor = styles.getPropertyValue(&#39;--color-surface&#39;).trim();&#xA;      const primaryColor = styles.getPropertyValue(&#39;--color-primary&#39;).trim();&#xA;&#xA;      // Use surface color as base, primary as accent&#xA;      const baseColor = surfaceColor || bgColor || &#39;#ebedf0&#39;;&#xA;      const accentColor = primaryColor || &#39;#216e39&#39;;&#xA;&#xA;      const cal = new CalHeatmap();&#xA;      cal.paint(&#xA;        {&#xA;          itemSelector: &#39;#&#39; + graphId,&#xA;          data: {&#xA;            source: data,&#xA;            x: &#39;date&#39;,&#xA;            y: &#39;value&#39;&#xA;          },&#xA;          date: options.date,&#xA;          domain: options.domain || { type: &#39;year&#39; },&#xA;          subDomain: options.subDomain || { type: &#39;day&#39; },&#xA;          range: options.range,&#xA;          scale: {&#xA;            color: {&#xA;              type: &#39;linear&#39;,&#xA;              range: [baseColor, accentColor],&#xA;              domain: [0, maxValue]&#xA;            }&#xA;          }&#xA;        },&#xA;        [&#xA;          [&#xA;            Tooltip,&#xA;            {&#xA;              text: function (date, value, dayjsDate) {&#xA;                return (value ? value : &#39;No&#39;) + &#39; posts on &#39; + dayjsDate.format(&#39;MMM D, YYYY&#39;);&#xA;              },&#xA;            },&#xA;          ],&#xA;        ]&#xA;      );&#xA;    }&#xA;&#xA;    // Initial paint&#xA;    paintGraph();&#xA;&#xA;    // Register for theme changes&#xA;    if (!window._contributionGraphPainters) {&#xA;      window._contributionGraphPainters = [];&#xA;    }&#xA;    window._contributionGraphPainters.push(paintGraph);&#xA;  })();&#xA;&#xA;  (function() {&#xA;    const graphId = &#39;contribution-graph-4&#39;;&#xA;    const data = null;&#xA;    const options = {date: { start: new Date(&#39;2022-01-01&#39;) }, domain: { type: &#39;year&#39; }, subDomain: { type: &#39;day&#39; }};&#xA;&#xA;    function paintGraph() {&#xA;      // Clear existing graph&#xA;      const container = document.getElementById(graphId);&#xA;      if (!container) return;&#xA;      container.innerHTML = &#39;&#39;;&#xA;&#xA;      // Calculate max value for this graph&#39;s scale&#xA;      const maxValue = Math.max(1, ...data.map(d =&gt; d.value || 0));&#xA;&#xA;      // Get theme colors from CSS variables&#xA;      const styles = getComputedStyle(document.documentElement);&#xA;      const bgColor = styles.getPropertyValue(&#39;--color-background&#39;).trim();&#xA;      const surfaceColor = styles.getPropertyValue(&#39;--color-surface&#39;).trim();&#xA;      const primaryColor = styles.getPropertyValue(&#39;--color-primary&#39;).trim();&#xA;&#xA;      // Use surface color as base, primary as accent&#xA;      const baseColor = surfaceColor || bgColor || &#39;#ebedf0&#39;;&#xA;      const accentColor = primaryColor || &#39;#216e39&#39;;&#xA;&#xA;      const cal = new CalHeatmap();&#xA;      cal.paint(&#xA;        {&#xA;          itemSelector: &#39;#&#39; + graphId,&#xA;          data: {&#xA;            source: data,&#xA;            x: &#39;date&#39;,&#xA;            y: &#39;value&#39;&#xA;          },&#xA;          date: options.date,&#xA;          domain: options.domain || { type: &#39;year&#39; },&#xA;          subDomain: options.subDomain || { type: &#39;day&#39; },&#xA;          range: options.range,&#xA;          scale: {&#xA;            color: {&#xA;              type: &#39;linear&#39;,&#xA;              range: [baseColor, accentColor],&#xA;              domain: [0, maxValue]&#xA;            }&#xA;          }&#xA;        },&#xA;        [&#xA;          [&#xA;            Tooltip,&#xA;            {&#xA;              text: function (date, value, dayjsDate) {&#xA;                return (value ? value : &#39;No&#39;) + &#39; posts on &#39; + dayjsDate.format(&#39;MMM D, YYYY&#39;);&#xA;              },&#xA;            },&#xA;          ],&#xA;        ]&#xA;      );&#xA;    }&#xA;&#xA;    // Initial paint&#xA;    paintGraph();&#xA;&#xA;    // Register for theme changes&#xA;    if (!window._contributionGraphPainters) {&#xA;      window._contributionGraphPainters = [];&#xA;    }&#xA;    window._contributionGraphPainters.push(paintGraph);&#xA;  })();&#xA;&#xA;  (function() {&#xA;    const graphId = &#39;contribution-graph-5&#39;;&#xA;    const data = null;&#xA;    const options = {date: { start: new Date(&#39;2021-01-01&#39;) }, domain: { type: &#39;year&#39; }, subDomain: { type: &#39;day&#39; }};&#xA;&#xA;    function paintGraph() {&#xA;      // Clear existing graph&#xA;      const container = document.getElementById(graphId);&#xA;      if (!container) return;&#xA;      container.innerHTML = &#39;&#39;;&#xA;&#xA;      // Calculate max value for this graph&#39;s scale&#xA;      const maxValue = Math.max(1, ...data.map(d =&gt; d.value || 0));&#xA;&#xA;      // Get theme colors from CSS variables&#xA;      const styles = getComputedStyle(document.documentElement);&#xA;      const bgColor = styles.getPropertyValue(&#39;--color-background&#39;).trim();&#xA;      const surfaceColor = styles.getPropertyValue(&#39;--color-surface&#39;).trim();&#xA;      const primaryColor = styles.getPropertyValue(&#39;--color-primary&#39;).trim();&#xA;&#xA;      // Use surface color as base, primary as accent&#xA;      const baseColor = surfaceColor || bgColor || &#39;#ebedf0&#39;;&#xA;      const accentColor = primaryColor || &#39;#216e39&#39;;&#xA;&#xA;      const cal = new CalHeatmap();&#xA;      cal.paint(&#xA;        {&#xA;          itemSelector: &#39;#&#39; + graphId,&#xA;          data: {&#xA;            source: data,&#xA;            x: &#39;date&#39;,&#xA;            y: &#39;value&#39;&#xA;          },&#xA;          date: options.date,&#xA;          domain: options.domain || { type: &#39;year&#39; },&#xA;          subDomain: options.subDomain || { type: &#39;day&#39; },&#xA;          range: options.range,&#xA;          scale: {&#xA;            color: {&#xA;              type: &#39;linear&#39;,&#xA;              range: [baseColor, accentColor],&#xA;              domain: [0, maxValue]&#xA;            }&#xA;          }&#xA;        },&#xA;        [&#xA;          [&#xA;            Tooltip,&#xA;            {&#xA;              text: function (date, value, dayjsDate) {&#xA;                return (value ? value : &#39;No&#39;) + &#39; posts on &#39; + dayjsDate.format(&#39;MMM D, YYYY&#39;);&#xA;              },&#xA;            },&#xA;          ],&#xA;        ]&#xA;      );&#xA;    }&#xA;&#xA;    // Initial paint&#xA;    paintGraph();&#xA;&#xA;    // Register for theme changes&#xA;    if (!window._contributionGraphPainters) {&#xA;      window._contributionGraphPainters = [];&#xA;    }&#xA;    window._contributionGraphPainters.push(paintGraph);&#xA;  })();&#xA;&#xA;  (function() {&#xA;    const graphId = &#39;contribution-graph-6&#39;;&#xA;    const data = null;&#xA;    const options = {date: { start: new Date(&#39;2020-01-01&#39;) }, domain: { type: &#39;year&#39; }, subDomain: { type: &#39;day&#39; }};&#xA;&#xA;    function paintGraph() {&#xA;      // Clear existing graph&#xA;      const container = document.getElementById(graphId);&#xA;      if (!container) return;&#xA;      container.innerHTML = &#39;&#39;;&#xA;&#xA;      // Calculate max value for this graph&#39;s scale&#xA;      const maxValue = Math.max(1, ...data.map(d =&gt; d.value || 0));&#xA;&#xA;      // Get theme colors from CSS variables&#xA;      const styles = getComputedStyle(document.documentElement);&#xA;      const bgColor = styles.getPropertyValue(&#39;--color-background&#39;).trim();&#xA;      const surfaceColor = styles.getPropertyValue(&#39;--color-surface&#39;).trim();&#xA;      const primaryColor = styles.getPropertyValue(&#39;--color-primary&#39;).trim();&#xA;&#xA;      // Use surface color as base, primary as accent&#xA;      const baseColor = surfaceColor || bgColor || &#39;#ebedf0&#39;;&#xA;      const accentColor = primaryColor || &#39;#216e39&#39;;&#xA;&#xA;      const cal = new CalHeatmap();&#xA;      cal.paint(&#xA;        {&#xA;          itemSelector: &#39;#&#39; + graphId,&#xA;          data: {&#xA;            source: data,&#xA;            x: &#39;date&#39;,&#xA;            y: &#39;value&#39;&#xA;          },&#xA;          date: options.date,&#xA;          domain: options.domain || { type: &#39;year&#39; },&#xA;          subDomain: options.subDomain || { type: &#39;day&#39; },&#xA;          range: options.range,&#xA;          scale: {&#xA;            color: {&#xA;              type: &#39;linear&#39;,&#xA;              range: [baseColor, accentColor],&#xA;              domain: [0, maxValue]&#xA;            }&#xA;          }&#xA;        },&#xA;        [&#xA;          [&#xA;            Tooltip,&#xA;            {&#xA;              text: function (date, value, dayjsDate) {&#xA;                return (value ? value : &#39;No&#39;) + &#39; posts on &#39; + dayjsDate.format(&#39;MMM D, YYYY&#39;);&#xA;              },&#xA;            },&#xA;          ],&#xA;        ]&#xA;      );&#xA;    }&#xA;&#xA;    // Initial paint&#xA;    paintGraph();&#xA;&#xA;    // Register for theme changes&#xA;    if (!window._contributionGraphPainters) {&#xA;      window._contributionGraphPainters = [];&#xA;    }&#xA;    window._contributionGraphPainters.push(paintGraph);&#xA;  })();&#xA;&#xA;  (function() {&#xA;    const graphId = &#39;contribution-graph-7&#39;;&#xA;    const data = null;&#xA;    const options = {date: { start: new Date(&#39;2019-01-01&#39;) }, domain: { type: &#39;year&#39; }, subDomain: { type: &#39;day&#39; }};&#xA;&#xA;    function paintGraph() {&#xA;      // Clear existing graph&#xA;      const container = document.getElementById(graphId);&#xA;      if (!container) return;&#xA;      container.innerHTML = &#39;&#39;;&#xA;&#xA;      // Calculate max value for this graph&#39;s scale&#xA;      const maxValue = Math.max(1, ...data.map(d =&gt; d.value || 0));&#xA;&#xA;      // Get theme colors from CSS variables&#xA;      const styles = getComputedStyle(document.documentElement);&#xA;      const bgColor = styles.getPropertyValue(&#39;--color-background&#39;).trim();&#xA;      const surfaceColor = styles.getPropertyValue(&#39;--color-surface&#39;).trim();&#xA;      const primaryColor = styles.getPropertyValue(&#39;--color-primary&#39;).trim();&#xA;&#xA;      // Use surface color as base, primary as accent&#xA;      const baseColor = surfaceColor || bgColor || &#39;#ebedf0&#39;;&#xA;      const accentColor = primaryColor || &#39;#216e39&#39;;&#xA;&#xA;      const cal = new CalHeatmap();&#xA;      cal.paint(&#xA;        {&#xA;          itemSelector: &#39;#&#39; + graphId,&#xA;          data: {&#xA;            source: data,&#xA;            x: &#39;date&#39;,&#xA;            y: &#39;value&#39;&#xA;          },&#xA;          date: options.date,&#xA;          domain: options.domain || { type: &#39;year&#39; },&#xA;          subDomain: options.subDomain || { type: &#39;day&#39; },&#xA;          range: options.range,&#xA;          scale: {&#xA;            color: {&#xA;              type: &#39;linear&#39;,&#xA;              range: [baseColor, accentColor],&#xA;              domain: [0, maxValue]&#xA;            }&#xA;          }&#xA;        },&#xA;        [&#xA;          [&#xA;            Tooltip,&#xA;            {&#xA;              text: function (date, value, dayjsDate) {&#xA;                return (value ? value : &#39;No&#39;) + &#39; posts on &#39; + dayjsDate.format(&#39;MMM D, YYYY&#39;);&#xA;              },&#xA;            },&#xA;          ],&#xA;        ]&#xA;      );&#xA;    }&#xA;&#xA;    // Initial paint&#xA;    paintGraph();&#xA;&#xA;    // Register for theme changes&#xA;    if (!window._contributionGraphPainters) {&#xA;      window._contributionGraphPainters = [];&#xA;    }&#xA;    window._contributionGraphPainters.push(paintGraph);&#xA;  })();&#xA;&#xA;  (function() {&#xA;    const graphId = &#39;contribution-graph-8&#39;;&#xA;    const data = null;&#xA;    const options = {date: { start: new Date(&#39;2018-01-01&#39;) }, domain: { type: &#39;year&#39; }, subDomain: { type: &#39;day&#39; }};&#xA;&#xA;    function paintGraph() {&#xA;      // Clear existing graph&#xA;      const container = document.getElementById(graphId);&#xA;      if (!container) return;&#xA;      container.innerHTML = &#39;&#39;;&#xA;&#xA;      // Calculate max value for this graph&#39;s scale&#xA;      const maxValue = Math.max(1, ...data.map(d =&gt; d.value || 0));&#xA;&#xA;      // Get theme colors from CSS variables&#xA;      const styles = getComputedStyle(document.documentElement);&#xA;      const bgColor = styles.getPropertyValue(&#39;--color-background&#39;).trim();&#xA;      const surfaceColor = styles.getPropertyValue(&#39;--color-surface&#39;).trim();&#xA;      const primaryColor = styles.getPropertyValue(&#39;--color-primary&#39;).trim();&#xA;&#xA;      // Use surface color as base, primary as accent&#xA;      const baseColor = surfaceColor || bgColor || &#39;#ebedf0&#39;;&#xA;      const accentColor = primaryColor || &#39;#216e39&#39;;&#xA;&#xA;      const cal = new CalHeatmap();&#xA;      cal.paint(&#xA;        {&#xA;          itemSelector: &#39;#&#39; + graphId,&#xA;          data: {&#xA;            source: data,&#xA;            x: &#39;date&#39;,&#xA;            y: &#39;value&#39;&#xA;          },&#xA;          date: options.date,&#xA;          domain: options.domain || { type: &#39;year&#39; },&#xA;          subDomain: options.subDomain || { type: &#39;day&#39; },&#xA;          range: options.range,&#xA;          scale: {&#xA;            color: {&#xA;              type: &#39;linear&#39;,&#xA;              range: [baseColor, accentColor],&#xA;              domain: [0, maxValue]&#xA;            }&#xA;          }&#xA;        },&#xA;        [&#xA;          [&#xA;            Tooltip,&#xA;            {&#xA;              text: function (date, value, dayjsDate) {&#xA;                return (value ? value : &#39;No&#39;) + &#39; posts on &#39; + dayjsDate.format(&#39;MMM D, YYYY&#39;);&#xA;              },&#xA;            },&#xA;          ],&#xA;        ]&#xA;      );&#xA;    }&#xA;&#xA;    // Initial paint&#xA;    paintGraph();&#xA;&#xA;    // Register for theme changes&#xA;    if (!window._contributionGraphPainters) {&#xA;      window._contributionGraphPainters = [];&#xA;    }&#xA;    window._contributionGraphPainters.push(paintGraph);&#xA;  })();&#xA;&#xA;  (function() {&#xA;    const graphId = &#39;contribution-graph-9&#39;;&#xA;    const data = null;&#xA;    const options = {date: { start: new Date(&#39;2017-01-01&#39;) }, domain: { type: &#39;year&#39; }, subDomain: { type: &#39;day&#39; }};&#xA;&#xA;    function paintGraph() {&#xA;      // Clear existing graph&#xA;      const container = document.getElementById(graphId);&#xA;      if (!container) return;&#xA;      container.innerHTML = &#39;&#39;;&#xA;&#xA;      // Calculate max value for this graph&#39;s scale&#xA;      const maxValue = Math.max(1, ...data.map(d =&gt; d.value || 0));&#xA;&#xA;      // Get theme colors from CSS variables&#xA;      const styles = getComputedStyle(document.documentElement);&#xA;      const bgColor = styles.getPropertyValue(&#39;--color-background&#39;).trim();&#xA;      const surfaceColor = styles.getPropertyValue(&#39;--color-surface&#39;).trim();&#xA;      const primaryColor = styles.getPropertyValue(&#39;--color-primary&#39;).trim();&#xA;&#xA;      // Use surface color as base, primary as accent&#xA;      const baseColor = surfaceColor || bgColor || &#39;#ebedf0&#39;;&#xA;      const accentColor = primaryColor || &#39;#216e39&#39;;&#xA;&#xA;      const cal = new CalHeatmap();&#xA;      cal.paint(&#xA;        {&#xA;          itemSelector: &#39;#&#39; + graphId,&#xA;          data: {&#xA;            source: data,&#xA;            x: &#39;date&#39;,&#xA;            y: &#39;value&#39;&#xA;          },&#xA;          date: options.date,&#xA;          domain: options.domain || { type: &#39;year&#39; },&#xA;          subDomain: options.subDomain || { type: &#39;day&#39; },&#xA;          range: options.range,&#xA;          scale: {&#xA;            color: {&#xA;              type: &#39;linear&#39;,&#xA;              range: [baseColor, accentColor],&#xA;              domain: [0, maxValue]&#xA;            }&#xA;          }&#xA;        },&#xA;        [&#xA;          [&#xA;            Tooltip,&#xA;            {&#xA;              text: function (date, value, dayjsDate) {&#xA;                return (value ? value : &#39;No&#39;) + &#39; posts on &#39; + dayjsDate.format(&#39;MMM D, YYYY&#39;);&#xA;              },&#xA;            },&#xA;          ],&#xA;        ]&#xA;      );&#xA;    }&#xA;&#xA;    // Initial paint&#xA;    paintGraph();&#xA;&#xA;    // Register for theme changes&#xA;    if (!window._contributionGraphPainters) {&#xA;      window._contributionGraphPainters = [];&#xA;    }&#xA;    window._contributionGraphPainters.push(paintGraph);&#xA;  })();&#xA;&#xA;  (function() {&#xA;    const graphId = &#39;contribution-graph-10&#39;;&#xA;    const data = null;&#xA;    const options = {date: { start: new Date(&#39;2016-01-01&#39;) }, domain: { type: &#39;year&#39; }, subDomain: { type: &#39;day&#39; }};&#xA;&#xA;    function paintGraph() {&#xA;      // Clear existing graph&#xA;      const container = document.getElementById(graphId);&#xA;      if (!container) return;&#xA;      container.innerHTML = &#39;&#39;;&#xA;&#xA;      // Calculate max value for this graph&#39;s scale&#xA;      const maxValue = Math.max(1, ...data.map(d =&gt; d.value || 0));&#xA;&#xA;      // Get theme colors from CSS variables&#xA;      const styles = getComputedStyle(document.documentElement);&#xA;      const bgColor = styles.getPropertyValue(&#39;--color-background&#39;).trim();&#xA;      const surfaceColor = styles.getPropertyValue(&#39;--color-surface&#39;).trim();&#xA;      const primaryColor = styles.getPropertyValue(&#39;--color-primary&#39;).trim();&#xA;&#xA;      // Use surface color as base, primary as accent&#xA;      const baseColor = surfaceColor || bgColor || &#39;#ebedf0&#39;;&#xA;      const accentColor = primaryColor || &#39;#216e39&#39;;&#xA;&#xA;      const cal = new CalHeatmap();&#xA;      cal.paint(&#xA;        {&#xA;          itemSelector: &#39;#&#39; + graphId,&#xA;          data: {&#xA;            source: data,&#xA;            x: &#39;date&#39;,&#xA;            y: &#39;value&#39;&#xA;          },&#xA;          date: options.date,&#xA;          domain: options.domain || { type: &#39;year&#39; },&#xA;          subDomain: options.subDomain || { type: &#39;day&#39; },&#xA;          range: options.range,&#xA;          scale: {&#xA;            color: {&#xA;              type: &#39;linear&#39;,&#xA;              range: [baseColor, accentColor],&#xA;              domain: [0, maxValue]&#xA;            }&#xA;          }&#xA;        },&#xA;        [&#xA;          [&#xA;            Tooltip,&#xA;            {&#xA;              text: function (date, value, dayjsDate) {&#xA;                return (value ? value : &#39;No&#39;) + &#39; posts on &#39; + dayjsDate.format(&#39;MMM D, YYYY&#39;);&#xA;              },&#xA;            },&#xA;          ],&#xA;        ]&#xA;      );&#xA;    }&#xA;&#xA;    // Initial paint&#xA;    paintGraph();&#xA;&#xA;    // Register for theme changes&#xA;    if (!window._contributionGraphPainters) {&#xA;      window._contributionGraphPainters = [];&#xA;    }&#xA;    window._contributionGraphPainters.push(paintGraph);&#xA;  })();&#xA;&#xA;  // Watch for theme/palette changes and re-paint graphs&#xA;  const observer = new MutationObserver(function(mutations) {&#xA;    mutations.forEach(function(mutation) {&#xA;      if (mutation.attributeName === &#39;data-palette&#39; || mutation.attributeName === &#39;class&#39;) {&#xA;        // Small delay to let CSS variables update&#xA;        setTimeout(function() {&#xA;          if (window._contributionGraphPainters) {&#xA;            window._contributionGraphPainters.forEach(function(paint) {&#xA;              paint();&#xA;            });&#xA;          }&#xA;        }, 50);&#xA;      }&#xA;    });&#xA;  });&#xA;&#xA;  observer.observe(document.documentElement, { attributes: true });&#xA;  observer.observe(document.body, { attributes: true });&#xA;});&#xA;&lt;/script&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ublue-os ucore</title>
    <id>https://waylonwalker.com/ublue-os-ucore/</id>
    <updated>2025-01-21T22:22:29Z</updated>
    <published>2025-01-21T22:22:29Z</published>
    <link href="https://waylonwalker.com/ublue-os-ucore/" rel="alternate" type="text/html"></link>
    <summary type="text">ublue-os has done a fantastic job with ucore. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/ublue-os&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ublue-os&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/ublue-os/ucore&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ucore&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;An OCI base image of Fedora CoreOS with batteries included&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ublue-os bazzite</title>
    <id>https://waylonwalker.com/ublue-os-bazzite/</id>
    <updated>2025-01-21T22:22:12Z</updated>
    <published>2025-01-21T22:22:12Z</published>
    <link href="https://waylonwalker.com/ublue-os-bazzite/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred bazzite by ublue-os. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/ublue-os/bazzite&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;bazzite&lt;/a&gt; by &lt;a href=&#34;https://github.com/ublue-os&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ublue-os&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;Bazzite is a cloud native image built upon Fedora Atomic Desktops that brings the best of Linux gaming to all of your devices - including your favorite handheld.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>I fixed lists in my blog</title>
    <id>https://waylonwalker.com/i-fixed-lists-in-my-blog/</id>
    <updated>2025-01-21T16:08:01Z</updated>
    <published>2025-01-21T16:08:01Z</published>
    <link href="https://waylonwalker.com/i-fixed-lists-in-my-blog/" rel="alternate" type="text/html"></link>
    <summary type="text">A small improvement to my blog today. I was checking out my now post and noticed that lists have left padding but no discs or numbers. I popped open my added...</summary>
    <content type="html">&lt;p&gt;A small improvement to my blog today. I was checking out my &lt;a href=&#34;/now/&#34; class=&#34;wikilink&#34; data-title=&#34;/now&#34; data-description=&#34;This page is meant to be simple view into what is happening in my life right now. Inspired by @NowNowNow. and Derek Sivers.&#34; data-date=&#34;2025-01-12&#34; data-preview=&#34;This page is meant to be simple view into what is happening in my life right now. Inspired by @NowNowNow. and Derek Sivers.&#34;&gt;/now&lt;/a&gt; post and&#xA;noticed that lists have left padding but no discs or numbers.  I popped open my&#xA;&lt;code&gt;tailwind/app.css&lt;/code&gt; added these lines and rebuilt.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;post-body&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;li&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;err&#34;&gt;@apply&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;list-disc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;post-body&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;ol&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;err&#34;&gt;@apply&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;list-decimal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And rebuild, which I actually do with &lt;a href=&#34;/casey-just/&#34; class=&#34;wikilink&#34; data-title=&#34;⭐ casey just&#34; data-description=&#34;Just starred just by casey. It&amp;#39;s an exciting project with a lot to offer.&#34; data-date=&#34;2023-10-22&#34; data-preview=&#34;Just starred just by casey. It&amp;#39;s an exciting project with a lot to offer.&#34;&gt;⭐ casey just&lt;/a&gt;, but showing the&#xA;command here for clarity.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npx tailwindcss --input tailwind/app.css --output static/app-39.css&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;why-the-applies&#34;&gt;WHY the applies &lt;a href=&#34;#why-the-applies&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p class=&#34;bg-blue-900 border-r-8 border-black rounded-xl max-w-xl p-6 font-bold&#34;&gt;&lt;/p&gt;&#xA;&lt;p class=&#34;bg-green-900 border-l-8 border-black rounded-xl max-w-xl p-6 ml-auto mr-0 font-bold&#34;&gt;&lt;/p&gt;&#xA;&lt;p class=&#34;bg-blue-900 border-r-8 border-black rounded-xl max-w-xl p-6 font-bold&#34;&gt;&lt;/p&gt;&#xA;&lt;p class=&#34;bg-green-900 border-l-8 border-black rounded-xl max-w-xl p-6 ml-auto mr-0 font-bold&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;before&#34;&gt;Before &lt;a href=&#34;#before&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/5c48f763-5ef6-49b0-9e8f-5167ab046f05.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/5c48f763-5ef6-49b0-9e8f-5167ab046f05.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;after&#34;&gt;After &lt;a href=&#34;#after&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/0cf1c5d9-0948-444f-9a6c-387d22b9db43.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/0cf1c5d9-0948-444f-9a6c-387d22b9db43.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>setting up nvim-manager starship prompt</title>
    <id>https://waylonwalker.com/setting-up-nvim-manager-starship-prompt/</id>
    <updated>2025-01-21T16:03:46Z</updated>
    <published>2025-01-21T16:03:46Z</published>
    <link href="https://waylonwalker.com/setting-up-nvim-manager-starship-prompt/" rel="alternate" type="text/html"></link>
    <summary type="text">I built out a tool for myself to manage my nvim configuration, and I wanted to quickly see which one I am running in my starship prompt. Here&#39;s the config I...</summary>
    <content type="html">&lt;p&gt;I built out a tool for myself to manage my nvim configuration, and I wanted to&#xA;quickly see which one I am running in my starship prompt. Here’s the config I&#xA;ended up with.  It warns if the &lt;code&gt;NVIM_APPNAME&lt;/code&gt; environment variable is not set, and&#xA;it shows which nvim I am using if it is set.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;custom&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;nvim-manager-system&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;when&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;[[ ! -n &amp;#34;${NVIM_APPNAME}&amp;#34; ]]&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;bold yellow&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;symbol&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;[ ](fg:#15AABF)&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;format&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;$symbol[USING SYSTEM NVIM]($style)&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env_var&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;NVIM_APPNAME&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;green&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;symbol&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;[ ](fg:#15AABF)&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;format&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;[$symbol${env_value}]($style)&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;variable&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;NVIM_APPNAME&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ moonbeam-nyc snorlax</title>
    <id>https://waylonwalker.com/moonbeam-nyc-snorlax/</id>
    <updated>2025-01-21T03:19:48Z</updated>
    <published>2025-01-21T03:19:48Z</published>
    <link href="https://waylonwalker.com/moonbeam-nyc-snorlax/" rel="alternate" type="text/html"></link>
    <summary type="text">snorlax by moonbeam-nyc is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/moonbeam-nyc/snorlax&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;snorlax&lt;/a&gt; by &lt;a href=&#34;https://github.com/moonbeam-nyc&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;moonbeam-nyc&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;wake and sleep Kubernetes deployments on a schedule&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ kubernetes-sigs headlamp</title>
    <id>https://waylonwalker.com/kubernetes-sigs-headlamp/</id>
    <updated>2025-01-21T03:13:58Z</updated>
    <published>2025-01-21T03:13:58Z</published>
    <link href="https://waylonwalker.com/kubernetes-sigs-headlamp/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across headlamp from kubernetes-sigs, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/kubernetes-sigs/headlamp&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;headlamp&lt;/a&gt; from &lt;a href=&#34;https://github.com/kubernetes-sigs&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kubernetes-sigs&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;A Kubernetes web UI that is fully-featured, user-friendly and extensible&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ headlamp-k8s headlamp</title>
    <id>https://waylonwalker.com/headlamp-k8s-headlamp/</id>
    <updated>2025-01-21T03:13:58Z</updated>
    <published>2025-01-21T03:13:58Z</published>
    <link href="https://waylonwalker.com/headlamp-k8s-headlamp/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred headlamp by headlamp-k8s. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/headlamp-k8s/headlamp&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;headlamp&lt;/a&gt; by &lt;a href=&#34;https://github.com/headlamp-k8s&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;headlamp-k8s&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;A Kubernetes web UI that is fully-featured, user-friendly and extensible&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ gitui-org gitui</title>
    <id>https://waylonwalker.com/gitui-org-gitui/</id>
    <updated>2025-01-21T02:43:48Z</updated>
    <published>2025-01-21T02:43:48Z</published>
    <link href="https://waylonwalker.com/gitui-org-gitui/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on gitui, created by gitui-org.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/gitui-org/gitui&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gitui&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/gitui-org&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gitui-org&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Blazing 💥 fast terminal-ui for &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; written in rust 🦀&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ extrawurst gitui</title>
    <id>https://waylonwalker.com/extrawurst-gitui/</id>
    <updated>2025-01-21T02:43:48Z</updated>
    <published>2025-01-21T02:43:48Z</published>
    <link href="https://waylonwalker.com/extrawurst-gitui/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on gitui by extrawurst.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/extrawurst/gitui&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gitui&lt;/a&gt; by &lt;a href=&#34;https://github.com/extrawurst&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;extrawurst&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Blazing 💥 fast terminal-ui for &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; written in rust 🦀&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>emoji in headless chrome in docker</title>
    <id>https://waylonwalker.com/emoji-in-headless-chrome-in-docker/</id>
    <updated>2025-01-20T13:55:37Z</updated>
    <published>2025-01-20T13:55:37Z</published>
    <link href="https://waylonwalker.com/emoji-in-headless-chrome-in-docker/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently noticed that my og images were missing emoji. They were taken using headless chrome in a container. I fixed it by adding an emoji font in the...</summary>
    <content type="html">&lt;p&gt;I recently noticed that my &lt;a href=&#34;/og/&#34; class=&#34;glossary-term&#34; title=&#34;OG is short for open graph, a set of standard meta tags that are used for social media sharing. This is what tells other websites how to describe and display...&#34;&gt;og&lt;/a&gt; images were missing emoji.  They were taken using&#xA;headless chrome in a container.  I fixed it by adding an emoji font in the&#xA;containerfile / dockerfile.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;RUN&lt;/span&gt; apt-get update &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt-get install -y &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;# Add fonts with emoji support&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;    fonts-noto-color-emoji &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; rm -rf /var/lib/apt/lists/*&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;before&#34;&gt;Before &lt;a href=&#34;#before&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here’s what they were looking like with broken emoji fonts.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/6e9060f2-0e15-4f22-88b6-b6ec5ddb34de.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/6e9060f2-0e15-4f22-88b6-b6ec5ddb34de.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;after&#34;&gt;After &lt;a href=&#34;#after&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;And now with the fixed emoji font.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/8ed5e338-50c2-4130-8cce-549ecc802f01.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/8ed5e338-50c2-4130-8cce-549ecc802f01.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I put thought bubbles on my thoughts posts and stars on my github stars posts&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ one2nc cloudlens</title>
    <id>https://waylonwalker.com/one2nc-cloudlens/</id>
    <updated>2025-01-20T00:21:58Z</updated>
    <published>2025-01-20T00:21:58Z</published>
    <link href="https://waylonwalker.com/one2nc-cloudlens/" rel="alternate" type="text/html"></link>
    <summary type="text">one2nc has done a fantastic job with cloudlens. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/one2nc&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;one2nc&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/one2nc/cloudlens&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cloudlens&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;k9s like CLI for AWS and GCP&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ dlvhdr gh-dash</title>
    <id>https://waylonwalker.com/dlvhdr-gh-dash/</id>
    <updated>2025-01-20T00:21:53Z</updated>
    <published>2025-01-20T00:21:53Z</published>
    <link href="https://waylonwalker.com/dlvhdr-gh-dash/" rel="alternate" type="text/html"></link>
    <summary type="text">I like dlvhdr&#39;s project gh-dash.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/dlvhdr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dlvhdr’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/dlvhdr/gh-dash&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gh-dash&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A beautiful CLI dashboard for GitHub 🚀&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ doitintl kube-no-trouble</title>
    <id>https://waylonwalker.com/doitintl-kube-no-trouble/</id>
    <updated>2025-01-19T23:10:54Z</updated>
    <published>2025-01-19T23:10:54Z</published>
    <link href="https://waylonwalker.com/doitintl-kube-no-trouble/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered kube-no-trouble by doitintl, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/doitintl/kube-no-trouble&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kube-no-trouble&lt;/a&gt; by &lt;a href=&#34;https://github.com/doitintl&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;doitintl&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;Easily check your clusters for use of deprecated APIs&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ bootandy dust</title>
    <id>https://waylonwalker.com/bootandy-dust/</id>
    <updated>2025-01-19T18:56:38Z</updated>
    <published>2025-01-19T18:56:38Z</published>
    <link href="https://waylonwalker.com/bootandy-dust/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out dust by bootandy. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/bootandy/dust&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dust&lt;/a&gt; by &lt;a href=&#34;https://github.com/bootandy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;bootandy&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;A more intuitive version of du in rust&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nvim-mini mini.ai</title>
    <id>https://waylonwalker.com/nvim-mini-mini-ai/</id>
    <updated>2025-01-18T17:08:45Z</updated>
    <published>2025-01-18T17:08:45Z</published>
    <link href="https://waylonwalker.com/nvim-mini-mini-ai/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by mini.ai from nvim-mini.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/nvim-mini/mini.ai&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mini.ai&lt;/a&gt; from &lt;a href=&#34;https://github.com/nvim-mini&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-mini&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Neovim Lua plugin to extend and create &lt;code&gt;a&lt;/code&gt;/&lt;code&gt;i&lt;/code&gt; textobjects. Part of ‘mini.nvim’ library.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ echasnovski mini.ai</title>
    <id>https://waylonwalker.com/echasnovski-mini-ai/</id>
    <updated>2025-01-18T17:08:45Z</updated>
    <published>2025-01-18T17:08:45Z</published>
    <link href="https://waylonwalker.com/echasnovski-mini-ai/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out echasnovski and their project mini.ai.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/echasnovski&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;echasnovski&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/echasnovski/mini.ai&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mini.ai&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Neovim Lua plugin to extend and create &lt;code&gt;a&lt;/code&gt;/&lt;code&gt;i&lt;/code&gt; textobjects. Part of ‘mini.nvim’ library.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ swark-io swark</title>
    <id>https://waylonwalker.com/swark-io-swark/</id>
    <updated>2025-01-17T03:20:26Z</updated>
    <published>2025-01-17T03:20:26Z</published>
    <link href="https://waylonwalker.com/swark-io-swark/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on swark by swark-io.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/swark-io/swark&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;swark&lt;/a&gt; by &lt;a href=&#34;https://github.com/swark-io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;swark-io&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Create architecture diagrams from code automatically using large language models (LLMs).&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>a night of rounds</title>
    <id>https://waylonwalker.com/a-night-of-rounds/</id>
    <updated>2025-01-16T21:11:56Z</updated>
    <published>2025-01-16T21:11:56Z</published>
    <link href="https://waylonwalker.com/a-night-of-rounds/" rel="alternate" type="text/html"></link>
    <summary type="text">Tonight my son and I played rounds, I pulled clips of all the final rounds of each set of rounds. We play hardly any games with guns in them, this is one of...</summary>
    <content type="html">&lt;p&gt;Tonight my son and I played rounds, I pulled clips of all the final rounds of&#xA;each set of rounds.  We play hardly any games with guns in them, this is one of&#xA;the few exceptions, it feels quite whimsical, fun, and strategic, and not at&#xA;all realistic or first person.  The strategy part really brings me back to the&#xA;fps games I would play with friends in my teens.&lt;/p&gt;&#xA;&lt;h2 id=&#34;round-1---orange&#34;&gt;Round 1 - Orange &lt;a href=&#34;#round-1---orange&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I thought I had him on this one.  I had this rare power up that allows me to&#xA;shot through walls.  It came down to the very last round and he had too much&#xA;firepowerfor me.&lt;/p&gt;&#xA;&lt;video autoplay=&#34;&#34; controls=&#34;&#34; loop=&#34;true&#34; muted=&#34;&#34; playsinline=&#34;&#34; width=&#34;100%&#34; class=&#34;rounded-xl border-pink-900 border-2&#34;&gt;&#xA;     &lt;source src=&#34;https://dropper.waylonwalker.com/api/file/5863caea-da25-45e1-9a4d-111c6e4408a3.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;     Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;h2 id=&#34;round-2---blue&#34;&gt;Round 2 - Blue &lt;a href=&#34;#round-2---blue&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The final round of round 2 was Super fast.  I felt like I nerfed my homing&#xA;power up by adding fastball to it and it didn’t really home in anymore.  What&#xA;made it so quick, I think he had glass cannon and I laid down two well placed&#xA;shots.&lt;/p&gt;&#xA;&lt;video autoplay=&#34;&#34; controls=&#34;&#34; loop=&#34;true&#34; muted=&#34;&#34; playsinline=&#34;&#34; width=&#34;100%&#34; class=&#34;rounded-xl border-pink-900 border-2&#34;&gt;&#xA;     &lt;source src=&#34;https://dropper.waylonwalker.com/api/file/453553d6-802d-4b76-acb1-40300922b655.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;     Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;h2 id=&#34;round-3---orange&#34;&gt;Round 3 - Orange &lt;a href=&#34;#round-3---orange&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Round three he got some really good cards, but too much firepower and stacking&#xA;bouncy and ricochet made it too much to control and he friendly fired both&#xA;rounds.&lt;/p&gt;&#xA;&lt;video autoplay=&#34;&#34; controls=&#34;&#34; loop=&#34;true&#34; muted=&#34;&#34; playsinline=&#34;&#34; width=&#34;100%&#34; class=&#34;rounded-xl border-pink-900 border-2&#34;&gt;&#xA;     &lt;source src=&#34;https://dropper.waylonwalker.com/api/file/1ad4422e-1172-4218-bf1c-7bb0fa69f809.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;     Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;h2 id=&#34;round-4---blue&#34;&gt;Round 4 - Blue &lt;a href=&#34;#round-4---blue&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Round 4 I stacked up radiance and saw and just went for it.  Radiance emits the&#xA;power of the sun while reloading, so I went in guns blazin, pulled the shield&#xA;for saw and ran at him.&lt;/p&gt;&#xA;&lt;video autoplay=&#34;&#34; controls=&#34;&#34; loop=&#34;true&#34; muted=&#34;&#34; playsinline=&#34;&#34; width=&#34;100%&#34; class=&#34;rounded-xl border-pink-900 border-2&#34;&gt;&#xA;     &lt;source src=&#34;https://dropper.waylonwalker.com/api/file/dc5be9d9-b365-467e-9761-ab2767d85621.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;     Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;h2 id=&#34;round-5&#34;&gt;Round 5 &lt;a href=&#34;#round-5&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Round 5 I stacked up a multi shot, Big bullet, and timed explosion.  I didn’t&#xA;let off the firepower and there was no chance.&lt;/p&gt;&#xA;&lt;video autoplay=&#34;&#34; controls=&#34;&#34; loop=&#34;true&#34; muted=&#34;&#34; playsinline=&#34;&#34; width=&#34;100%&#34; class=&#34;rounded-xl border-pink-900 border-2&#34;&gt;&#xA;     &lt;source src=&#34;https://dropper.waylonwalker.com/api/file/72c6394e-77c6-4f83-9f06-c81b339277c5.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;     Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>wondercraft session one</title>
    <id>https://waylonwalker.com/wondercraft-session-one/</id>
    <updated>2025-01-13T15:06:46Z</updated>
    <published>2025-01-13T15:06:46Z</published>
    <link href="https://waylonwalker.com/wondercraft-session-one/" rel="alternate" type="text/html"></link>
    <summary type="text">My son and I are starting a new Minecraft server today called wondercraft.</summary>
    <content type="html">&lt;p&gt;My son and I are starting a new Minecraft server today called wondercraft.&lt;/p&gt;&#xA;&lt;h2 id=&#34;setup&#34;&gt;setup &lt;a href=&#34;#setup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;We are running a few mods on this server notably FTB Ultimine for less grindy&#xA;resource gathering, Sodium for shaders, and Universal Shops.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/730b4480-6356-4ad6-aecc-4b4661603ee6.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/730b4480-6356-4ad6-aecc-4b4661603ee6.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;We are runninng on Minecraft 1.20.1, I &lt;em&gt;think&lt;/em&gt; this is because it was the&#xA;latest supported by Universal Shops, its at least one major release old at this&#xA;point.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/66550abc-060c-47b2-830f-be7355ad7120.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/66550abc-060c-47b2-830f-be7355ad7120.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;I grabbed a few shaders, the ones that you see in this post are rethinking&#xA;voxels.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/3d6ab456-64dd-4760-a27e-02c2326ea36b.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/3d6ab456-64dd-4760-a27e-02c2326ea36b.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;spawn&#34;&gt;spawn &lt;a href=&#34;#spawn&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;We initially spawned in a plains biome near an acacia and forest biome.  We&#xA;ended up going straight for the forest, only coming back for some sheep and&#xA;wheat seeds.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/2cb49488-0e5f-44f4-b89e-dc5eaa8bf077.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/2cb49488-0e5f-44f4-b89e-dc5eaa8bf077.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;night-one-zombie-fight&#34;&gt;Night one Zombie fight &lt;a href=&#34;#night-one-zombie-fight&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;On the first night we had the obligitory zombie fight before getting beds and bases set.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/28b09b9c-6dd9-4437-9330-bf0e52401b6d.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/28b09b9c-6dd9-4437-9330-bf0e52401b6d.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;salmon-wrangler&#34;&gt;Salmon Wrangler &lt;a href=&#34;#salmon-wrangler&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I was the designated food provider.  I setup a small wheat farm with about 64&#xA;seeds, then went out to hunt down some salmon for the immediate food need.  I&#xA;ended up with about a stack of salmon at the end of the session.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/387ae50c-3048-4ee6-be93-beaf9369efaa.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/387ae50c-3048-4ee6-be93-beaf9369efaa.webp&#34; alt=&#34;387ae50c-3048-4ee6-be93-beaf9369efaa.webp&#34;/ data-glightbox=&#34;description: 387ae50c-3048-4ee6-be93-beaf9369efaa.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;setting-up-shop&#34;&gt;Setting up Shop &lt;a href=&#34;#setting-up-shop&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;So as mentioned above we are running a mod for shops called universal shops.&#xA;This mod is new to me and my son wanted to run it inspired by watching&#xA;hermitcraft.  We both decided that diamonds were the goal currency, but we&#xA;wanted to set up some shops early so we settled on Oak logs as the currency.&#xA;My job was to setup food based shops while he set up ore based shops.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/7e585608-db41-436f-8daa-77399cb78e20.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/7e585608-db41-436f-8daa-77399cb78e20.webp&#34; alt=&#34;7e585608-db41-436f-8daa-77399cb78e20.webp&#34;/ data-glightbox=&#34;description: 7e585608-db41-436f-8daa-77399cb78e20.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;My earnings after the first day.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/3e930e2f-d2c5-4308-9c3c-5308e7ae6f54.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/3e930e2f-d2c5-4308-9c3c-5308e7ae6f54.webp&#34; alt=&#34;3e930e2f-d2c5-4308-9c3c-5308e7ae6f54.webp&#34;/ data-glightbox=&#34;description: 3e930e2f-d2c5-4308-9c3c-5308e7ae6f54.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;first-death&#34;&gt;First Death &lt;a href=&#34;#first-death&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I forgot that I turned my sound off for a call, got lost on the chase of the&#xA;salmon and did not leave myself enough time to get to the top.&lt;/p&gt;&#xA;&lt;video autoplay=&#34;&#34; controls=&#34;&#34; loop=&#34;true&#34; muted=&#34;&#34; playsinline=&#34;&#34; width=&#34;100%&#34; class=&#34;rounded-xl border-pink-900 border-2&#34;&gt;&#xA;     &lt;source src=&#34;https://dropper.waylonwalker.com/api/file/f112d27a-3a77-4e8f-8bf7-8ff981b6355b.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;     Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;h2 id=&#34;second-death&#34;&gt;Second Death &lt;a href=&#34;#second-death&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Playing sloppy again I was walking around at night with only three hearts left.&#xA;My son wanted me to check out his shop that he just built out and I got hit by&#xA;a skelly on the way up, after the first hit I was sitting at 1 heart with no&#xA;where to go.&lt;/p&gt;&#xA;&lt;video autoplay=&#34;&#34; controls=&#34;&#34; loop=&#34;true&#34; muted=&#34;&#34; playsinline=&#34;&#34; width=&#34;100%&#34; class=&#34;rounded-xl border-pink-900 border-2&#34;&gt;&#xA;     &lt;source src=&#34;https://dropper.waylonwalker.com/api/file/ab088aa3-2661-4551-9040-1fad928ec450.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;     Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;h2 id=&#34;third-death&#34;&gt;Third Death &lt;a href=&#34;#third-death&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This one is just plain embarrasing, I was lost in the flow of hunting salmon&#xA;again, not paying any attention.  I came up for air, but didn’t even gie time&#xA;for more than a couple bubbles to come back before diving back in and died&#xA;almost instantly.&lt;/p&gt;&#xA;&lt;video autoplay=&#34;&#34; controls=&#34;&#34; loop=&#34;true&#34; muted=&#34;&#34; playsinline=&#34;&#34; width=&#34;100%&#34; class=&#34;rounded-xl border-pink-900 border-2&#34;&gt;&#xA;     &lt;source src=&#34;https://dropper.waylonwalker.com/api/file/f36b068d-0094-4d24-8b19-314ee23d71b1.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;     Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;h2 id=&#34;note-to-self&#34;&gt;Note to self &lt;a href=&#34;#note-to-self&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Next time run Minecraft in full screen so you don’t dox your start menu.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>nvim-manager</title>
    <id>https://waylonwalker.com/nvim-manager/</id>
    <updated>2025-01-12T21:14:19Z</updated>
    <published>2025-01-12T21:14:19Z</published>
    <link href="https://waylonwalker.com/nvim-manager/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently built a cli application as a nearly-one-shot-app called nvim-manager. It manages your nvim dotfiles install.</summary>
    <content type="html">&lt;p&gt;I recently built a cli application as a nearly-one-shot-app called&#xA;&lt;a href=&#34;https://github.com/waylonwalker/nvim-manager&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-manager&lt;/a&gt;. It manages your&#xA;nvim dotfiles install.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/20f800f1-64a6-43a3-93eb-e805b07d86b1.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img src=&#34;https://dropper.waylonwalker.com/api/file/20f800f1-64a6-43a3-93eb-e805b07d86b1.png&#34; alt=&#34;screenshot-2025-01-31T21-21-40-707Z.png&#34; class=&#34;more-cinematic glightbox&#34;/ data-glightbox=&#34;description: screenshot-2025-01-31T21-21-40-707Z.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;why&#34;&gt;Why &lt;a href=&#34;#why&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p class=&#34;chat-left&#34;&gt;&lt;/p&gt;&#xA;&lt;p class=&#34;chat-right&#34;&gt;&lt;/p&gt;&#xA;&lt;p class=&#34;chat-left&#34;&gt;&lt;/p&gt;&#xA;&lt;p class=&#34;chat-right&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-is-nvim-manager-any-better&#34;&gt;How is nvim manager any better &lt;a href=&#34;#how-is-nvim-manager-any-better&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;nvim-manager allows you to install pinned versions of your dotfiles, your&#xA;friends dotfiles, and distros in ~/.config.  This allows you to have stable&#xA;versions that will not break installed while you change things.&lt;/p&gt;&#xA;&lt;p&gt;I’m sure most of us have experienced the pain of installing one plugin, only to&#xA;update all of your plugins and break something.&lt;/p&gt;&#xA;&lt;p&gt;Or, you have small changes on every machine you use, because they are all just&#xA;a bit different and now you have big merge conflicts to deal with.&lt;/p&gt;&#xA;&lt;p&gt;All of this aside you can install a distro to get you by, or a known working&#xA;version of your own dotfiles.&lt;/p&gt;&#xA;&lt;h2 id=&#34;so-all-these-versions-in-config&#34;&gt;So all these versions in ~/.config &lt;a href=&#34;#so-all-these-versions-in-config&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;ya, thats the magic of &lt;code&gt;NVIM_APPNAME&lt;/code&gt;, I can boot up any of these intalled&#xA;working versions in an instant with &lt;code&gt;NVIM_APPNAME=nvim-waylonwalker-v0.0.1 nvim&lt;/code&gt;.  I can still cowboy up and break my main install, but as long as I am&#xA;diligent to keep these installs untouched I will always have a version to fall&#xA;back to in that moment of need.&lt;/p&gt;&#xA;&lt;h2 id=&#34;so-what-do-i-need-to-do&#34;&gt;So what do I need to do? &lt;a href=&#34;#so-what-do-i-need-to-do&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;start tagging your dotfiles as you hit stable versions&lt;/li&gt;&#xA;&lt;li&gt;Install &lt;code&gt;curl https://i.jpillora.com/waylonwalker/nvim-manager | bash&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Add some env variables to your shell startup (~/.bashrc or ~/.zshrc for example)&lt;/li&gt;&#xA;&lt;li&gt;Install that pinned version of your dotfiles &lt;code&gt;nvim-manager install v0.0.1&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Install a distro &lt;code&gt;nvim-manager install --distro astronvim&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Here are those environment variables I was talking about, set them to use your&#xA;dotfiles repo, name it what you like, and set your NVIM_APPNAME if you want to&#xA;default to a stable &lt;code&gt;nvim&lt;/code&gt; and force yourself to &lt;code&gt;unset NVIM_APPNAME&lt;/code&gt; to live&#xA;on the edge.&lt;/p&gt;&#xA;&lt;h2 id=&#34;install-nvim-manager&#34;&gt;Install nvim-manager &lt;a href=&#34;#install-nvim-manager&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install curl git unzip&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl https://i.jpillora.com/MordechaiHadad/bob &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bob install nightly&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bob use nightly&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s ~/.local/share/bob/nvim-bin/nvim ~/.local/bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl https://i.jpillora.com/waylonwalker/nvim-manager &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;install-your-own-dotfiles&#34;&gt;Install your own dotfiles &lt;a href=&#34;#install-your-own-dotfiles&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Setup with the following environment variables.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# nvim-manager&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;NVIM_MANAGER_REPO&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;https://github.com/WaylonWalker/devtainer&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;NVIM_CONFIG_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;nvim/.config/nvim&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;NVIM_MANAGER_INSTALL_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;/.config&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;NVIM_MANAGER_PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;nvim-waylonwalker&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;NVIM_APPNAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;NVIM_MANAGER_PREFIX&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;-v0.0.1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvim-manager install v0.0.1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvim&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Note I like installer by jpillora, I &lt;a href=&#34;/self-host/&#34; class=&#34;glossary-term&#34; title=&#34;Self hosting is the act of hosting your own applications and services without using a SAS provider. This is typically done with your own hardware, but there...&#34;&gt;self host&lt;/a&gt; it for my own security, but&#xA;feel free to download from GH if it makes you feel safer.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;ubuntu-container-speedrun&#34;&gt;Ubuntu Container Speedrun &lt;a href=&#34;#ubuntu-container-speedrun&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is a speedrun to getting nvim up and running in an ubuntu container.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -euxo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p ~/.local/bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;:~/.local/bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install curl git unzip -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -LsSf https://astral.sh/uv/install.sh &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl https://i.jpillora.com/MordechaiHadad/bob &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv bob ~/.local/bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bob install nightly&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bob use nightly&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s ~/.local/share/bob/nvim-bin/nvim ~/.local/bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl https://i.jpillora.com/waylonwalker/nvim-manager &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv nvim-manager ~/.local/bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;NVIM_MANAGER_REPO&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;https://github.com/WaylonWalker/devtainer&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;NVIM_CONFIG_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;nvim/.config/nvim&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;NVIM_MANAGER_INSTALL_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;/.config&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;NVIM_MANAGER_PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;nvim-waylonwalker&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;NVIM_APPNAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;NVIM_MANAGER_PREFIX&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;-v0.0.1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvim-manager install v0.0.1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvim-manager install --distro lazyvim&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvim-manager install --distro astronvim&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvim-manager install --distro nvchad&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvim-manager install --distro kickstart&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvim-manager install --distro lunarvim&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# plugins like treesiter need gcc and make&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install gcc make -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;TZ&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;America/Chicago&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;DEBIAN_FRONTEND&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;noninteractive&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install tzdata -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -fs /usr/share/zoneinfo/&lt;span class=&#34;nv&#34;&gt;$TZ&lt;/span&gt; /etc/localtime&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg-reconfigure -f noninteractive tzdata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Some of the mason installs need npm&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install nodejs npm -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# plugins like telescope require ripgrep&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install fzf ripgrep -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;give-it-a-star&#34;&gt;Give it a Star &lt;a href=&#34;#give-it-a-star&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’d appreciate a star if you find this app useful.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/waylonwalker/nvim-manager&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/waylonwalker/nvim-manager&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>one-shot-s3-cleanup</title>
    <id>https://waylonwalker.com/one-shot-s3-cleanup/</id>
    <updated>2025-01-12T11:18:25Z</updated>
    <published>2025-01-12T11:18:25Z</published>
    <link href="https://waylonwalker.com/one-shot-s3-cleanup/" rel="alternate" type="text/html"></link>
    <summary type="text">So I made a mistake in an app I am working on and ended up creating thumbnails of thumbnails, and thumbnails of thumbnails of thumbnails... etc. I was able...</summary>
    <content type="html">&lt;p&gt;So I made a mistake in an app I am working on and ended up creating thumbnails&#xA;of thumbnails, and thumbnails of thumbnails of thumbnails… etc. I was able to&#xA;delete them all, but I wanted to make a one-shot script to do it.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/e804dd2c-e3d9-4a83-83fa-95a720cdc92b.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/e804dd2c-e3d9-4a83-83fa-95a720cdc92b.png&#34; alt=&#34;screenshot-2025-01-31T21-20-56-934Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-01-31T21-20-56-934Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;one-shot-app&#34;&gt;One Shot App &lt;a href=&#34;#one-shot-app&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I got the idea of the one shot app from &lt;a href=&#34;https://simonwillison.net/2024/Dec/19/one-shot-python-tools/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/simonwillison.net.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/simonwillison.net.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Simon&#xA;Willison&lt;/a&gt; and&#xA;replicated his setup in a chatgpt project&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/78d6eea9-29a2-43ed-b09e-1585762c991c.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/78d6eea9-29a2-43ed-b09e-1585762c991c.webp&#34; alt=&#34;screenshot-2025-01-12T18-16-57-443Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-01-12T18-16-57-443Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;initial-prompt&#34;&gt;Initial Prompt &lt;a href=&#34;#initial-prompt&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;a mistake was made in my s3 bucket and I&amp;#39;ve created a bunch of extra files&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;write a script that deletes all files that contain _thumb_thumb&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;⬢ [devtainer] ❯ aws s3 ls s3://dropper&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2024-12-29 14:32:32      16158 02271f4c-be18-4bea-b23e-d00f9fe42b9f.webp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2025-01-11 14:20:49       2878 02271f4c-be18-4bea-b23e-d00f9fe42b9f_thumb.webp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2025-01-11 14:21:17       2858 02271f4c-be18-4bea-b23e-d00f9fe42b9f_thumb_thumb.webp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2025-01-11 14:21:44       2856 02271f4c-be18-4bea-b23e-d00f9fe42b9f_thumb_thumb_thumb.webp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2025-01-11 14:21:44       2856 02271f4c-be18-4bea-b23e-d00f9fe42b9f_thumb_thumb_thumb_thumb.webp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2024-12-27 10:25:36       2812 06422c09-d0da-44ec-9339-786864ebccf2.webp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2025-01-11 14:20:49       2710 06422c09-d0da-44ec-9339-786864ebccf2_thumb.webp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2025-01-11 14:21:17       2652 06422c09-d0da-44ec-9339-786864ebccf2_thumb_thumb.webp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2025-01-11 14:21:45       2632 06422c09-d0da-44ec-9339-786864ebccf2_thumb_thumb_thumb.webp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2025-01-11 14:21:45       2632 06422c09-d0da-44ec-9339-786864ebccf2_thumb_thumb_thumb_thumb.webp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2024-12-29 20:44:14     146060 074edddb-8b46-4d94-9b55-d70a7bb74366.webp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2025-01-11 14:20:50      12476 074edddb-8b46-4d94-9b55-d70a7bb74366_thumb.webp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2025-01-11 14:21:17      12400 074edddb-8b46-4d94-9b55-d70a7bb74366_thumb_thumb.webp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;create a typer application to do this job&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;include a --dry-run flag&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make the search for _thumb_thumb editable&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;s3-cleanup&#34;&gt;s3_cleanup &lt;a href=&#34;#s3-cleanup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is the result of the s3_cleanup script.  It ended up being 5 or 6 passes&#xA;to get everything I wanted with soft-delete enabled. Nice preview outputs in&#xA;the dry run.  This was 90% created by chatgpt 4o, with some slight hand edits&#xA;by me along the way.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;ch&#34;&gt;#!/usr/bin/env -S uv run --quiet --script&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# /// script&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# requires-python = &amp;#34;&amp;gt;=3.12&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# dependencies = [&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#34;boto3&amp;#34;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#34;typer&amp;#34;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#     &amp;#34;rich&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ///&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;boto3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;datetime&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;timezone&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;rich.console&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Console&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;rich.table&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Table&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;traceback&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;typer&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;app&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;typer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Typer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;console&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;DEFAULT_SOFT_DELETE_DIR&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;soft-delete/&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;human_readable_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Convert bytes to a human-readable format.&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;unit&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;B&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;KB&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;MB&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;GB&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;TB&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1024&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;.2f&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unit&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1024&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;.2f&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; PB&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;calculate_file_age&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;last_modified&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Calculate the age of the file from the current time.&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;now&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;now&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;timezone&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;utc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;age&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;now&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;last_modified&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;days&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;age&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;days&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;days&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;days&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; days&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;hours&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;remainder&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;divmod&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;age&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;seconds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3600&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;minutes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;remainder&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;//&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;60&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hours&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hours&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; hours&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;minutes&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; minutes&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@app.command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;clean&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;bucket_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;typer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Argument&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;The name of the S3 bucket.&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;substring&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;typer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Argument&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;The substring to search for in file names.&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;dry_run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;typer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;If set, no files will be deleted; only listed.&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;soft_delete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;typer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;If set, files will be moved to a soft delete directory instead of permanently deleted.&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;soft_delete_dir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;typer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;DEFAULT_SOFT_DELETE_DIR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;The directory to move soft-deleted files to.&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;max_age&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;typer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Maximum age of files to include, in days.&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;min_age&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;typer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Minimum age of files to include, in days.&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Delete or soft-delete files in an S3 bucket that contain a specific substring in their names.&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;s3&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;boto3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;s3&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# List all objects in the bucket&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;list_objects_v2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Bucket&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bucket_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Contents&amp;#34;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;[bold yellow]No files found in the bucket.[/bold yellow]&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;now&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;now&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;timezone&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;utc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;file_within_age_range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;file_age&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;now&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;LastModified&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;days&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;max_age&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file_age&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;max_age&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;min_age&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file_age&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;min_age&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;files_to_process&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Contents&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;substring&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file_within_age_range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;files_to_process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;s2&#34;&gt;&amp;#34;[bold yellow]No files matching criteria found in the bucket.[/bold yellow]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dry_run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;s2&#34;&gt;&amp;#34;[bold blue]Dry run mode: The following files would be processed:[/bold blue]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Files to be Processed&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_column&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;File Name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;cyan&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;no_wrap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_column&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Size&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;magenta&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;justify&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;right&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_column&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Age&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;green&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;justify&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;right&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_column&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Action&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;yellow&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;no_wrap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;total_size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;files_to_process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;human_size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;human_readable_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Size&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;file_age&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;calculate_file_age&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;LastModified&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;action&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;[bold yellow]-&amp;gt; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;soft_delete_dir&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Key&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;[/bold yellow]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;soft_delete&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;[bold red]DELETE[/bold red]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_row&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;human_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file_age&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;total_size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Size&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;[bold green]Summary:[/bold green] &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;files_to_process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; files, Total Size: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;human_readable_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;total_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;, Operation: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Soft Delete&amp;#39;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;soft_delete&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Delete&amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;files_to_process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;file_key&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;soft_delete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;copy_source&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Bucket&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;bucket_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file_key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;new_key&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;soft_delete_dir&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file_key&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;s3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;copy_object&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;n&#34;&gt;CopySource&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;copy_source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Bucket&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bucket_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;new_key&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;s3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;delete_object&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Bucket&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bucket_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file_key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;[bold yellow]Moved to soft-delete:[/bold yellow] &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file_key&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; -&amp;gt; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;new_key&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;s3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;delete_object&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Bucket&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bucket_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file_key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;[bold red]Deleted:[/bold red] &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file_key&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;[bold green]Operation completed. &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;files_to_process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; files processed. Operation: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Soft Delete&amp;#39;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;soft_delete&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Delete&amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;[/bold green]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;except&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;Exception&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;[bold red]Error:[/bold red] &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;red&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@app.command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;clear_soft_delete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;bucket_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;typer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Argument&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;The name of the S3 bucket.&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;soft_delete_dir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;typer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;DEFAULT_SOFT_DELETE_DIR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;The soft delete directory to clear.&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;dry_run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;typer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;If set, no files will be deleted; only listed.&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Remove all files in the soft delete directory.&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;s3&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;boto3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;s3&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;list_objects_v2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Bucket&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bucket_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Prefix&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;soft_delete_dir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Contents&amp;#34;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;[bold yellow]No files found in the soft delete directory &amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;soft_delete_dir&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#39;.[/bold yellow]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;files_to_delete&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Contents&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dry_run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;s2&#34;&gt;&amp;#34;[bold blue]Dry run mode: The following files would be deleted from the soft delete directory:[/bold blue]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Files to be Deleted&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_column&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;File Name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;cyan&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;no_wrap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_column&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Size&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;magenta&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;justify&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;right&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;total_size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;files_to_delete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;human_size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;human_readable_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Size&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_row&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;human_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;total_size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Size&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;[bold green]Summary:[/bold green] &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;files_to_delete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; files, Total Size: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;human_readable_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;total_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file_key&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;files_to_delete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;file_key&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file_key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;s3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;delete_object&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Bucket&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bucket_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file_key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;[bold red]Deleted from soft-delete:[/bold red] &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file_key&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;[bold green]Soft delete directory &amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;soft_delete_dir&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#39; cleared. &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;files_to_delete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; files removed.[/bold green]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;except&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;Exception&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;[bold red]Error:[/bold red] &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;red&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;[bold red]Operation failed.[/bold red]&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;traceback&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;format_exc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@app.command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;undo_soft_delete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;bucket_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;typer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Argument&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;The name of the S3 bucket.&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;soft_delete_dir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;typer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;DEFAULT_SOFT_DELETE_DIR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;The soft delete directory to restore from.&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;dry_run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;typer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;If set, no files will be restored; only listed.&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Restore all files from the soft delete directory to their original locations.&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;s3&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;boto3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;s3&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;list_objects_v2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Bucket&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bucket_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Prefix&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;soft_delete_dir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Contents&amp;#34;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;[bold yellow]No files found in the soft delete directory &amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;soft_delete_dir&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#39;.[/bold yellow]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;files_to_restore&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Contents&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dry_run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;s2&#34;&gt;&amp;#34;[bold blue]Dry run mode: The following files would be restored:[/bold blue]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Files to be Restored&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_column&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;File Name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;cyan&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;no_wrap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_column&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Size&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;magenta&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;justify&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;right&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_column&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Original Location&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;green&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;no_wrap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;total_size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;files_to_restore&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;human_size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;human_readable_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Size&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;original_key&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;soft_delete_dir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_row&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;human_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;original_key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;total_size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Size&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;[bold green]Summary:[/bold green] &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;files_to_restore&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; files, Total Size: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;human_readable_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;total_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;files_to_restore&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;file_key&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;original_key&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file_key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;soft_delete_dir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# Remove the soft delete prefix&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;copy_source&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Bucket&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;bucket_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file_key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;s3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;copy_object&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;CopySource&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;copy_source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Bucket&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bucket_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;original_key&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;s3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;delete_object&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Bucket&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bucket_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file_key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;[bold green]Restored:[/bold green] &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file_key&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; -&amp;gt; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;original_key&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;[bold green]Restoration completed. &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;files_to_restore&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; files restored.[/bold green]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;except&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;Exception&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;[bold red]Error:[/bold red] &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;red&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;vm&#34;&gt;__name__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;full-help-text-output&#34;&gt;full help text output &lt;a href=&#34;#full-help-text-output&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is the help text for all of the commands in the script.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dropper on  main &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;!?&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; is 📦 v1.0.0 via  v22.13.0  v3.11.10 on  &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;us-east-1&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;  NO PYTHON VENV SET took 7s&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;⬢ &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;devtainer&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; ❯ ./scripts/s3_cleanup.py --help&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; Usage: s3_cleanup.py &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;OPTIONS&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; COMMAND &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;ARGS&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;╭─ Options ───────────────────────────────────────────────────────────────────────────────────────────────────────╮&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ --install-completion          Install completion &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; the current shell.                                         │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ --show-completion             Show completion &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; the current shell, to copy it or customize the installation.  │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ --help                        Show this message and exit.                                                       │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;╭─ Commands ──────────────────────────────────────────────────────────────────────────────────────────────────────╮&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ clean               Delete or soft-delete files in an S3 bucket that contain a specific substring in their      │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                     names.                                                                                      │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ clear-soft-delete   Remove all files in the soft delete directory.                                              │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ undo-soft-delete    Restore all files from the soft delete directory to their original locations.               │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;⬢ &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;devtainer&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; ❯ ./scripts/s3_cleanup.py clean --help&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; Usage: s3_cleanup.py clean &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;OPTIONS&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; BUCKET_NAME SUBSTRING&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; Delete or soft-delete files in an S3 bucket that contain a specific substring in their names.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;╭─ Arguments ─────────────────────────────────────────────────────────────────────────────────────────────────────╮&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ *    bucket_name      TEXT  The name of the S3 bucket. &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;default: None&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;required&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;                               │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ *    substring        TEXT  The substring to search &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; in file names. &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;default: None&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;required&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;               │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;╭─ Options ───────────────────────────────────────────────────────────────────────────────────────────────────────╮&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ --dry-run            --no-dry-run                 If set, no files will be deleted&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; only listed.                │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                                                   &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;default: no-dry-run&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;                                         │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ --soft-delete        --no-soft-delete             If set, files will be moved to a soft delete directory        │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                                                   instead of permanently deleted.                               │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                                                   &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;default: no-soft-delete&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;                                     │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ --soft-delete-dir                        TEXT     The directory to move soft-deleted files to.                  │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                                                   &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;default: soft-delete/&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;                                       │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ --max-age                                INTEGER  Maximum age of files to include, in days. &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;default: None&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;     │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ --min-age                                INTEGER  Minimum age of files to include, in days. &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;default: None&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;     │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ --help                                            Show this message and exit.                                   │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;⬢ &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;devtainer&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; ❯ ./scripts/s3_cleanup.py clear-soft-delete --help&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; Usage: s3_cleanup.py clear-soft-delete &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;OPTIONS&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; BUCKET_NAME&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; Remove all files in the soft delete directory.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;╭─ Arguments ─────────────────────────────────────────────────────────────────────────────────────────────────────╮&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ *    bucket_name      TEXT  The name of the S3 bucket. &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;default: None&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;required&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;                               │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;╭─ Options ───────────────────────────────────────────────────────────────────────────────────────────────────────╮&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ --soft-delete-dir                    TEXT  The soft delete directory to clear. &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;default: soft-delete/&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;          │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ --dry-run            --no-dry-run          If set, no files will be deleted&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; only listed. &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;default: no-dry-run&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ --help                                     Show this message and exit.                                          │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;⬢ &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;devtainer&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; ❯ ./scripts/s3_cleanup.py undo-soft-delete --help&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; Usage: s3_cleanup.py undo-soft-delete &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;OPTIONS&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; BUCKET_NAME&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; Restore all files from the soft delete directory to their original locations.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;╭─ Arguments ─────────────────────────────────────────────────────────────────────────────────────────────────────╮&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ *    bucket_name      TEXT  The name of the S3 bucket. &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;default: None&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;required&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;                               │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;╭─ Options ───────────────────────────────────────────────────────────────────────────────────────────────────────╮&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ --soft-delete-dir                    TEXT  The soft delete directory to restore from. &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;default: soft-delete/&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;   │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ --dry-run            --no-dry-run          If set, no files will be restored&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; only listed.                      │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                                            &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;default: no-dry-run&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;                                                │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ --help                                     Show this message and exit.                                          │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>postiz-file-upload</title>
    <id>https://waylonwalker.com/postiz-file-upload/</id>
    <updated>2025-01-10T20:35:39Z</updated>
    <published>2025-01-10T20:35:39Z</published>
    <link href="https://waylonwalker.com/postiz-file-upload/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I learned that the docs in postiz are a bit behind, (fantastic docs btw, they are to the point, and cover almost all of what you need). The docs state...</summary>
    <content type="html">&lt;p&gt;Today I learned that the docs in postiz are a bit behind, (fantastic docs btw,&#xA;they are to the point, and cover almost all of what you need).  The docs state&#xA;that you need to include an R2 bucket to handle uploads.&lt;/p&gt;&#xA;&lt;p&gt;This &lt;a href=&#34;https://github.com/gitroomhq/postiz-app/issues/322&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;issue&lt;/a&gt; shows that&#xA;more work has been done, one of which is local storage.  The &lt;a href=&#34;https://docs.postiz.com/installation/docker-compose&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/docs.postiz.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/docs.postiz.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;compose&#xA;file&lt;/a&gt; they use in the&#xA;quick start has the required env variables to set this up.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;STORAGE_PROVIDER&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;local&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;UPLOAD_DIRECTORY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/uploads&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;NEXT_PUBLIC_UPLOAD_DIRECTORY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/uploads&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;looking into my running instance I can see my images there.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;⬢ &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;devtainer&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; ❯ podman &lt;span class=&#34;nb&#34;&gt;exec&lt;/span&gt; postiz ls /uploads/2025/01/09&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;811747b3f703f5d9a7f10aff5103412ff0.jpeg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;a221db10a76f0c414171ab417379b09ec.jpeg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>we beat trailmakers</title>
    <id>https://waylonwalker.com/we-beat-trailmakers/</id>
    <updated>2025-01-10T19:53:14Z</updated>
    <published>2025-01-10T19:53:14Z</published>
    <link href="https://waylonwalker.com/we-beat-trailmakers/" rel="alternate" type="text/html"></link>
    <summary type="text">Today we broke through the atmosphere in trailmakers ready for pickup from those back at mission conrol.</summary>
    <content type="html">&lt;p&gt;Today we broke through the atmosphere in trailmakers ready for pickup from&#xA;those back at mission conrol.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I haven’t posted a lot of gaming content to by blog, idk why, but I think I&#xA;am going to start, especially for the ones that are good memories with my&#xA;son.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Today we hit 100% of the required parts required to build the space ship and&#xA;leave the atmosphere of the planet that the story is set in.  Trailmakers is a&#xA;game where you design and build your own vehicles.  The campaign mode standed&#xA;is a story where you are in a high tech freighter ship that crash lands on a&#xA;distant planet.  Your crew back home can come as far as the planet your on but&#xA;cannot break through the atmosphere.  Your job is to collect all the wreckage&#xA;and gain all the parts required for a space ship build to take you out of the&#xA;atmosphere to meet them.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/f751d33e-1829-47ea-a593-f1d940c86f4f.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/f751d33e-1829-47ea-a593-f1d940c86f4f.webp&#34; alt=&#34;end screen&#34;/ data-glightbox=&#34;description: end screen&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/73fed115-7d6a-4629-a9a3-be6819def314.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/73fed115-7d6a-4629-a9a3-be6819def314.webp&#34; alt=&#34;end achievement&#34;/ data-glightbox=&#34;description: end achievement&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;There were a couple really heavy salvages to gather up, this one is high in the&#xA;floating islands and is the cockpit fo the space ship.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/7ab6954a-4dd5-4ab8-b50e-91440c89570b.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/7ab6954a-4dd5-4ab8-b50e-91440c89570b.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;I thought this was a cool shot of one of our builds with the suspension fully&#xA;squatted out with a heavy load on the back.&lt;/p&gt;&#xA;&lt;h2 id=&#34;multiple-salvages&#34;&gt;Multiple Salvages &lt;a href=&#34;#multiple-salvages&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It took us way to long to realize that we had enough power cores to add a bunch&#xA;of tractor beams to do multiple salvages at once. Each tractor beam only has&#xA;the ability to pick up one salvage at a time.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/36f1b541-e9c1-46f9-8219-e37bbed67344.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/36f1b541-e9c1-46f9-8219-e37bbed67344.webp&#34; alt=&#34;screenshot-2025-01-11T03-14-29-022Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-01-11T03-14-29-022Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;some-wild-moments&#34;&gt;Some wild moments &lt;a href=&#34;#some-wild-moments&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/e68cfa29-bc0b-41cc-8ae8-79ef26d1aa97.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/e68cfa29-bc0b-41cc-8ae8-79ef26d1aa97.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;This clip brought both of us to curled over laughter, I wish I had recording on&#xA;to get a full clip of it, this screenshot is the best I got.  What happened was&#xA;my son was being super silly and blew us up, but somehow the seat of the last&#xA;build stayed in while we respawnd and our new vehicle picked it up.  Not only&#xA;that, but the broken seat was still usable and he was able to sit in it!&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/636f3409-b8ad-44f7-9545-9b38d0393f07.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/636f3409-b8ad-44f7-9545-9b38d0393f07.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;acheivements-status&#34;&gt;acheivements status &lt;a href=&#34;#acheivements-status&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Currently I am quite a ways from getting 100% of the achievements for the game.&#xA;I think I will finish 100% of the stranded campaign because it is super fun,&#xA;but probably wont 100% it.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/2fa177b8-d4d3-41ef-b006-67b369459175.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/2fa177b8-d4d3-41ef-b006-67b369459175.webp&#34; alt=&#34;screenshot-2025-01-11T01-58-45-192Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-01-11T01-58-45-192Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;im-trying-out-video&#34;&gt;I’m trying out video &lt;a href=&#34;#im-trying-out-video&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I turned on steam recording and played for a minute to test out hosting video here.&lt;/p&gt;&#xA;&lt;p&gt;&lt;video src=&#34;https://dropper.waylonwalker.com/api/file/efd58566-2f64-47d1-8b0b-13129b60a860.mp4&#34; controls=&#34;&#34;&gt;&lt;/video&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;i-accidentally-entered-deep-space&#34;&gt;I accidentally entered deep space &lt;a href=&#34;#i-accidentally-entered-deep-space&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/956214ef-5f83-439b-9414-49be0c26b77a.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/956214ef-5f83-439b-9414-49be0c26b77a.webp&#34; alt=&#34;screenshot-2025-01-12T02-04-53-917Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-01-12T02-04-53-917Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ containers podman-compose</title>
    <id>https://waylonwalker.com/containers-podman-compose/</id>
    <updated>2025-01-09T14:54:36Z</updated>
    <published>2025-01-09T14:54:36Z</published>
    <link href="https://waylonwalker.com/containers-podman-compose/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on podman-compose by containers.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/containers/podman-compose&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;podman-compose&lt;/a&gt; by &lt;a href=&#34;https://github.com/containers&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;containers&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;a script to run docker-compose.yml using podman&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ cyclotruc gitingest</title>
    <id>https://waylonwalker.com/cyclotruc-gitingest/</id>
    <updated>2025-01-09T13:41:27Z</updated>
    <published>2025-01-09T13:41:27Z</published>
    <link href="https://waylonwalker.com/cyclotruc-gitingest/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about gitingest, an amazing project by cyclotruc. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/cyclotruc/gitingest&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gitingest&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/cyclotruc&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cyclotruc&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Replace ‘hub’ with ‘ingest’ in any github url to get a prompt-friendly extract of a codebase&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ coderamp-labs gitingest</title>
    <id>https://waylonwalker.com/coderamp-labs-gitingest/</id>
    <updated>2025-01-09T13:41:27Z</updated>
    <published>2025-01-09T13:41:27Z</published>
    <link href="https://waylonwalker.com/coderamp-labs-gitingest/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? gitingest by coderamp-labs.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/coderamp-labs/gitingest&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gitingest&lt;/a&gt; by &lt;a href=&#34;https://github.com/coderamp-labs&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;coderamp-labs&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Replace ‘hub’ with ‘ingest’ in any github url to get a prompt-friendly extract of a codebase&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Pinjasaur bic</title>
    <id>https://waylonwalker.com/pinjasaur-bic/</id>
    <updated>2025-01-09T02:25:48Z</updated>
    <published>2025-01-09T02:25:48Z</published>
    <link href="https://waylonwalker.com/pinjasaur-bic/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out bic by Pinjasaur. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/Pinjasaur/bic&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;bic&lt;/a&gt; by &lt;a href=&#34;https://github.com/Pinjasaur&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Pinjasaur&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;Static blog generator, in bash&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>/start</title>
    <id>https://waylonwalker.com/start/</id>
    <updated>2025-01-03T10:49:47Z</updated>
    <published>2025-01-03T10:49:47Z</published>
    <link href="https://waylonwalker.com/start/" rel="alternate" type="text/html"></link>
    <summary type="text">Welcome to waylonwalker.com, my small corner of the internet. I currently have posts published, here are some links to help you get started around here.</summary>
    <content type="html">&lt;p&gt;Welcome to waylonwalker.com, my small corner of the internet.  I currently have&#xA;3581 posts published,&#xA;here are some links to help you get started around here.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/1896de8d-abd9-4652-95df-b41dc7eaf48b.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img src=&#34;https://dropper.waylonwalker.com/api/file/1896de8d-abd9-4652-95df-b41dc7eaf48b.webp&#34; alt=&#34;2fcdafc0-f152-4fa9-ac91-799acd9084d3-239-1.webp&#34; class=&#34;more-cinematic glightbox&#34;/ data-glightbox=&#34;description: 2fcdafc0-f152-4fa9-ac91-799acd9084d3-239-1.webp&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;feeds&#34;&gt;Feeds &lt;a href=&#34;#feeds&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have quite a few different feeds that you can browse or subscribe to in your&#xA;rss reader, you can find them on my &lt;a href=&#34;/feeds/&#34; class=&#34;wikilink&#34; data-title=&#34;feeds&#34; data-description=&#34;I have several feeds that you can consume my content with. Many posts will cross between them, so if you would like to follow a certain stream of content in...&#34; data-date=&#34;2024-04-02&#34; data-preview=&#34;I have several feeds that you can consume my content with. Many posts will cross between them, so if you would like to follow a certain stream of content in...&#34;&gt;feeds&lt;/a&gt; page.&lt;/p&gt;&#xA;&lt;h2 id=&#34;slash-posts&#34;&gt;Slash posts &lt;a href=&#34;#slash-posts&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;[[ slashes ]]&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://slashpages.net/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/slashpages.net.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/slashpages.net.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Slash pages&lt;/a&gt; are some evergreen pages that I will do my best to keep up to date,&#xA;they are typically not targeted to a specific moment in time, but designed to&#xA;be ever living.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/about/&#34; class=&#34;wikilink&#34; data-title=&#34;Waylon Walker&#34; data-description=&#34;👋 Hi, I am Waylon Walker. Husband, Father of two, and creator things on the web, learning, and teaching others. I play lots of Minecraft, make art, and...&#34; data-date=&#34;2021-11-20&#34; data-preview=&#34;👋 Hi, I am Waylon Walker. Husband, Father of two, and creator things on the web, learning, and teaching others. I play lots of Minecraft, make art, and...&#34;&gt;Waylon Walker&lt;/a&gt; - 👋 Hi, I am Waylon Walker. Husband, Father of two, and creator things on the web, learning, and teaching others. I play lots of Minecraft, make art, and…&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/ai/&#34; class=&#34;wikilink&#34; data-title=&#34;Ai&#34; data-description=&#34;Last updated Jan 2026.&#34; data-date=&#34;2026-01-11&#34; data-preview=&#34;Last updated Jan 2026.&#34;&gt;Ai&lt;/a&gt; - Last updated Jan 2026.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/analytics/&#34; class=&#34;wikilink&#34; data-title=&#34;analytics&#34; data-description=&#34;I&amp;#39;ve been posting on this site since 2016, when the company I worked for went through a large round of layoffs. I was worried about being laid off, so I...&#34; data-date=&#34;2025-01-22&#34; data-preview=&#34;I&amp;#39;ve been posting on this site since 2016, when the company I worked for went through a large round of layoffs. I was worried about being laid off, so I...&#34;&gt;analytics&lt;/a&gt; - I&amp;#39;ve been posting on this site since 2016, when the company I worked for went through a large round of layoffs. I was worried about being laid off, so I…&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/carry/&#34; class=&#34;wikilink&#34; data-title=&#34;/carry/&#34; data-description=&#34;I try to keep a pretty light every day carry, but it never works out, keyfobs and headphone cases end up causing more bulk than I&amp;#39;d like, but My EDC is no...&#34; data-date=&#34;2026-03-27&#34; data-preview=&#34;I try to keep a pretty light every day carry, but it never works out, keyfobs and headphone cases end up causing more bulk than I&amp;#39;d like, but My EDC is no...&#34;&gt;/carry/&lt;/a&gt; - I try to keep a pretty light every day carry, but it never works out, keyfobs and headphone cases end up causing more bulk than I&amp;#39;d like, but My EDC is no…&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/colophon/&#34; class=&#34;wikilink&#34; data-title=&#34;/colophon&#34; data-description=&#34;Colophon a page that describes how the site &amp;gt; is made, with what tools, supporting what technologies&#34; data-date=&#34;2025-01-02&#34; data-preview=&#34;Colophon a page that describes how the site &amp;gt; is made, with what tools, supporting what technologies&#34;&gt;/colophon&lt;/a&gt; - Colophon a page that describes how the site &amp;gt; is made, with what tools, supporting what technologies&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/feeds/&#34; class=&#34;wikilink&#34; data-title=&#34;feeds&#34; data-description=&#34;I have several feeds that you can consume my content with. Many posts will cross between them, so if you would like to follow a certain stream of content in...&#34; data-date=&#34;2024-04-02&#34; data-preview=&#34;I have several feeds that you can consume my content with. Many posts will cross between them, so if you would like to follow a certain stream of content in...&#34;&gt;feeds&lt;/a&gt; - I have several feeds that you can consume my content with. Many posts will cross between them, so if you would like to follow a certain stream of content in…&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/markata/&#34; class=&#34;wikilink&#34; data-title=&#34;markata&#34; data-description=&#34;This post is a work in progress.&#34; data-date=&#34;2024-05-30&#34; data-preview=&#34;This post is a work in progress.&#34;&gt;markata&lt;/a&gt; - This post is a work in progress.&lt;/li&gt;&#xA;&lt;li&gt;&amp;lt;a href=&amp;#34;/nope/&amp;#34; class=“wikilink” data-title=&amp;#34;/nope&amp;#34; data-description=“Inspired by &lt;a href=&#34;https://baty.net/&#34; class=&#34;mention&#34; data-name=&#34;baty.net&#34; data-bio=&#34;Jack Baty&amp;amp;#39;s blog — posts, journal, notes.&#34; data-avatar=&#34;https://baty.net/img/opengraph.jpg&#34; data-handle=&#34;@baty&#34;&gt;@baty&lt;/a&gt;&amp;#39;s nope slashpage, a list of ** things I don&amp;#39;t like, don&amp;#39;t care, avoid, overhyped, or won&amp;#39;t do in no particular order, updated as I think…” data-date=“2026-02-11”&amp;gt;/nope - Inspired by &lt;a href=&#34;https://baty.net/&#34; class=&#34;mention&#34; data-name=&#34;baty.net&#34; data-bio=&#34;Jack Baty&amp;amp;#39;s blog — posts, journal, notes.&#34; data-avatar=&#34;https://baty.net/img/opengraph.jpg&#34; data-handle=&#34;@baty&#34;&gt;@baty&lt;/a&gt;&amp;#39;s nope slashpage, a list of ** things I don&amp;#39;t like, don&amp;#39;t care, avoid, overhyped, or won&amp;#39;t do in no particular order, updated as I think…&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/now/&#34; class=&#34;wikilink&#34; data-title=&#34;/now&#34; data-description=&#34;This page is meant to be simple view into what is happening in my life right now. Inspired by @NowNowNow. and Derek Sivers.&#34; data-date=&#34;2025-01-12&#34; data-preview=&#34;This page is meant to be simple view into what is happening in my life right now. Inspired by @NowNowNow. and Derek Sivers.&#34;&gt;/now&lt;/a&gt; - This page is meant to be simple view into what is happening in my life right now. Inspired by @NowNowNow. and Derek Sivers.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/start/&#34; class=&#34;wikilink&#34; data-title=&#34;/start&#34; data-description=&#34;Welcome to waylonwalker.com, my small corner of the internet. I currently have posts published, here are some links to help you get started around here.&#34; data-date=&#34;2025-01-03&#34; data-preview=&#34;Welcome to waylonwalker.com, my small corner of the internet. I currently have posts published, here are some links to help you get started around here.&#34;&gt;/start&lt;/a&gt; - Welcome to waylonwalker.com, my small corner of the internet. I currently have posts published, here are some links to help you get started around here.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;Thoughts&lt;/a&gt; - These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my…&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/tinyapps/&#34; class=&#34;wikilink&#34; data-title=&#34;tinyapps&#34; data-description=&#34;I&amp;#39;m working on replacing my usage of google inline search apps with real apps, these are ones that I create and host on my own homelab. The first three that...&#34; data-date=&#34;2025-05-22&#34; data-preview=&#34;I&amp;#39;m working on replacing my usage of google inline search apps with real apps, these are ones that I create and host on my own homelab. The first three that...&#34;&gt;tinyapps&lt;/a&gt; - I&amp;#39;m working on replacing my usage of google inline search apps with real apps, these are ones that I create and host on my own &lt;a href=&#34;/homelab/&#34; class=&#34;glossary-term&#34; title=&#34;A place to self host applications. For me this is primarily self built web applications, and applications for sharing files with my family. Techno Tim has a...&#34;&gt;homelab&lt;/a&gt;. The first three that…&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/top4/&#34; class=&#34;wikilink&#34; data-title=&#34;/top4&#34; data-description=&#34;Definitive ranked lists of my top 3 favorites plus an honorable mention.&#34; data-date=&#34;2026-02-11&#34; data-preview=&#34;Definitive ranked lists of my top 3 favorites plus an honorable mention.&#34;&gt;/top4&lt;/a&gt; - Definitive ranked lists of my top 3 favorites plus an honorable mention.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/verify/&#34; class=&#34;wikilink&#34; data-title=&#34;/verify&#34; data-description=&#34;Inspired by @mollywhite&amp;#39;s verify slashpage. This page serves as the system of record for my online identity. The best places to follow me are:&#34; data-date=&#34;2026-02-24&#34; data-preview=&#34;Inspired by @mollywhite&amp;#39;s verify slashpage. This page serves as the system of record for my online identity. The best places to follow me are:&#34;&gt;/verify&lt;/a&gt; - Inspired by @mollywhite&amp;#39;s verify slashpage. This page serves as the system of record for my online identity. The best places to follow me are:&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/wants/&#34; class=&#34;wikilink&#34; data-title=&#34;wants&#34; data-description=&#34;Inspired by mara.town/wants&#34; data-date=&#34;2025-05-27&#34; data-preview=&#34;Inspired by mara.town/wants&#34;&gt;wants&lt;/a&gt; - Inspired by mara.town/wants&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/yep/&#34; class=&#34;wikilink&#34; data-title=&#34;/yep&#34; data-description=&#34;Inspired by @fyrio&amp;#39;s yep slashpage, a list of ** things I enjoy, use, recommend, want to know more about, or seek out in no particular order, updated as I...&#34; data-date=&#34;2026-02-11&#34; data-preview=&#34;Inspired by @fyrio&amp;#39;s yep slashpage, a list of ** things I enjoy, use, recommend, want to know more about, or seek out in no particular order, updated as I...&#34;&gt;/yep&lt;/a&gt; - Inspired by @fyrio&amp;#39;s yep slashpage, a list of ** things I enjoy, use, recommend, want to know more about, or seek out in no particular order, updated as I…&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>slow nfs performance</title>
    <id>https://waylonwalker.com/slow-nfs-performance/</id>
    <updated>2025-01-02T20:23:10Z</updated>
    <published>2025-01-02T20:23:10Z</published>
    <link href="https://waylonwalker.com/slow-nfs-performance/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m running a two node k3s cluster at home, I _ I could simply mount an nfs share on each worker node, and essentially have the same storage accross all...</summary>
    <content type="html">&lt;p&gt;I’m running a two node k3s cluster at home, I &lt;em&gt;thought&lt;/em&gt; I could simply mount an&#xA;nfs share on each worker node, and essentially have the same storage accross&#xA;all nodes.  I’m already learning why this is not reccommended.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/0e1f8cc5-4212-4c9a-b71c-e714abd43692.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/0e1f8cc5-4212-4c9a-b71c-e714abd43692.png&#34; alt=&#34;screenshot-2025-01-31T21-18-43-543Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-01-31T21-18-43-543Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;slow&#34;&gt;Slow &lt;a href=&#34;#slow&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’ve been running some cronjobs and argo workflows on the second node for&#xA;awhile, these are things that run in the background and I don’t care if they&#xA;take a bit longer to keep my master node freed up for more critical work.&lt;/p&gt;&#xA;&lt;p&gt;I just started trying to build this site in a cronjob, It was taking 20 minutes&#xA;to build, and something I noticed was that markata was taking minutes to run&#xA;glob &lt;em&gt;( search for files )&lt;/em&gt;, normally this happens in a few ms and I never&#xA;notice this step.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/57605850-2537-41f9-a3cd-15ff2d41c330.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/57605850-2537-41f9-a3cd-15ff2d41c330.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I just moved into the master node and the results were wild at ~30x faster&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;permissions&#34;&gt;Permissions &lt;a href=&#34;#permissions&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have seen where you &lt;em&gt;can&lt;/em&gt; get diffent permissions on the nfs share based on&#xA;user id.  Since I’m homelabbing here I only have one user per machine.  As you&#xA;step into enterprise level VMs with tighter controls and dozens of users for&#xA;all the different services that might run on it.&lt;/p&gt;&#xA;&lt;p&gt;I’ve ran into maybe one issue where I was root in one place and not another,&#xA;other than that it’s been fine.&lt;/p&gt;&#xA;&lt;h2 id=&#34;and-it-only-got-better&#34;&gt;And it only got better &lt;a href=&#34;#and-it-only-got-better&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As the cache was warm subsequent runs only got better.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/9681f8a0-2bdc-46a7-9764-2fd58dea6e7b.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/9681f8a0-2bdc-46a7-9764-2fd58dea6e7b.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I just checked again and we are now 80x faster&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion &lt;a href=&#34;#conclusion&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I don’t have the answers yet, it might be my network, it might be nfs settings,&#xA;it might be ext4 filesystem.  I have some things to try, but what I do know is&#xA;that it is not as easy as I thought it would be just to have the same file&#xA;system mounted on both ends and share data between nodes.&lt;/p&gt;&#xA;&lt;p&gt;I might even go with a complete alternative and use minio as a storage backend,&#xA;and sync the files in on each run, this will add some latency to do the sync&#xA;each time though.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>/colophon</title>
    <id>https://waylonwalker.com/colophon/</id>
    <updated>2025-01-02T10:21:23Z</updated>
    <published>2025-01-02T10:21:23Z</published>
    <link href="https://waylonwalker.com/colophon/" rel="alternate" type="text/html"></link>
    <summary type="text">Colophon a page that describes how the site &gt; is made, with what tools, supporting what technologies</summary>
    <content type="html">&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://indieweb.org/colophon&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/indieweb.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/indieweb.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Colophon&lt;/a&gt; a page that describes how the site&#xA;is made, with what tools, supporting what technologies&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;author&#34;&gt;Author &lt;a href=&#34;#author&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/profile.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/profile.webp&#34; alt=&#34;Waylon Walker’s Profile Picture&#34;/ data-glightbox=&#34;description: Waylon Walker’s Profile Picture&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;All posts on this site are written by &lt;a href=&#34;https://waylonwalker.com&#34;&gt;Waylon&#xA;Walker&lt;/a&gt;, the typical content has changed and evolved&#xA;over time.  I go back and make a few corrections, but for the most part things&#xA;stay pretty much as they were published originally.&lt;/p&gt;&#xA;&lt;p&gt;see more in &lt;a href=&#34;/about/&#34; class=&#34;wikilink&#34; data-title=&#34;Waylon Walker&#34; data-description=&#34;👋 Hi, I am Waylon Walker. Husband, Father of two, and creator things on the web, learning, and teaching others. I play lots of Minecraft, make art, and...&#34; data-date=&#34;2021-11-20&#34; data-preview=&#34;👋 Hi, I am Waylon Walker. Husband, Father of two, and creator things on the web, learning, and teaching others. I play lots of Minecraft, make art, and...&#34;&gt;Waylon Walker&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;tech&#34;&gt;tech &lt;a href=&#34;#tech&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This site is a static site build with my own static site generator &lt;a href=&#34;/markata/&#34; class=&#34;wikilink&#34; data-title=&#34;markata&#34; data-description=&#34;This post is a work in progress.&#34; data-date=&#34;2024-05-30&#34; data-preview=&#34;This post is a work in progress.&#34;&gt;markata&lt;/a&gt;, &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;Thoughts&lt;/a&gt; or as Simon Willison calls it a &lt;a href=&#34;https://simonwillison.net/2024/Dec/22/link-blog/#atom-everything&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/simonwillison.net.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/simonwillison.net.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;link&#xA;blog&lt;/a&gt; posts&#xA;are pulled in as a regular posts, all is hosted on cloudflare pages.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/markata/&#34; class=&#34;wikilink&#34; data-title=&#34;markata&#34; data-description=&#34;This post is a work in progress.&#34; data-date=&#34;2024-05-30&#34; data-preview=&#34;This post is a work in progress.&#34;&gt;markata&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;Thoughts&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;cloudflare pages&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;see more about these components in &lt;a href=&#34;/about-this-site/&#34; class=&#34;wikilink&#34; data-title=&#34;about this site&#34; data-description=&#34;I registered waylonwalker.com and started making content for it in 2017 after a big industry downturn in 2016 that left me scared for what would happen if I...&#34; data-date=&#34;2024-05-31&#34; data-preview=&#34;I registered waylonwalker.com and started making content for it in 2017 after a big industry downturn in 2016 that left me scared for what would happen if I...&#34;&gt;about this site&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;analytics&#34;&gt;Analytics &lt;a href=&#34;#analytics&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I do not track users, I respect the privacy of my readers and do not track&#xA;their information.  I do track &lt;a href=&#34;/analytics/&#34; class=&#34;wikilink&#34; data-title=&#34;analytics&#34; data-description=&#34;I&amp;#39;ve been posting on this site since 2016, when the company I worked for went through a large round of layoffs. I was worried about being laid off, so I...&#34; data-date=&#34;2025-01-22&#34; data-preview=&#34;I&amp;#39;ve been posting on this site since 2016, when the company I worked for went through a large round of layoffs. I was worried about being laid off, so I...&#34;&gt;analytics&lt;/a&gt; on my own writing a post rate.&#xA;Its more of an interesting history of the site.&lt;/p&gt;&#xA;&lt;h2 id=&#34;meta&#34;&gt;meta &lt;a href=&#34;#meta&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Some evergreen pages that are more about me or this site from the &lt;a href=&#34;/tags/meta/&#34; class=&#34;wikilink&#34; data-title=&#34;Posts tagged: meta&#34; data-description=&#34;All posts with the tag &amp;#34;meta&amp;#34;&#34; data-preview=&#34;All posts with the tag &amp;#34;meta&amp;#34;&#34;&gt;Posts tagged: meta&lt;/a&gt; feed.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ atuinsh atuin</title>
    <id>https://waylonwalker.com/atuinsh-atuin/</id>
    <updated>2024-12-28T23:18:51Z</updated>
    <published>2024-12-28T23:18:51Z</published>
    <link href="https://waylonwalker.com/atuinsh-atuin/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on atuin by atuinsh.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/atuinsh/atuin&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;atuin&lt;/a&gt; by &lt;a href=&#34;https://github.com/atuinsh&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;atuinsh&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;✨ Magical shell history&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>setting up ucore-zfs</title>
    <id>https://waylonwalker.com/setting-up-ucore-zfs/</id>
    <updated>2024-12-27T08:55:50Z</updated>
    <published>2024-12-27T08:55:50Z</published>
    <link href="https://waylonwalker.com/setting-up-ucore-zfs/" rel="alternate" type="text/html"></link>
    <summary type="text">I just setup my oldest hardware on the newest hotest server distro ucore-zfs. This is a gateway FX6860 manufactured in 2010.</summary>
    <content type="html">&lt;p&gt;I just setup my oldest hardware on the newest hotest server distro ucore-zfs.&#xA;This is a gateway FX6860 manufactured in 2010.&lt;/p&gt;&#xA;&lt;h2 id=&#34;immutable-is-the-future&#34;&gt;Immutable is the future &lt;a href=&#34;#immutable-is-the-future&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;My current boot log shows that I first started daily driving bazzite back in&#xA;August 2024.  I’ve been hapily using it since my arch install was plaugued&#xA;with a crippling display driver error, or something that would lock the display&#xA;for minutes every 30s or so, it became unusable.  I switched because this is&#xA;what I put my son on and it was working great for him.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;waylon@razorcrest:~$ journalctl --list-boots&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;IDX BOOT ID                          FIRST ENTRY                 LAST ENTRY&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-19 7e6e154d2609407da24fa12814eadbd7 Thu 2024-08-29 16:15:15 CDT Thu 2024-08-29 17:37:25 CDT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Four months later and I am really loving the immutable distro experience.  My&#xA;base system gets fresh reliable updates, and I barely install anything directly&#xA;on it, a handful of things are snaps or flatpaks from the discover store, but&#xA;my main workflow is now in distrobox.  It has been rock solid reliable, and&#xA;just works.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-hardware&#34;&gt;The Hardware &lt;a href=&#34;#the-hardware&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This gem is running a an intel i7-2600 (4) @ 3.80 ghz with 16gb of ram.  I’ve&#xA;maxed out the ram that the motherboard will allow me.  I may have even forgot&#xA;about this limitation and ordered a 2x32gb setup for it and it did nothing.&#xA;That’s now sitting in my new k3s master node.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/36b2d93e-ddb1-4a13-89bd-471cd5e42f14.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/36b2d93e-ddb1-4a13-89bd-471cd5e42f14.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Here’s a B&amp;amp;H photo post of the machine, she is big and heavy but still working.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/75c30c6e-421b-4d99-8a22-1d552ca541fe.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/75c30c6e-421b-4d99-8a22-1d552ca541fe.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;I’m a big fan of keeping these old machines running and avoiding the e-waste&#xA;pile, great for running a home lab.  Admittedly this is one is probably on its&#xA;last leg, dell optiplexes are pretty cheap and run circles around this one, so&#xA;this one is become my experimental setup for trying new things like core-os.&lt;/p&gt;&#xA;&lt;h2 id=&#34;get-password-hash&#34;&gt;Get Password Hash &lt;a href=&#34;#get-password-hash&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;We will need to create a password hash for the root user to put into our ignition file.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;podman run -ti --rm quay.io/coreos/mkpasswd --method&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;yescrypt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Password:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$y$j9T$0&lt;/span&gt;ZsoVynV7y0Z7/l6588Ba1&lt;span class=&#34;nv&#34;&gt;$VZT0uCGP0CnYSX&lt;/span&gt;/EArCvYMuo3q.gnyOnk1RO6.HDNDB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;get-ssh-pub-key&#34;&gt;Get SSH Pub Key &lt;a href=&#34;#get-ssh-pub-key&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Generate an ssh key using the &lt;code&gt;ssh-keygen&lt;/code&gt; command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ ssh-keygen -t ed25519 -C &lt;span class=&#34;s2&#34;&gt;&amp;#34;waylon@waylonwalker.com&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Generating public/private ed25519 key pair.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Enter file in which to save the key &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;/var/home/core/.ssh/id_ed25519&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Enter passphrase &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;empty &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; no passphrase&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Enter same passphrase again:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Your identification has been saved in /var/home/core/.ssh/id_ed25519&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Your public key has been saved in /var/home/core/.ssh/id_ed25519.pub&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;The key fingerprint is:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SHA256:xVJAVreKVILOnxTDxK88RyMwhdDCBMnjMSGU7rsAqwQ waylon@waylonwalker.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;The key&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;s randomart image is:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+--&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;ED25519 256&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;--+&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;oo+*oo OBo+ .    &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; o* o *.&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; . .   &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;.. + + oo+o .    &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; ..   o.o++.     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;E      +S&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;..     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;oo      * .      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;o..      o       &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;+.               &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;...              &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+----&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;SHA256&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;-----+&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now copy your public key into the ignition file from your local machine&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cat ~/.ssh/id_ed25519.pub&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPY73r4EU9wm/26/rTpx/uvAyInmbQ/k+l04eadSahD0 waylon@waylonwalker.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;ucore-autorebasebutane&#34;&gt;ucore-autorebase.butane &lt;a href=&#34;#ucore-autorebasebutane&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I got my ignition file from&#xA;&lt;a href=&#34;https://github.com/ublue-os/ucore/blob/main/examples/ucore-autorebase.butane&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ucore/ucore-autorebase&lt;/a&gt;.&#xA;Put my secret values into it and used it.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/ublue-os/ucore/blob/main/examples/ucore-autorebase.butane&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/ublue-os/ucore/blob/main/examples/ucore-autorebase.butane&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;variant: fcos&#xA;version: 1.4.0&#xA;passwd:&#xA;  users:&#xA;    - name: core&#xA;      ssh_authorized_keys:&#xA;        - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPY73r4EU9wm/26/rTpx/uvAyInmbQ/k+l04eadSahD0 waylon@waylonwalker.com&#xA;      password_hash: $y$j9T$0ZsoVynV7y0Z7/l6588Ba1$VZT0uCGP0CnYSX/EArCvYMuo3q.gnyOnk1RO6.HDNDB&#xA;storage:&#xA;  directories:&#xA;    - path: /etc/ucore-autorebase&#xA;      mode: 0754&#xA;systemd:&#xA;  units:&#xA;    - name: ucore-unsigned-autorebase.service&#xA;      enabled: true&#xA;      contents: |&#xA;        [Unit]&#xA;        Description=uCore autorebase to unsigned OCI and reboot&#xA;        ConditionPathExists=!/etc/ucore-autorebase/unverified&#xA;        ConditionPathExists=!/etc/ucore-autorebase/signed&#xA;        After=network-online.target&#xA;        Wants=network-online.target&#xA;        [Service]&#xA;        Type=oneshot&#xA;        StandardOutput=journal+console&#xA;        ExecStart=/usr/bin/rpm-ostree rebase --bypass-driver ostree-unverified-registry:ghcr.io/ublue-os/ucore:stable&#xA;        ExecStart=/usr/bin/touch /etc/ucore-autorebase/unverified&#xA;        ExecStart=/usr/bin/systemctl disable ucore-unsigned-autorebase.service&#xA;        ExecStart=/usr/bin/systemctl reboot&#xA;        [Install]&#xA;        WantedBy=multi-user.target&#xA;    - name: ucore-signed-autorebase.service&#xA;      enabled: true&#xA;      contents: |&#xA;        [Unit]&#xA;        Description=uCore autorebase to signed OCI and reboot&#xA;        ConditionPathExists=/etc/ucore-autorebase/unverified&#xA;        ConditionPathExists=!/etc/ucore-autorebase/verified&#xA;        After=network-online.target&#xA;        Wants=network-online.target&#xA;        [Service]&#xA;        Type=oneshot&#xA;        StandardOutput=journal+console&#xA;        ExecStart=/usr/bin/rpm-ostree rebase --bypass-driver ostree-image-signed:docker://ghcr.io/ublue-os/ucore:stable&#xA;        ExecStart=/usr/bin/touch /etc/ucore-autorebase/signed&#xA;        ExecStart=/usr/bin/systemctl disable ucore-signed-autorebase.service&#xA;        ExecStart=/usr/bin/systemctl reboot&#xA;        [Install]&#xA;        WantedBy=multi-user.target butane&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;creating-an-ignition-file&#34;&gt;Creating an ignition file &lt;a href=&#34;#creating-an-ignition-file&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;podman run --interactive --rm --security-opt &lt;span class=&#34;nv&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;disable &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;        --volume &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PWD&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;:/pwd --workdir /pwd quay.io/coreos/butane:release &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;        --pretty --strict ucore-autorebase.butane &amp;gt;transpiled_config.ign&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;getting-zfs&#34;&gt;Getting zfs &lt;a href=&#34;#getting-zfs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now this is where I realized I went wrong and wished I would have paid&#xA;attention to the autorebase.butane file, it did not use the zfs flavor ucore.&#xA;Luckily they make it wildly easy to rebase between these base images.&lt;/p&gt;&#xA;&lt;p&gt;I needed to run this to rebase into the zfs flavor.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/bin/rpm-ostree rebase --bypass-driver ostree-unverified-registry:ghcr.io/ublue-os/ucore:stable-zfs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This was the output.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;core@falcon-FX6860:~$ /usr/bin/rpm-ostree rebase --bypass-driver ostree-unverified-registry:ghcr.io/ublue-os/ucore:stable-zfs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;====&lt;/span&gt; AUTHENTICATING FOR org.projectatomic.rpmostree1.rebase &lt;span class=&#34;o&#34;&gt;====&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Authentication is required to switch to a different base OS&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Authenticating as: CoreOS Admin &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;core&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Password:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;====&lt;/span&gt; AUTHENTICATION &lt;span class=&#34;nv&#34;&gt;COMPLETE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;====&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Pulling manifest: ostree-unverified-registry:ghcr.io/ublue-os/ucore:stable-zfs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Importing: ostree-unverified-registry:ghcr.io/ublue-os/ucore:stable-zfs &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;digest: sha256:8ebae90f6844949044c026d7ba05c035956992b68e13bdcbd9158a37beda571e&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ostree chunk layers already present: &lt;span class=&#34;m&#34;&gt;51&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;custom layers needed: &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;492.9 MB&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Fetching layer sha256:67f3c0e0e0fe &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;269.7 MB&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;... &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Fetching layer sha256:25992805e895 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;223.1 MB&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;... &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Staging deployment... &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Upgraded:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  cockpit-bridge 330-1.fc41 -&amp;gt; 331-1.fc41&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  cockpit-networkmanager 330-1.fc41 -&amp;gt; 331-1.fc41&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  cockpit-selinux 330-1.fc41 -&amp;gt; 331-1.fc41&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  cockpit-storaged 330-1.fc41 -&amp;gt; 331-1.fc41&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  cockpit-system 330-1.fc41 -&amp;gt; 331-1.fc41&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Added:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  groff-base-1.23.0-7.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  kmod-zfs-2.2.7-1.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libnvpair3-2.2.7-1.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libuutil3-2.2.7-1.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libzfs5-2.2.7-1.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libzpool5-2.2.7-1.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  lm_sensors-libs-3.6.0-20.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  lzop-1.04-15.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  mbuffer-20241007-1.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-AutoLoader-5.74-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-B-1.89-512.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Capture-Tiny-0.48-21.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Carp-1.54-511.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Class-Struct-0.68-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Config-IniFiles-3.000003-14.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Data-Dumper-2.189-512.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Digest-1.20-511.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Digest-MD5-2.59-5.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-DynaLoader-1.56-512.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Encode-4:3.21-511.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Errno-1.38-512.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Exporter-5.78-511.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Fcntl-1.18-512.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-File-Basename-2.86-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-File-Path-2.18-511.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-File-Temp-1:0.231.100-511.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-File-stat-1.14-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-FileHandle-2.05-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Getopt-Long-1:2.58-2.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Getopt-Std-1.14-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-HTTP-Tiny-0.090-1.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-IO-1.55-512.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-IO-Socket-IP-0.43-1.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-IO-Socket-SSL-2.089-1.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-IO-stringy-2.113-15.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-IPC-Open3-1.22-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-MIME-Base32-1.303-21.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-MIME-Base64-3.16-511.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-NDBM_File-1.17-512.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Net-SSLeay-1.94-7.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-POSIX-2.20-512.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-PathTools-3.91-511.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Pod-Escapes-1:1.07-511.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Pod-Perldoc-3.28.01-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Pod-Simple-1:3.45-511.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Pod-Usage-4:2.03-511.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Scalar-List-Utils-5:1.68-1.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-SelectSaver-1.02-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Socket-4:2.038-511.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Storable-1:3.32-511.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Symbol-1.09-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Sys-Hostname-1.25-512.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Term-ANSIColor-5.01-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Term-Cap-1.18-511.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Text-ParseWords-3.31-511.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Text-Tabs+Wrap-2024.001-511.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Time-Local-2:1.350-511.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-URI-5.30-1.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-base-2.27-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-constant-1.33-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-if-0.61.000-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-interpreter-4:5.40.0-512.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-libnet-3.15-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-libs-4:5.40.0-512.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-locale-1.12-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-mro-1.29-512.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-overload-1.37-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-overloading-0.02-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-parent-1:0.242-1.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-podlators-1:6.0.2-2.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-vars-1.05-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pv-1.8.14-2.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  python3-cffi-1.17.0-1.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  python3-ply-3.11-25.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  python3-pycparser-2.20-18.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  python3-pyzfs-2.2.7-1.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  sanoid-2.2.0-1.fc41.ucore2.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  sysstat-12.7.6-2.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  zfs-2.2.7-1.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  zfs-dracut-2.2.7-1.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Changes queued &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; next boot. Run &lt;span class=&#34;s2&#34;&gt;&amp;#34;systemctl reboot&amp;#34;&lt;/span&gt; to start a reboot&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;For some reason I double checked, and runnign it a second time gave me this.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;core@falcon-FX6860:~$ sudo rpm-ostree rebase ostree-image-signed:docker://ghcr.io/ublue-os/ucore:stable-zfs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Pulling manifest: ostree-image-signed:docker://ghcr.io/ublue-os/ucore:stable-zfs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Staging deployment... &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Changes queued &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; next boot. Run &lt;span class=&#34;s2&#34;&gt;&amp;#34;systemctl reboot&amp;#34;&lt;/span&gt; to start a reboot&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;zfs&#34;&gt;ZFS &lt;a href=&#34;#zfs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Once I rebooted I had all of my necessary zfs utilities that I needed.&lt;/p&gt;&#xA;&lt;h2 id=&#34;connecting-nfs&#34;&gt;connecting nfs &lt;a href=&#34;#connecting-nfs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The last thing I wanted to do was to mount an nfs share from my master node so&#xA;that they can share a storage backend.  I found that nfs was already in the host and ready to go.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir /mnt/vault/nfs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mount -t nfs &amp;lt;nfs server ip&amp;gt;:/mnt/vault/nfs /mnt/vault/nfs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>thoughts 0.0.4</title>
    <id>https://waylonwalker.com/thoughts-0-0-4/</id>
    <updated>2024-12-18T19:04:27Z</updated>
    <published>2024-12-18T19:04:27Z</published>
    <link href="https://waylonwalker.com/thoughts-0-0-4/" rel="alternate" type="text/html"></link>
    <summary type="text">This is such an improvement to the backend of my website it warrants a blog post of celebration. For far too long I&#39;ve been dealing with a tiny ass edit form...</summary>
    <content type="html">&lt;p&gt;This is such an improvement to the backend of my website it warrants a blog&#xA;post of celebration.  For far too long I’ve been dealing with a tiny ass edit&#xA;form on thoughts.  I tend to not edit them, and try to get them right in one&#xA;go.  This is kinda the point of a thought, its a quick post meant to be the&#xA;size of a tweet, but sometimes I’m leaving thoughts on a video or long post and&#xA;want to make sure I have a good save point, but I just keep the thing in draft&#xA;and hope I don’t loose if for far too long.&lt;/p&gt;&#xA;&lt;h2 id=&#34;results&#34;&gt;Results &lt;a href=&#34;#results&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let’s see this change in action!!&lt;/p&gt;&#xA;&lt;h3 id=&#34;before&#34;&gt;before &lt;a href=&#34;#before&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;This is the tiny ass form nested deeply in the flow of the feed.  When I made&#xA;it I naively just swapped out the post itself with the edit form, and swapped&#xA;the post back in after edit.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/fe60b579-18d3-450e-87e2-2f5664f32210.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/fe60b579-18d3-450e-87e2-2f5664f32210.webp&#34; alt=&#34;screenshot-2024-12-19T00-58-43-976Z.png&#34;/ data-glightbox=&#34;description: screenshot-2024-12-19T00-58-43-976Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;thoughts is built with &lt;a href=&#34;/htmx/&#34; class=&#34;glossary-term&#34; title=&#34;htmx is a frontend javascript library for creating dynamic web applications.&#34;&gt;HTMX&lt;/a&gt; btw so all &lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;html&lt;/a&gt; is rendered in the backend and swapped by htmx client side.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;after&#34;&gt;after &lt;a href=&#34;#after&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Now the edit is a full page modal with a nice blurry backdrop effect to the&#xA;rest of the content.  This feels pretty similar to making a &lt;code&gt;new post&lt;/code&gt; on&#xA;twitter.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/c560e113-66c1-4532-9eb7-c75eb6d3aaf3.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/c560e113-66c1-4532-9eb7-c75eb6d3aaf3.webp&#34; alt=&#34;screenshot-2024-12-19T00-59-21-503Z.png&#34;/ data-glightbox=&#34;description: screenshot-2024-12-19T00-59-21-503Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;how&#34;&gt;How &lt;a href=&#34;#how&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;How did I do this with htmx?  I had to break out of the mindset my brain was in&#xA;with swapping in place and letting the edit form take over the entire screen.&lt;/p&gt;&#xA;&lt;p&gt;First the empty &lt;code&gt;#modal-container&lt;/code&gt; was added to the top of every page.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;modal-container&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then each post that gets added to the page already had an edit button, but now&#xA;the target is set to &lt;code&gt;#modal-container&lt;/code&gt;, and the swap is set to &lt;code&gt;innerHTML&lt;/code&gt; so&#xA;that we keep the &lt;code&gt;#modal-container&lt;/code&gt; in place.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;h-8 w-8 p-1 text-center&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;hx-get&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;{{ config.root }}/edit-thought/{{ post.id }}&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;na&#34;&gt;hx-target&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;#modal-container&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;hx-swap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;innerHTML&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Edit&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    {% include &amp;#39;edit.svg&amp;#39; %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now the edit post that is returned from the server is turned into a full height&#xA;and width modal with a nice backgrop blur over the content.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;modal-container&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;fixed inset-0 z-50 overflow-y-auto&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;aria-labelledby&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;modal-title&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;role&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;dialog&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;aria-modal&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Background backdrop --&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;fixed inset-0 bg-black/30 backdrop-blur-sm&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c&#34;&gt;&amp;lt;!-- Modal panel --&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;flex min-h-screen items-center justify-center p-4&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;relative w-full max-w-4xl transform rounded-xl bg-zinc-900 p-6 shadow-2xl transition-all&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;... similar to the original edit form in here&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;clearing-the-modal&#34;&gt;Clearing the modal &lt;a href=&#34;#clearing-the-modal&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;One notable change to the original edit form is clearing the modal container&#xA;on submit.  It is done with an &lt;code&gt;hx-on::after-request&lt;/code&gt; event and one line of js.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;form&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;websiteForm&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;na&#34;&gt;hx-patch&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;{{ config.root }}/post/html/&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;na&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;POST&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;newPost&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;na&#34;&gt;hx-target&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;#post-{{ post.id }}&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;na&#34;&gt;hx-swap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;outerHTML&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;na&#34;&gt;hx-on::after-request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;document.getElementById(&amp;#39;modal-container&amp;#39;).innerHTML = &amp;#39;&amp;#39;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ```&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Similarly on the Cancel button.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;``` html&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;rounded-lg border border-black bg-zinc-950 px-6 py-3 text-lg hover:bg-zinc-900&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;button&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;na&#34;&gt;onclick&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;document.getElementById(&amp;#39;modal-container&amp;#39;).innerHTML = &amp;#39;&amp;#39;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Cancel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;hotkeys&#34;&gt;Hotkeys &lt;a href=&#34;#hotkeys&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now I struggled to get this right with htmx, and it seemed like things were&#xA;getting more complicated by trying to get the buttons to trigger using htmx&#xA;triggered keyboard events, I ended up just using javascript.  Its still in the&#xA;same file, so locality of behavior is barely an issue on this one anyways, and&#xA;the js was just working.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;addEventListener&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;keydown&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;key&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Escape&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getElementById&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;modal-container&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;innerHTML&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;key&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Enter&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ctrlKey&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;preventDefault&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;htmx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;trigger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#websiteForm&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;submit&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;other-small-change&#34;&gt;Other small change &lt;a href=&#34;#other-small-change&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;When the server is returns an empty list of posts the post container would&#xA;change size and cause a layout shift.  Now the empty posts element, while not&#xA;great does not cause layout shift.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ul&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;posts&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;min-h-screen&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;li&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;No posts&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;li&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ul&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ynqa jnv</title>
    <id>https://waylonwalker.com/ynqa-jnv/</id>
    <updated>2024-12-18T18:17:13Z</updated>
    <published>2024-12-18T18:17:13Z</published>
    <link href="https://waylonwalker.com/ynqa-jnv/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about jnv, an amazing project by ynqa. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/ynqa/jnv&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jnv&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/ynqa&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ynqa&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Interactive JSON filter using jq&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Zatfer17 tui-network</title>
    <id>https://waylonwalker.com/zatfer17-tui-network/</id>
    <updated>2024-12-18T18:16:54Z</updated>
    <published>2024-12-18T18:16:54Z</published>
    <link href="https://waylonwalker.com/zatfer17-tui-network/" rel="alternate" type="text/html"></link>
    <summary type="text">tui-network by Zatfer17 is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/Zatfer17/tui-network&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tui-network&lt;/a&gt; by &lt;a href=&#34;https://github.com/Zatfer17&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Zatfer17&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ microsoft markitdown</title>
    <id>https://waylonwalker.com/microsoft-markitdown/</id>
    <updated>2024-12-18T18:15:16Z</updated>
    <published>2024-12-18T18:15:16Z</published>
    <link href="https://waylonwalker.com/microsoft-markitdown/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across markitdown from microsoft, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/microsoft/markitdown&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;markitdown&lt;/a&gt; from &lt;a href=&#34;https://github.com/microsoft&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;microsoft&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;Python tool for converting files and office documents to Markdown.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ github gh-skyline</title>
    <id>https://waylonwalker.com/github-gh-skyline/</id>
    <updated>2024-12-18T18:13:52Z</updated>
    <published>2024-12-18T18:13:52Z</published>
    <link href="https://waylonwalker.com/github-gh-skyline/" rel="alternate" type="text/html"></link>
    <summary type="text">gh-skyline by github is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/github/gh-skyline&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gh-skyline&lt;/a&gt; by &lt;a href=&#34;https://github.com/github&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;github&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;A GitHub CLI extension to generate a 3D model of your GitHub contribution history&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ outerbase studio</title>
    <id>https://waylonwalker.com/outerbase-studio/</id>
    <updated>2024-12-18T18:12:41Z</updated>
    <published>2024-12-18T18:12:41Z</published>
    <link href="https://waylonwalker.com/outerbase-studio/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about studio, an amazing project by outerbase. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/outerbase/studio&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;studio&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/outerbase&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;outerbase&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;A lightweight Database GUI in your browser. It supports connecting to Postgres, MySQL, and SQLite.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ cassidoo blahg</title>
    <id>https://waylonwalker.com/cassidoo-blahg/</id>
    <updated>2024-12-18T13:10:46Z</updated>
    <published>2024-12-18T13:10:46Z</published>
    <link href="https://waylonwalker.com/cassidoo-blahg/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on blahg, created by cassidoo.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/cassidoo/blahg&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;blahg&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/cassidoo&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cassidoo&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Cassidy’s blog template built with Astro and TinaCMS!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Links rely on color to be distiniquishable</title>
    <id>https://waylonwalker.com/links-rely-on-color-to-be-distiniquishable/</id>
    <updated>2024-12-17T20:25:12Z</updated>
    <published>2024-12-17T20:25:12Z</published>
    <link href="https://waylonwalker.com/links-rely-on-color-to-be-distiniquishable/" rel="alternate" type="text/html"></link>
    <summary type="text">Today i got hit by this accessibility issue on my site. Low contrast links are not distiniquishable. I had not seen this error title before it was new to me,...</summary>
    <content type="html">&lt;p&gt;Today i got hit by this accessibility issue on my site.  Low contrast links are&#xA;not distiniquishable.  I had not seen this error title before it was new to me,&#xA;maybe I have bad memory or maybe it’s new to me.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/24b4e31f-60db-47b8-b67c-07c4d4b6fb71.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/24b4e31f-60db-47b8-b67c-07c4d4b6fb71.webp&#34; alt=&#34;screenshot-2024-12-18T02-25-53-014Z.png&#34;/ data-glightbox=&#34;description: screenshot-2024-12-18T02-25-53-014Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;I ended up dropping the background color of the site down a notch as I didn’t&#xA;really care for the semi-dark brown anyways.  I’m liking the near black&#xA;&lt;code&gt;bg-zinc-950&lt;/code&gt; much better now.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/8b4f2087-3f24-4212-ad00-74f294aff114.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/8b4f2087-3f24-4212-ad00-74f294aff114.webp&#34; alt=&#34;screenshot-2024-12-18T02-45-53-807Z.png&#34;/ data-glightbox=&#34;description: screenshot-2024-12-18T02-45-53-807Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Now I got that 100 A11y score in lighthouse.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/17497676-3730-4875-9e10-c6d121ba537a.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/17497676-3730-4875-9e10-c6d121ba537a.webp&#34; alt=&#34;screenshot-2024-12-18T03-02-18-934Z.png&#34;/ data-glightbox=&#34;description: screenshot-2024-12-18T03-02-18-934Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>urllink</title>
    <id>https://waylonwalker.com/urllink/</id>
    <updated>2024-12-14T11:11:52Z</updated>
    <published>2024-12-14T11:11:52Z</published>
    <link href="https://waylonwalker.com/urllink/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I discovered the function in bash from the ujust tool from ublue.it. Seems like a cool trick, but might not work everywhere.</summary>
    <content type="html">&lt;p&gt;Today I discovered the &lt;code&gt;Urllink&lt;/code&gt; function in bash from the ujust tool from&#xA;&lt;a href=&#34;https://ublue.it&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/ublue.it.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/ublue.it.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ublue.it&lt;/a&gt;.  Seems like a cool trick, but might not work&#xA;everywhere.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;########&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;### Special text formating&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;########&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;## Function to generate a clickable link, you can call this using&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# url=$(Urllink &amp;#34;https://ublue.it&amp;#34; &amp;#34;Visit the ublue website&amp;#34;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# echo &amp;#34;${url}&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; Urllink &lt;span class=&#34;o&#34;&gt;(){&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;URL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;TEXT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# Generate a clickable hyperlink&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;printf&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;\e]8;;%s\e\\%s\e]8;;\e\\&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$URL&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$TEXT&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sb&#34;&gt;```&lt;/span&gt;j&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tursodatabase turso</title>
    <id>https://waylonwalker.com/tursodatabase-turso/</id>
    <updated>2024-12-11T16:36:28Z</updated>
    <published>2024-12-11T16:36:28Z</published>
    <link href="https://waylonwalker.com/tursodatabase-turso/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about turso, an amazing project by tursodatabase. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/tursodatabase/turso&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;turso&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/tursodatabase&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tursodatabase&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Turso Database is a project to build the next evolution of SQLite.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tursodatabase limbo</title>
    <id>https://waylonwalker.com/tursodatabase-limbo/</id>
    <updated>2024-12-11T16:36:28Z</updated>
    <published>2024-12-11T16:36:28Z</published>
    <link href="https://waylonwalker.com/tursodatabase-limbo/" rel="alternate" type="text/html"></link>
    <summary type="text">limbo by tursodatabase is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/tursodatabase/limbo&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;limbo&lt;/a&gt; by &lt;a href=&#34;https://github.com/tursodatabase&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tursodatabase&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;Limbo is a work-in-progress, in-process OLTP database management system, compatible with SQLite.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ 45Drives cockpit-identities</title>
    <id>https://waylonwalker.com/45drives-cockpit-identities/</id>
    <updated>2024-12-04T18:07:16Z</updated>
    <published>2024-12-04T18:07:16Z</published>
    <link href="https://waylonwalker.com/45drives-cockpit-identities/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across cockpit-identities from 45Drives, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/45Drives/cockpit-identities&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cockpit-identities&lt;/a&gt; from &lt;a href=&#34;https://github.com/45Drives&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;45Drives&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;User and group management plugin for Houston UI (Cockpit)&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ 45Drives cockpit-file-sharing</title>
    <id>https://waylonwalker.com/45drives-cockpit-file-sharing/</id>
    <updated>2024-12-04T18:07:13Z</updated>
    <published>2024-12-04T18:07:13Z</published>
    <link href="https://waylonwalker.com/45drives-cockpit-file-sharing/" rel="alternate" type="text/html"></link>
    <summary type="text">cockpit-file-sharing by 45Drives is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/45Drives/cockpit-file-sharing&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cockpit-file-sharing&lt;/a&gt; by &lt;a href=&#34;https://github.com/45Drives&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;45Drives&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;A Cockpit plugin to easily manage samba and NFS file sharing.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>debug cloudflared tunnel</title>
    <id>https://waylonwalker.com/debug-cloudflared-tunnel/</id>
    <updated>2024-12-03T15:36:37Z</updated>
    <published>2024-12-03T15:36:37Z</published>
    <link href="https://waylonwalker.com/debug-cloudflared-tunnel/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been debugging a cloudflared tunnel issue in my homelab all day today, and getting really frustrated. My issue ended up being that it was running twice,...</summary>
    <content type="html">&lt;p&gt;I’ve been debugging a cloudflared tunnel issue in my &lt;a href=&#34;/homelab/&#34; class=&#34;glossary-term&#34; title=&#34;A place to self host applications. For me this is primarily self built web applications, and applications for sharing files with my family. Techno Tim has a...&#34;&gt;homelab&lt;/a&gt; all day today, and&#xA;getting really frustrated.  My issue ended up being that it was running twice,&#xA;once without the correct config file and another with it.  I believe that&#xA;cacheing may have compounded the issue.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In yesterday’s post I setup a cloudflared tunnel on my ubuntu server to&#xA;expose applications running on the server to the internet.  I’m setting up a&#xA;new server and running cloudflared in its own vm.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/setup-cloudflared-tunnel-on-ubuntu/&#34; class=&#34;wikilink&#34; data-title=&#34;setup cloudflared tunnel on ubuntu&#34; data-description=&#34;I run a cloudflared tunnel on my ubuntu server to expose applications running on the server to the internet. I&amp;#39;m setting up a new server and running...&#34; data-date=&#34;2024-12-02&#34; data-preview=&#34;I run a cloudflared tunnel on my ubuntu server to expose applications running on the server to the internet. I&amp;#39;m setting up a new server and running...&#34;&gt;setup cloudflared tunnel on ubuntu&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;check-that-dns-is-pointing-to-the-correct-tunnel&#34;&gt;Check that dns is pointing to the correct tunnel &lt;a href=&#34;#check-that-dns-is-pointing-to-the-correct-tunnel&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dig subdomain.example.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;traceroute subdomain.example.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;check-that-the-tunnel-is-running&#34;&gt;Check that the tunnel is running &lt;a href=&#34;#check-that-the-tunnel-is-running&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;CLOUDFLARED_TUNNEL_ID&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;my-tunnel-id&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cloudflared tunnel list&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cloudflared tunnel info &lt;span class=&#34;nv&#34;&gt;$CLOUDFLARED_TUNNEL_ID&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>setup cloudflared tunnel on ubuntu</title>
    <id>https://waylonwalker.com/setup-cloudflared-tunnel-on-ubuntu/</id>
    <updated>2024-12-02T15:43:45Z</updated>
    <published>2024-12-02T15:43:45Z</published>
    <link href="https://waylonwalker.com/setup-cloudflared-tunnel-on-ubuntu/" rel="alternate" type="text/html"></link>
    <summary type="text">I run a cloudflared tunnel on my ubuntu server to expose applications running on the server to the internet. I&#39;m setting up a new server and running...</summary>
    <content type="html">&lt;p&gt;I run a cloudflared tunnel on my ubuntu server to expose applications running&#xA;on the server to the internet.  I’m setting up a new server and running&#xA;cloudflared in its own vm.&lt;/p&gt;&#xA;&lt;h2 id=&#34;get-the-cloudflared-binary&#34;&gt;Get the cloudflared binary &lt;a href=&#34;#get-the-cloudflared-binary&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -O /usr/local/bin/cloudflared&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chmod +x /usr/local/bin/cloudflared&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;heading&#34;&gt; &lt;a href=&#34;#heading&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now setup the config directory.  For the systemd service to work, the config&#xA;file needs to be in /etc/cloudflared.  I like to give my user rights to edit&#xA;the config file without being sudo, we will do that here by creating a group&#xA;&lt;code&gt;cloudflared&lt;/code&gt;, add ourselves to the group, give ownership of &lt;code&gt;/etc/cloudflared&lt;/code&gt;&#xA;to the group, give group write access to the directory, and refresh groups.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir -p /etc/cloudflared&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo groupadd cloudflared&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo usermod -aG cloudflared &lt;span class=&#34;nv&#34;&gt;$USER&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chown -R root:cloudflared /etc/cloudflared&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chmod g+w /etc/cloudflared&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;newgrp cloudflared&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;login&#34;&gt;login &lt;a href=&#34;#login&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now we can log into the domain zone with cloudflared.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cloudflared tunnel login&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This will give a url, follow it in a browser to log in.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cloudflared tunnel create &amp;lt;NAME&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv ~/.cloudflared/cert.pem /etc/cloudflared/cert.pem&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv ~/.cloudflared/&amp;lt;tunnel-id&amp;gt;.json /etc/cloudflared/&amp;lt;tunnel-id&amp;gt;.json&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;config&#34;&gt;config &lt;a href=&#34;#config&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now setup config.  For the systemd service to work, the config file needs to be&#xA;in /etc/cloudflared.  The config that I have provided below will expose&#xA;localhost:8000 to tester.example.com&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;CLOUDFLARED_TUNNEL_ID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;ls /etc/cloudflared/*.json &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -n &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; basename &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sed &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/\.json$//&amp;#39;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv ~/.cloudflared/&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CLOUDFLARED_TUNNEL_ID&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;.json /etc/cloudflared/&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CLOUDFLARED_TUNNEL_ID&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;.json&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv ~/.cloudflared/cert.pem /etc/cloudflared/cert.pem&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;tunnel: &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;CLOUDFLARED_TUNNEL_ID&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;credentials-file: /etc/cloudflared/&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;CLOUDFLARED_TUNNEL_ID&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;.json&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;ingress:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;  - hostname: tester.example.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    service: http://localhost:8000&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;  - service: &amp;#39;http_status:404&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; /etc/cloudflared/config.yaml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;dns&#34;&gt;dns &lt;a href=&#34;#dns&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now to get a dns record for tester.example.com to point to the cloudflared&#xA;tunnel.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cloudflared tunnel route dns &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;CLOUDFLARED_TUNNEL_ID&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt; tester.example.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;systemd&#34;&gt;systemd &lt;a href=&#34;#systemd&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now install the systemd service.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo cloudflared service install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl status cloudflared.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# if its not running&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl start cloudflared.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Syllo nvtop</title>
    <id>https://waylonwalker.com/syllo-nvtop/</id>
    <updated>2024-11-24T16:26:01Z</updated>
    <published>2024-11-24T16:26:01Z</published>
    <link href="https://waylonwalker.com/syllo-nvtop/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred nvtop by Syllo. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/Syllo/nvtop&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvtop&lt;/a&gt; by &lt;a href=&#34;https://github.com/Syllo&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Syllo&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;GPU &amp;amp; Accelerator process monitoring for AMD, Apple, Huawei, Intel, NVIDIA and Qualcomm&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ devfile kubectl-debug-ide</title>
    <id>https://waylonwalker.com/devfile-kubectl-debug-ide/</id>
    <updated>2024-11-21T19:39:30Z</updated>
    <published>2024-11-21T19:39:30Z</published>
    <link href="https://waylonwalker.com/devfile-kubectl-debug-ide/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by kubectl-debug-ide from devfile.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/devfile/kubectl-debug-ide&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kubectl-debug-ide&lt;/a&gt; from &lt;a href=&#34;https://github.com/devfile&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;devfile&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A kubectl plugin to debug Pods from an IDE rather than the CLI&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>price an stl print on slant3d</title>
    <id>https://waylonwalker.com/price-an-stl-print-on-slant3d/</id>
    <updated>2024-11-18T15:29:30Z</updated>
    <published>2024-11-18T15:29:30Z</published>
    <link href="https://waylonwalker.com/price-an-stl-print-on-slant3d/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been playing with 3d printing some items through the slant3d api. I&#39;ve been pricing out different prints by running a slice request through their api.</summary>
    <content type="html">&lt;p&gt;I’ve been playing with 3d printing some items through the slant3d api.  I’ve&#xA;been pricing out different prints by running a slice request through their api.&lt;/p&gt;&#xA;&lt;h2 id=&#34;make-a-project&#34;&gt;make a project &lt;a href=&#34;#make-a-project&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’ve been using uv for project management. It’s been working well for quick&#xA;projects like this while making it reproducible, I’m still all in on hatch for&#xA;libraries.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir slantproject&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; slantproject&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv init&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv venv&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;. ./.venv/bin/activate&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv add httpx rich python-dotenv&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;get-an-api-key&#34;&gt;Get an api key &lt;a href=&#34;#get-an-api-key&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You will need an api key from the slant api, which currently requires a google&#xA;account and a credit card to create.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# .env&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#  replace with your api key from https://api-fe-two.vercel.app/&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SLANT_API_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;sl-**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;slicing-an-stl-with-teh-slant-api&#34;&gt;slicing an stl with teh slant api &lt;a href=&#34;#slicing-an-stl-with-teh-slant-api&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Then you can run the python script to price out your print.  I’m not exactly&#xA;sure how this compares to an order, especially when you add in different&#xA;materials.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;dotenv&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;load_dotenv&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;httpx&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;os&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;load_dotenv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;stl_url&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;api_key&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;environ&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;SLANT_API_KEY&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;api&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;httpx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Client&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;base_url&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://www.slant3dapi.com/api/slicer&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;res&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;httpx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;https://www.slant3dapi.com/api/slicer&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;fileURL&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;stl_url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;api-key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;api_key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Content-Type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;application/json&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;timeout&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;60&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ willmcgugan terminal-tree</title>
    <id>https://waylonwalker.com/willmcgugan-terminal-tree/</id>
    <updated>2024-11-17T17:58:43Z</updated>
    <published>2024-11-17T17:58:43Z</published>
    <link href="https://waylonwalker.com/willmcgugan-terminal-tree/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out terminal-tree by willmcgugan. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/willmcgugan/terminal-tree&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;terminal-tree&lt;/a&gt; by &lt;a href=&#34;https://github.com/willmcgugan&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;willmcgugan&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ironcalc IronCalc</title>
    <id>https://waylonwalker.com/ironcalc-ironcalc/</id>
    <updated>2024-11-12T13:31:56Z</updated>
    <published>2024-11-12T13:31:56Z</published>
    <link href="https://waylonwalker.com/ironcalc-ironcalc/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about IronCalc, an amazing project by ironcalc. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/ironcalc/IronCalc&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;IronCalc&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/ironcalc&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ironcalc&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Main engine of the IronCalc ecosystem&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ saghen blink.cmp</title>
    <id>https://waylonwalker.com/saghen-blink-cmp/</id>
    <updated>2024-11-05T13:11:54Z</updated>
    <published>2024-11-05T13:11:54Z</published>
    <link href="https://waylonwalker.com/saghen-blink-cmp/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on blink.cmp, created by saghen.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/saghen/blink.cmp&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;blink.cmp&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/saghen&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;saghen&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Performant, batteries-included completion plugin for Neovim&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ k3s-io cluster-api-k3s</title>
    <id>https://waylonwalker.com/k3s-io-cluster-api-k3s/</id>
    <updated>2024-11-05T04:14:53Z</updated>
    <published>2024-11-05T04:14:53Z</published>
    <link href="https://waylonwalker.com/k3s-io-cluster-api-k3s/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about cluster-api-k3s, an amazing project by k3s-io. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/k3s-io/cluster-api-k3s&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cluster-api-k3s&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/k3s-io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;k3s-io&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Cluster API k3s&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ rommapp romm</title>
    <id>https://waylonwalker.com/rommapp-romm/</id>
    <updated>2024-10-29T16:14:11Z</updated>
    <published>2024-10-29T16:14:11Z</published>
    <link href="https://waylonwalker.com/rommapp-romm/" rel="alternate" type="text/html"></link>
    <summary type="text">rommapp has done a fantastic job with romm. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/rommapp&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rommapp&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/rommapp/romm&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;romm&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;A beautiful, powerful, &lt;a href=&#34;/self-host/&#34; class=&#34;glossary-term&#34; title=&#34;Self hosting is the act of hosting your own applications and services without using a SAS provider. This is typically done with your own hardware, but there...&#34;&gt;self-hosted&lt;/a&gt; rom manager&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ CZ-NIC pz</title>
    <id>https://waylonwalker.com/cz-nic-pz/</id>
    <updated>2024-10-29T16:12:48Z</updated>
    <published>2024-10-29T16:12:48Z</published>
    <link href="https://waylonwalker.com/cz-nic-pz/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across pz from CZ-NIC, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/CZ-NIC/pz&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pz&lt;/a&gt; from &lt;a href=&#34;https://github.com/CZ-NIC&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;CZ-NIC&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;Easily handle day to day CLI operation via Python instead of regular Bash programs. 🇺🇦 #supporting&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Textualize textual-demo</title>
    <id>https://waylonwalker.com/textualize-textual-demo/</id>
    <updated>2024-10-29T16:09:13Z</updated>
    <published>2024-10-29T16:09:13Z</published>
    <link href="https://waylonwalker.com/textualize-textual-demo/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? textual-demo by Textualize.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/Textualize/textual-demo&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;textual-demo&lt;/a&gt; by &lt;a href=&#34;https://github.com/Textualize&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Textualize&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Quick access to the Textual demo&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ fynnfluegge rocketnotes</title>
    <id>https://waylonwalker.com/fynnfluegge-rocketnotes/</id>
    <updated>2024-10-29T16:04:58Z</updated>
    <published>2024-10-29T16:04:58Z</published>
    <link href="https://waylonwalker.com/fynnfluegge-rocketnotes/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by rocketnotes from fynnfluegge.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/fynnfluegge/rocketnotes&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rocketnotes&lt;/a&gt; from &lt;a href=&#34;https://github.com/fynnfluegge&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fynnfluegge&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;AI-powered markdown editor - leverage vector embeddings and LLMs with your personal notes - 100% local or in the cloud&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ airtai faststream</title>
    <id>https://waylonwalker.com/airtai-faststream/</id>
    <updated>2024-10-29T15:15:21Z</updated>
    <published>2024-10-29T15:15:21Z</published>
    <link href="https://waylonwalker.com/airtai-faststream/" rel="alternate" type="text/html"></link>
    <summary type="text">faststream by airtai is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/airtai/faststream&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;faststream&lt;/a&gt; by &lt;a href=&#34;https://github.com/airtai&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;airtai&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;FastStream is a powerful and easy-to-use Python framework for building asynchronous services interacting with event streams such as Apache Kafka, RabbitMQ, NATS and Redis.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ag2ai faststream</title>
    <id>https://waylonwalker.com/ag2ai-faststream/</id>
    <updated>2024-10-29T15:15:21Z</updated>
    <published>2024-10-29T15:15:21Z</published>
    <link href="https://waylonwalker.com/ag2ai-faststream/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across faststream from ag2ai, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/ag2ai/faststream&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;faststream&lt;/a&gt; from &lt;a href=&#34;https://github.com/ag2ai&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ag2ai&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;FastStream is a powerful and easy-to-use Python framework for building asynchronous services interacting with event streams such as Apache Kafka, RabbitMQ, NATS and Redis.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ usememos memos</title>
    <id>https://waylonwalker.com/usememos-memos/</id>
    <updated>2024-10-29T15:12:46Z</updated>
    <published>2024-10-29T15:12:46Z</published>
    <link href="https://waylonwalker.com/usememos-memos/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on memos by usememos.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/usememos/memos&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;memos&lt;/a&gt; by &lt;a href=&#34;https://github.com/usememos&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;usememos&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;An open-source, lightweight note-taking solution. The pain-less way to create your meaningful notes. Your Notes, Your Way.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pypeaday learn-kestra</title>
    <id>https://waylonwalker.com/pypeaday-learn-kestra/</id>
    <updated>2024-10-29T15:08:43Z</updated>
    <published>2024-10-29T15:08:43Z</published>
    <link href="https://waylonwalker.com/pypeaday-learn-kestra/" rel="alternate" type="text/html"></link>
    <summary type="text">pypeaday has done a fantastic job with learn-kestra. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/pypeaday&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pypeaday&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/pypeaday/learn-kestra&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;learn-kestra&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pypeaday learn-n8n</title>
    <id>https://waylonwalker.com/pypeaday-learn-n8n/</id>
    <updated>2024-10-29T15:08:39Z</updated>
    <published>2024-10-29T15:08:39Z</published>
    <link href="https://waylonwalker.com/pypeaday-learn-n8n/" rel="alternate" type="text/html"></link>
    <summary type="text">pypeaday has done a fantastic job with learn-n8n. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/pypeaday&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pypeaday&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/pypeaday/learn-n8n&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;learn-n8n&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ joshmedeski sesh</title>
    <id>https://waylonwalker.com/joshmedeski-sesh/</id>
    <updated>2024-10-25T19:20:23Z</updated>
    <published>2024-10-25T19:20:23Z</published>
    <link href="https://waylonwalker.com/joshmedeski-sesh/" rel="alternate" type="text/html"></link>
    <summary type="text">I like joshmedeski&#39;s project sesh.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/joshmedeski&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;joshmedeski’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/joshmedeski/sesh&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sesh&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Smart session manager for the terminal&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nvzone menu</title>
    <id>https://waylonwalker.com/nvzone-menu/</id>
    <updated>2024-10-20T16:40:43Z</updated>
    <published>2024-10-20T16:40:43Z</published>
    <link href="https://waylonwalker.com/nvzone-menu/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on menu by nvzone.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/nvzone/menu&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;menu&lt;/a&gt; by &lt;a href=&#34;https://github.com/nvzone&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvzone&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Menu plugin for neovim ( supports nested menus ) made using volt&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Exafunction windsurf.nvim</title>
    <id>https://waylonwalker.com/exafunction-windsurf-nvim/</id>
    <updated>2024-10-15T22:07:25Z</updated>
    <published>2024-10-15T22:07:25Z</published>
    <link href="https://waylonwalker.com/exafunction-windsurf-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred windsurf.nvim by Exafunction. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/Exafunction/windsurf.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;windsurf.nvim&lt;/a&gt; by &lt;a href=&#34;https://github.com/Exafunction&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Exafunction&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;A native neovim extension for Codeium&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Exafunction codeium.nvim</title>
    <id>https://waylonwalker.com/exafunction-codeium-nvim/</id>
    <updated>2024-10-15T22:07:25Z</updated>
    <published>2024-10-15T22:07:25Z</published>
    <link href="https://waylonwalker.com/exafunction-codeium-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about codeium.nvim, an amazing project by Exafunction. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/Exafunction/codeium.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;codeium.nvim&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/Exafunction&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Exafunction&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;A native neovim extension for Codeium&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ facebookincubator fastmod</title>
    <id>https://waylonwalker.com/facebookincubator-fastmod/</id>
    <updated>2024-10-08T13:16:32Z</updated>
    <published>2024-10-08T13:16:32Z</published>
    <link href="https://waylonwalker.com/facebookincubator-fastmod/" rel="alternate" type="text/html"></link>
    <summary type="text">I like facebookincubator&#39;s project fastmod.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/facebookincubator&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;facebookincubator’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/facebookincubator/fastmod&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fastmod&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A fast partial replacement for the codemod tool&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ wyattbubbylee zmk-config-wyatt-3x5</title>
    <id>https://waylonwalker.com/wyattbubbylee-zmk-config-wyatt-3x5/</id>
    <updated>2024-10-03T13:41:32Z</updated>
    <published>2024-10-03T13:41:32Z</published>
    <link href="https://waylonwalker.com/wyattbubbylee-zmk-config-wyatt-3x5/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on zmk-config-wyatt-3x5 by wyattbubbylee.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/wyattbubbylee/zmk-config-wyatt-3x5&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;zmk-config-wyatt-3x5&lt;/a&gt; by &lt;a href=&#34;https://github.com/wyattbubbylee&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;wyattbubbylee&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;wyatt-3x5&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ manyfold3d manyfold</title>
    <id>https://waylonwalker.com/manyfold3d-manyfold/</id>
    <updated>2024-09-27T16:15:53Z</updated>
    <published>2024-09-27T16:15:53Z</published>
    <link href="https://waylonwalker.com/manyfold3d-manyfold/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about manyfold, an amazing project by manyfold3d. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/manyfold3d/manyfold&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;manyfold&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/manyfold3d&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;manyfold3d&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;A &lt;a href=&#34;/self-host/&#34; class=&#34;glossary-term&#34; title=&#34;Self hosting is the act of hosting your own applications and services without using a SAS provider. This is typically done with your own hardware, but there...&#34;&gt;self-hosted&lt;/a&gt; digital asset manager for 3d print files.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ valberg django-admin-tui</title>
    <id>https://waylonwalker.com/valberg-django-admin-tui/</id>
    <updated>2024-09-23T16:50:12Z</updated>
    <published>2024-09-23T16:50:12Z</published>
    <link href="https://waylonwalker.com/valberg-django-admin-tui/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about django-admin-tui, an amazing project by valberg. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/valberg/django-admin-tui&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;django-admin-tui&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/valberg&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;valberg&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Django Admin in the terminal!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ triliu Heawood42</title>
    <id>https://waylonwalker.com/triliu-heawood42/</id>
    <updated>2024-09-18T22:55:53Z</updated>
    <published>2024-09-18T22:55:53Z</published>
    <link href="https://waylonwalker.com/triliu-heawood42/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across Heawood42 from triliu, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/triliu/Heawood42&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Heawood42&lt;/a&gt; from &lt;a href=&#34;https://github.com/triliu&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;triliu&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;Files for the Heawood42 ortholinear split keyboard&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>k3s config after first install</title>
    <id>https://waylonwalker.com/k3s-config-after-first-install/</id>
    <updated>2024-09-15T16:57:41Z</updated>
    <published>2024-09-15T16:57:41Z</published>
    <link href="https://waylonwalker.com/k3s-config-after-first-install/" rel="alternate" type="text/html"></link>
    <summary type="text">After first setting up a new k3s instance your kubeconfig file will be located in /etc/rancher/k3s/k3s.yaml.</summary>
    <content type="html">&lt;p&gt;After first setting up a new k3s instance your kubeconfig file will be located&#xA;in /etc/rancher/k3s/k3s.yaml.&lt;/p&gt;&#xA;&lt;p&gt;You cans use it from here by setting $KUBECONFIG to that file.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;KUBECONFIG&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/etc/rancher/k3s/k3s.yaml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Or you can copy it to &lt;code&gt;~/.kube/config&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp /etc/rancher/k3s/k3s.yaml ~/.kube/config&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you have installed k3s on a remote server and need the config on your local&#xA;machine then you will need to modify the server address to reflect the remote&#xA;server.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;scp user@&amp;lt;server-ip&amp;gt;:/etc/rancher/k3s/k3s.yaml ~/.kube/config&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition warning&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Warning&lt;/p&gt;&#xA;&lt;p&gt;only do this if you don’t already have a ~/.kube/config file, otherwise copy&#xA;it to a new file and set your $KUBECONFIG env variable to use it.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Now you will need to open that file and change the server address, making sure&#xA;to keep the port number.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;apiVersion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;v1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;clusters&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;cluster&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;certificate-authority-data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;****&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://&amp;lt;server-ip&amp;gt;:6443&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pifi-org pifi-openwrt-raspberry-pi</title>
    <id>https://waylonwalker.com/pifi-org-pifi-openwrt-raspberry-pi/</id>
    <updated>2024-09-07T18:05:56Z</updated>
    <published>2024-09-07T18:05:56Z</published>
    <link href="https://waylonwalker.com/pifi-org-pifi-openwrt-raspberry-pi/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by pifi-openwrt-raspberry-pi from pifi-org.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/pifi-org/pifi-openwrt-raspberry-pi&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pifi-openwrt-raspberry-pi&lt;/a&gt; from &lt;a href=&#34;https://github.com/pifi-org&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pifi-org&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Firmware Files for Raspberry Pi (PiFI)&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Trying-n8n</title>
    <id>https://waylonwalker.com/trying-n8n/</id>
    <updated>2024-09-03T11:24:00Z</updated>
    <published>2024-09-03T11:24:00Z</published>
    <link href="https://waylonwalker.com/trying-n8n/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I gave n8n a try using podman, their docs gave me docker commands, but it ran fine on my machine using podman.</summary>
    <content type="html">&lt;p&gt;Today I gave n8n a try using podman, their docs gave me docker commands, but it&#xA;ran fine on my machine using podman.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;podman volume create n8n_data&#xA;podman run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tjdevries kickstart.css</title>
    <id>https://waylonwalker.com/tjdevries-kickstart-css/</id>
    <updated>2024-08-21T12:59:49Z</updated>
    <published>2024-08-21T12:59:49Z</published>
    <link href="https://waylonwalker.com/tjdevries-kickstart-css/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered kickstart.css by tjdevries, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/tjdevries/kickstart.css&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kickstart.css&lt;/a&gt; by &lt;a href=&#34;https://github.com/tjdevries&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tjdevries&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;Kickstart.nvim alternative written in pure CSS. Requires failwind.nvim&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Print in place nuts with cura</title>
    <id>https://waylonwalker.com/print-in-place-nuts-with-cura/</id>
    <updated>2024-08-12T08:54:00Z</updated>
    <published>2024-08-12T08:54:00Z</published>
    <link href="https://waylonwalker.com/print-in-place-nuts-with-cura/" rel="alternate" type="text/html"></link>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ infused-kim kb_zmk_ps2_mouse_trackpoint_driver</title>
    <id>https://waylonwalker.com/infused-kim-kb_zmk_ps2_mouse_trackpoint_driver/</id>
    <updated>2024-08-12T03:41:28Z</updated>
    <published>2024-08-12T03:41:28Z</published>
    <link href="https://waylonwalker.com/infused-kim-kb_zmk_ps2_mouse_trackpoint_driver/" rel="alternate" type="text/html"></link>
    <summary type="text">infused-kim has done a fantastic job with kb_ps2_trackpoint_driver. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/infused-kim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;infused-kim&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/infused-kim/kb_zmk_ps2_mouse_trackpoint_driver&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kb_zmk_ps2_mouse_trackpoint_driver&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;A PS/2 mouse &amp;amp; trackpoint driver module for keyboards running the zmk firmware&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tjdevries failwind.nvim</title>
    <id>https://waylonwalker.com/tjdevries-failwind-nvim/</id>
    <updated>2024-08-07T18:06:05Z</updated>
    <published>2024-08-07T18:06:05Z</published>
    <link href="https://waylonwalker.com/tjdevries-failwind-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered failwind.nvim by tjdevries, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/tjdevries/failwind.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;failwind.nvim&lt;/a&gt; by &lt;a href=&#34;https://github.com/tjdevries&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tjdevries&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;KEKW&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>New-caps-for-porta-john</title>
    <id>https://waylonwalker.com/new-caps-for-porta-john/</id>
    <updated>2024-08-05T19:06:00Z</updated>
    <published>2024-08-05T19:06:00Z</published>
    <link href="https://waylonwalker.com/new-caps-for-porta-john/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I dropped some new caps in the porta-john. I need to do a bunch of posts on zmk and my journey building the porta-john, I&#39;ve been rocking it for at...</summary>
    <content type="html">&lt;p&gt;Today I dropped some new caps in the porta-john.  I need to do a bunch of&#xA;posts on zmk and my journey building the porta-john, I’ve been rocking it for&#xA;at least two weeks now pretty solid and I am absolutely loving it.  More on&#xA;that later.&lt;/p&gt;&#xA;&lt;h2 id=&#34;klp-lame-keycaps&#34;&gt;KLP-Lame-Keycaps &lt;a href=&#34;#klp-lame-keycaps&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The model of the caps are&#xA;&lt;a href=&#34;https://github.com/braindefender/KLP-Lame-Keycaps&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;KLP-Lame&lt;/a&gt; by&#xA;&lt;a href=&#34;https://github.com/braindefender&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;braindefender&lt;/a&gt; , they are super rounded and&#xA;smooth.  They look really good on camera and feel good to the finders.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/46c218f4-911c-4083-8ec1-8fe6ae11eb0a.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/46c218f4-911c-4083-8ec1-8fe6ae11eb0a.webp&#34; alt=&#34;new-caps-for-porta-john-20240805193001765.webp&#34;/ data-glightbox=&#34;description: new-caps-for-porta-john-20240805193001765.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;I printed these at home on my ender3 s1 pro with a black and purple silk&#xA;filliment.  I printed all 42 at once using a &lt;a href=&#34;/knock-and-sweep/&#34; class=&#34;wikilink&#34; data-title=&#34;Printing 42 keys at once&#34; data-description=&#34;I&amp;#39;m working on creating some gcode to create a whole set of key caps in one print, it is getting tedious to print them one at a time, and my past experience...&#34; data-date=&#34;2024-08-03&#34; data-preview=&#34;I&amp;#39;m working on creating some gcode to create a whole set of key caps in one print, it is getting tedious to print them one at a time, and my past experience...&#34;&gt;Printing 42 keys at once&lt;/a&gt; technique.&#xA;They do have just a bit of a rough texture that you can feel on your figertips.&#xA;I printed these on super quality .12mm layer height, while my last set was&#xA;printed on draft quality .32mm layer height.  They look crazy different in&#xA;print quality with the lines of the new caps barely showing, the feel isn’t&#xA;nearly as drastic.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-result&#34;&gt;The Result &lt;a href=&#34;#the-result&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Check out the final shots as I set up the porta-john with these sweet caps.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/7d2ab237-26dc-42b9-9594-9ee044755bbc.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/7d2ab237-26dc-42b9-9594-9ee044755bbc.webp&#34; alt=&#34;new-caps-for-porta-john-20240805190712987.webp&#34;/ data-glightbox=&#34;description: new-caps-for-porta-john-20240805190712987.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;And here they are all set up.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/903ae2e9-411c-4686-bd28-fa0de8571360.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/903ae2e9-411c-4686-bd28-fa0de8571360.webp&#34; alt=&#34;new-caps-for-porta-john-20240805190716762.webp&#34;/ data-glightbox=&#34;description: new-caps-for-porta-john-20240805190716762.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;full-disclosure&#34;&gt;Full Disclosure &lt;a href=&#34;#full-disclosure&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I am building out a keyboard business, so if you are interested in getting some&#xA;of these caps for yourself or an entire board custom made to your liking hit me&#xA;up.  If you’re not quite ready, I would be stoked if you keep in touch by&#xA;sigining up for the email newsletter&#xA;&lt;a href=&#34;https://ticklemykeys.com&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/ticklemykeys.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/ticklemykeys.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://ticklemykeys.com&lt;/a&gt;.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Vim-gq</title>
    <id>https://waylonwalker.com/vim-gq/</id>
    <updated>2024-08-05T12:22:00Z</updated>
    <published>2024-08-05T12:22:00Z</published>
    <link href="https://waylonwalker.com/vim-gq/" rel="alternate" type="text/html"></link>
    <summary type="text">Vim has a handy feature to format text with . You can use it in visual mode, give it a motion, or if you give it it will format the current line. I use this...</summary>
    <content type="html">&lt;p&gt;Vim has a handy feature to format text with &lt;code&gt;gq&lt;/code&gt;.  You can use it in visual&#xA;mode, give it a motion, or if you give it &lt;code&gt;gqq&lt;/code&gt; it will format the current line.&#xA;I use this quite often while writing in markdown, I do not use softwraps in vim,&#xA;so &lt;code&gt;gqq&lt;/code&gt; quickly formats my current line into a paragraph.    Once I have done&#xA;this for a single line one time I typically switch to the motion for around&#xA;paragraph &lt;code&gt;gqap&lt;/code&gt; to format the whole paragraph and not just the current line.&lt;/p&gt;&#xA;&lt;h2 id=&#34;before-formatting&#34;&gt;before formatting &lt;a href=&#34;#before-formatting&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/01c19159-c0b5-4920-b73c-774284b09940.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/01c19159-c0b5-4920-b73c-774284b09940.webp&#34; alt=&#34;vim-gq-20240805122634078.webp&#34;/ data-glightbox=&#34;description: vim-gq-20240805122634078.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;after-formattting&#34;&gt;after formattting &lt;a href=&#34;#after-formattting&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/e068e445-43e0-4e27-ac30-ac11e9cb9088.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/e068e445-43e0-4e27-ac30-ac11e9cb9088.webp&#34; alt=&#34;vim-gq-20240805122700026.webp&#34;/ data-glightbox=&#34;description: vim-gq-20240805122700026.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Slug</title>
    <id>https://waylonwalker.com/slug/</id>
    <updated>2024-08-05T11:45:00Z</updated>
    <published>2024-08-05T11:45:00Z</published>
    <link href="https://waylonwalker.com/slug/" rel="alternate" type="text/html"></link>
    <summary type="text">A slug is the part of the url that comes after the domain. Commonly matches the file name of a markdown file many blogging systems. These are typically human...</summary>
    <content type="html">&lt;p&gt;A slug is the part of the url that comes after the domain.  Commonly matches the file name of a markdown file many blogging systems.  These are typically human readable, unique identifiers for pages within the site.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Obsidian-new-file</title>
    <id>https://waylonwalker.com/obsidian-new-file/</id>
    <updated>2024-08-05T11:44:00Z</updated>
    <published>2024-08-05T11:44:00Z</published>
    <link href="https://waylonwalker.com/obsidian-new-file/" rel="alternate" type="text/html"></link>
    <summary type="text">Wikilinks are a core concept within obsidian to link to documents by slug wrapped in double square brackets. These are commonly used within wiki site...</summary>
    <content type="html">&lt;p&gt;Wikilinks are a core concept within obsidian to link to documents by &lt;a href=&#34;/slug/&#34; class=&#34;wikilink&#34; data-title=&#34;Slug&#34; data-description=&#34;A slug is the part of the url that comes after the domain. Commonly matches the file name of a markdown file many blogging systems. These are typically human...&#34; data-date=&#34;2024-08-05&#34; data-preview=&#34;A slug is the part of the url that comes after the domain. Commonly matches the file name of a markdown file many blogging systems. These are typically human...&#34;&gt;Slug&lt;/a&gt; wrapped in double square brackets.  These are commonly used within wiki site generators.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[[slug]]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Obsidian gives you a keybinding &lt;code&gt;alt+enter&lt;/code&gt; to go to that file, but if it does not exist it will create the file for you in the root of the project.  It’s a nice way to quickly make new documents.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>blogging in 2024</title>
    <id>https://waylonwalker.com/blogging-in-2024/</id>
    <updated>2024-08-05T10:02:09Z</updated>
    <published>2024-08-05T10:02:09Z</published>
    <link href="https://waylonwalker.com/blogging-in-2024/" rel="alternate" type="text/html"></link>
    <summary type="text">Over the past years couple of years blog traffic has been tanking, for some time I thought it might have just been me, but then i heard it from Dave Rupert...</summary>
    <content type="html">&lt;p&gt;Over the past years couple of years blog traffic has been tanking, for some&#xA;time I thought it might have just been me, but then i heard it from Dave Rupert&#xA;on Shop Talk show, and it made sense.  LLMs and AI is slowly killing the&#xA;internet as we know it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;my-metrics&#34;&gt;My metrics &lt;a href=&#34;#my-metrics&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I dug into my emails from the google search console team and found two results&#xA;nearly one year apart.  Impressions are only 60% of its value a year ago while&#xA;clicks are only 35% of where they were a year ago.  I’m getting less&#xA;impressions and even less clicks.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/2706f990-f2fa-4ccb-a7a9-142ee20686c7.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/2706f990-f2fa-4ccb-a7a9-142ee20686c7.webp&#34; alt=&#34;blogging-in-2024-20240805080104035.webp&#34;/ data-glightbox=&#34;description: blogging-in-2024-20240805080104035.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;May 2023&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/cd708a26-27d2-4a33-9f22-b0cb0dd54fc5.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/cd708a26-27d2-4a33-9f22-b0cb0dd54fc5.webp&#34; alt=&#34;blogging-in-2024-20240805080137554.webp&#34;/ data-glightbox=&#34;description: blogging-in-2024-20240805080137554.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;June 2024&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;suspicions&#34;&gt;Suspicions &lt;a href=&#34;#suspicions&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;What I think is happening is a large portion of users are getting their answers&#xA;from ChatGPT, Copilot, and llms like this.  A lot of my posts have been filling&#xA;gaps in the internet, notes for myself when I struggle to integrate x in y&#xA;because there was a gap of how to do so in the docs and stack overflow. Some&#xA;small fraction of users have moved on to duck duck go and other non global&#xA;warming search engines with AI in their results.&lt;/p&gt;&#xA;&lt;p&gt;Clicks are down even further, than impressions.  I can’t tell for sure but my&#xA;gut feeling is that people are using the AI generated results.  I know I use&#xA;them quite often, but listening to Justin and Autumn at the end of the latest&#xA;ship it podcast &lt;a href=&#34;https://changelog.com/shipit/115&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/changelog.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/changelog.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://changelog.com/shipit/115&lt;/a&gt;, they both claim that they get&#xA;no benefits from it and don’t know anyone who does.  In fact Justin has taken&#xA;the most ethical approach to move to duck duck go since it doesn’t kill the&#xA;earth with each search by injecting AI results.  Personally I do find it quite&#xA;helpful, sometimes the answer is there, or an idea that triggers me to think of&#xA;the idea.&lt;/p&gt;&#xA;&lt;h2 id=&#34;ok-blogging-is-dead-why-keep-going&#34;&gt;Ok blogging is dead why keep going &lt;a href=&#34;#ok-blogging-is-dead-why-keep-going&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Just as always blogging has been for me. It’s a great place to write down your&#xA;thoughts for later reference, and to help cement them into your brain.  Beyond&#xA;getting famous and clicks blogging is useful to you first and foremost, that&#xA;should be the number one reason.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-do-we-keep-the-internet-of-old&#34;&gt;How do we keep the internet of old &lt;a href=&#34;#how-do-we-keep-the-internet-of-old&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;RSS feed readers is a great way to keep creators that you like and want to&#xA;support in your feed regardless of what the higher powers of search and social&#xA;media think of them.  This year I built my own &lt;a href=&#34;/reader/&#34; class=&#34;wikilink&#34; data-title=&#34;Reader&#34; data-description=&#34;Latest posts from blogs I follow&#34; data-preview=&#34;Latest posts from blogs I follow&#34;&gt;Reader&lt;/a&gt;, and I use it every&#xA;single day to read articles out of my own custom curated feed.&lt;/p&gt;&#xA;&lt;p&gt;I have also created &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;Thoughts&lt;/a&gt; to help share and lift up creators that make&#xA;good posts.  I have a crome extension that allows me to create a blog post tied&#xA;to a link right within chrome.  I use this several times per day to save some&#xA;pages for later with a small note.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Obsidian-go-to-definition</title>
    <id>https://waylonwalker.com/obsidian-go-to-definition/</id>
    <updated>2024-08-04T20:35:00Z</updated>
    <published>2024-08-04T20:35:00Z</published>
    <link href="https://waylonwalker.com/obsidian-go-to-definition/" rel="alternate" type="text/html"></link>
    <summary type="text">It was not obvious to me, but if you have a wikilink such as trying-obsidian, you can jump to the file in obsidian, just like you can with lsp go to...</summary>
    <content type="html">&lt;p&gt;It was not obvious to me, but if you have a wikilink such as &lt;a href=&#34;/trying-obsidian/&#34; class=&#34;wikilink&#34; data-title=&#34;Trying Obsidian&#34; data-description=&#34;I am giving obsidian a try, this is a test post to learn the flow. Something that has been really hard for me for a long time is images, I don&amp;#39;t include a...&#34; data-date=&#34;2024-07-31&#34; data-preview=&#34;I am giving obsidian a try, this is a test post to learn the flow. Something that has been really hard for me for a long time is images, I don&amp;#39;t include a...&#34;&gt;Trying Obsidian&lt;/a&gt;, you can jump to the file in obsidian, just like you can with lsp go to definition, the keybinding is alt + enter.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ braindefender KLP-Lame-Keycaps</title>
    <id>https://waylonwalker.com/braindefender-klp-lame-keycaps/</id>
    <updated>2024-08-02T20:33:32Z</updated>
    <published>2024-08-02T20:33:32Z</published>
    <link href="https://waylonwalker.com/braindefender-klp-lame-keycaps/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on KLP-Lame-Keycaps by braindefender.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/braindefender/KLP-Lame-Keycaps&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;KLP-Lame-Keycaps&lt;/a&gt; by &lt;a href=&#34;https://github.com/braindefender&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;braindefender&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Sculpted and curved keycaps for Kailh Choc and MX switches&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Obsidian Using Templater Like Copier</title>
    <id>https://waylonwalker.com/obsidian-using-templater-like-copier/</id>
    <updated>2024-07-31T13:34:00Z</updated>
    <published>2024-07-31T13:34:00Z</published>
    <link href="https://waylonwalker.com/obsidian-using-templater-like-copier/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve long used copier to create all of my posts for my blog, and it works really well for my workflow. I think of a title, call a template, and give it a...</summary>
    <content type="html">&lt;p&gt;I’ve long used copier to create all of my posts for my blog, and it works&#xA;really well for my workflow.  I think of a title, call a template, and give it&#xA;a title.  out of the box obsidian did not seem to work this way.  It seems like&#xA;it wants me to right click a file tree and make a new file using the tree, this&#xA;is not my jam.&lt;/p&gt;&#xA;&lt;p&gt;Here is what I came up with to replace my til template.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;---&#xA;date: &amp;lt;% tp.file.creation_date() %&amp;gt;&#xA;templateKey: til&#xA;title: &amp;lt;%*&#xA;  const originalFileName = await tp.system.prompt(&amp;#34;Enter file name&amp;#34;);&#xA;  const toTitleCase = str =&amp;gt; str.replace(&#xA;    /\w\S*/g,&#xA;    txt =&amp;gt; txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase()&#xA;  );&#xA;  const title = toTitleCase(originalFileName);&#xA;  tR += title + &amp;#39;\n&amp;#39;; // Add the title to the template result&#xA;-%&amp;gt;&#xA;published: true&#xA;tags:&#xA;  -&#xA;---&#xA;&amp;lt;%*&#xA;const fileName = originalFileName.toLowerCase().replace(/\s+/g, &amp;#39;-&amp;#39;);&#xA;const newFilePath = `pages/til/${fileName}`;&#xA;await tp.file.move(newFilePath);&#xA;-%&amp;gt;&#xA;&#xA;&amp;lt;% tp.file.cursor() %&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;tR&lt;/code&gt; is a return value, and it gets placed directly into the place it is in the file&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;to.file.cursor()&lt;/code&gt; creates a tab-index point so I can tab into the content&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Trying Obsidian</title>
    <id>https://waylonwalker.com/trying-obsidian/</id>
    <updated>2024-07-31T00:00:00Z</updated>
    <published>2024-07-31T00:00:00Z</published>
    <link href="https://waylonwalker.com/trying-obsidian/" rel="alternate" type="text/html"></link>
    <summary type="text">I am giving obsidian a try, this is a test post to learn the flow. Something that has been really hard for me for a long time is images, I don&#39;t include a...</summary>
    <content type="html">&lt;p&gt;I am giving obsidian a try, this is a test post to learn the flow.  Something&#xA;that has been really hard for me for a long time is images, I don’t include a&#xA;lot of images just because it takes so much longer just to get the post out.  I&#xA;store them in a separate repo, I need to resize and compress them for the web&#xA;so they aren’t so big.&lt;/p&gt;&#xA;&lt;h2 id=&#34;images-are-easy&#34;&gt;Images are easy &lt;a href=&#34;#images-are-easy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is my current wallpaper.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/fe97308b-00f8-4860-be80-6869fa45d05a.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/fe97308b-00f8-4860-be80-6869fa45d05a.webp&#34; alt=&#34;trying-obsidian-20240731135759007.webp&#34;/ data-glightbox=&#34;description: trying-obsidian-20240731135759007.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I took he screenshot and just pasted it in.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I have more about my process in this post about &lt;a href=&#34;/obsidian-image-converter/&#34; class=&#34;wikilink&#34; data-title=&#34;Obsidian Image Converter&#34; data-description=&#34;I&amp;#39;m giving obsidian a go as an editor for my blog and one of the main things I want to fix in my workflow is the ability to quickly drop in images. on first...&#34; data-date=&#34;2024-07-30&#34; data-preview=&#34;I&amp;#39;m giving obsidian a go as an editor for my blog and one of the main things I want to fix in my workflow is the ability to quickly drop in images. on first...&#34;&gt;Obsidian Image Converter&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;its-still-just-markdown&#34;&gt;It’s still just markdown &lt;a href=&#34;#its-still-just-markdown&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I don’t know why it took me so long to understand this but obsidian is just&#xA;markdown files.  I pretty much just plugged in my existing blog and it picked&#xA;up all the tags and was ready to run.  I now get some nice visualizations to&#xA;help me identify posts that were not ever tagged or maybe left unfinished.&lt;/p&gt;&#xA;&lt;h2 id=&#34;it-leans-hard-on-wikilinks&#34;&gt;It leans hard on wikilinks &lt;a href=&#34;#it-leans-hard-on-wikilinks&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I just finished moving my backend over to md-it-python, which comes with some&#xA;good wiliklink support. I even make a &lt;a href=&#34;/sick-wikilink-hover/&#34; class=&#34;wikilink&#34; data-title=&#34;sick wikilink hover&#34; data-description=&#34;Today I set up some sick wikilink hover effects using tailwind see a-case-for-tailwindcss. When you hover over them they show an image preview of the link...&#34; data-date=&#34;2024-05-30&#34; data-preview=&#34;Today I set up some sick wikilink hover effects using tailwind see a-case-for-tailwindcss. When you hover over them they show an image preview of the link...&#34;&gt;sick wikilink hover&lt;/a&gt; feature that&#xA;previews wikilinks on hover.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/fe12e8ca-fdfd-41de-adcb-dc14155324c3.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/fe12e8ca-fdfd-41de-adcb-dc14155324c3.webp&#34; alt=&#34;trying-obsidian-20240804194656515.webp&#34;/ data-glightbox=&#34;description: trying-obsidian-20240804194656515.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Inside of obsidian when you start a wikilink it starts searching for posts to&#xA;link.  I get this feature in using the marksman lsp, and it’s nice to see that&#xA;it works pretty similarly, but with much less setup and configuration.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/4e0883a8-2430-49bf-99f3-2ce4df9516f5.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/4e0883a8-2430-49bf-99f3-2ce4df9516f5.webp&#34; alt=&#34;trying-obsidian-20240804194934445.webp&#34;/ data-glightbox=&#34;description: trying-obsidian-20240804194934445.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;creating-new-files&#34;&gt;creating new files &lt;a href=&#34;#creating-new-files&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The same keybinding that will take you to a new fill will create a &lt;a href=&#34;/obsidian-new-file/&#34; class=&#34;wikilink&#34; data-title=&#34;Obsidian-new-file&#34; data-description=&#34;Wikilinks are a core concept within obsidian to link to documents by slug wrapped in double square brackets. These are commonly used within wiki site...&#34; data-date=&#34;2024-08-05&#34; data-preview=&#34;Wikilinks are a core concept within obsidian to link to documents by slug wrapped in double square brackets. These are commonly used within wiki site...&#34;&gt;Obsidian-new-file&lt;/a&gt; in the root directory of your project.  This is very handy to create a bunch of new links and files quickly.  This feature does not work the greatest for my blog currently as it does not create them from a template, and I use templates to start all of my posts. see &lt;a href=&#34;/obsidian-using-templater-like-copier/&#34; class=&#34;wikilink&#34; data-title=&#34;Obsidian Using Templater Like Copier&#34; data-description=&#34;I&amp;#39;ve long used copier to create all of my posts for my blog, and it works really well for my workflow. I think of a title, call a template, and give it a...&#34; data-date=&#34;2024-07-31&#34; data-preview=&#34;I&amp;#39;ve long used copier to create all of my posts for my blog, and it works really well for my workflow. I think of a title, call a template, and give it a...&#34;&gt;Obsidian Using Templater Like Copier&lt;/a&gt;.  I am now seeing why these plugins push so much automation into the templating system by directory.&lt;/p&gt;&#xA;&lt;h2 id=&#34;new-keybindings&#34;&gt;New keybindings &lt;a href=&#34;#new-keybindings&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Until I really got myself in and working I didn’t realize all of the vim&#xA;features that I would really need, &lt;a href=&#34;/obsidian-go-to-definition/&#34; class=&#34;wikilink&#34; data-title=&#34;Obsidian-go-to-definition&#34; data-description=&#34;It was not obvious to me, but if you have a wikilink such as trying-obsidian, you can jump to the file in obsidian, just like you can with lsp go to...&#34; data-date=&#34;2024-08-04&#34; data-preview=&#34;It was not obvious to me, but if you have a wikilink such as trying-obsidian, you can jump to the file in obsidian, just like you can with lsp go to...&#34;&gt;Obsidian-go-to-definition&lt;/a&gt; was one of the&#xA;very first ones.  Obsidian has a feature to take you to the note under the&#xA;cursor by pressing alt+enter, but that was not obvious at first.&lt;/p&gt;&#xA;&lt;h2 id=&#34;renaming-posts&#34;&gt;Renaming posts &lt;a href=&#34;#renaming-posts&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Obsidian makes it so easy to rename a post, and it renames the file for you&#xA;without leaving the editor, needing to close the file or anything.  You can&#xA;just go to the top of the file and change the name without needing to find it&#xA;in a file tree or anything.  Its a very nice and clean feature.&lt;/p&gt;&#xA;&lt;h2 id=&#34;i-miss-my-gqap&#34;&gt;I miss my gqap &lt;a href=&#34;#i-miss-my-gqap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There are still some vim features like &lt;a href=&#34;/vim-gq/&#34; class=&#34;wikilink&#34; data-title=&#34;Vim-gq&#34; data-description=&#34;Vim has a handy feature to format text with . You can use it in visual mode, give it a motion, or if you give it it will format the current line. I use this...&#34; data-date=&#34;2024-08-05&#34; data-preview=&#34;Vim has a handy feature to format text with . You can use it in visual mode, give it a motion, or if you give it it will format the current line. I use this...&#34;&gt;Vim-gq&lt;/a&gt; that I use constantly to reflow&#xA;long lines into readable paragraphs no matter where I open them that I cannot&#xA;find a way to do in obsidian, and I miss it. ## Recent Posts.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ok, so vim mode inside of obsidian really does work, and it does this, its&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;just less obvious because of obsidians softwraps in the editor.  And I&#xA;don’t think it works on indented lines like these, in this note.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;missing-seemless-publish&#34;&gt;missing seemless publish &lt;a href=&#34;#missing-seemless-publish&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I run pre-commit on my posts to clean up the whitespace and line endings.&#xA;Generally this does not do much, but aparantly obsidian is clashing with my&#xA;setup, and not running pre-commit correctly so I need to leave my editor to&#xA;publish a post.&lt;/p&gt;&#xA;&lt;p&gt;With neovim I have a hotkey to commit verbosely with fugitive, &lt;code&gt;gic&lt;/code&gt;, and to&#xA;push &lt;code&gt;gpp&lt;/code&gt;, and I use this all the time as I am writing.&lt;/p&gt;&#xA;&lt;h2 id=&#34;recent-posts&#34;&gt;Recent Posts &lt;a href=&#34;#recent-posts&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Using obsidian I edited  over 260 posts just this week!  Some whole sections&#xA;like my gratitute posts were kinda sitting completely untagged and I fixed that&#xA;up.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/weeknote-0/&#34; class=&#34;wikilink&#34; data-title=&#34;Weeknote 0&#34; data-description=&#34;Inspired by Simon Willison I&amp;#39;m starting a weeknotes retrospective post to recap the week. The theme this week has been learning and setting up obsidian to...&#34; data-date=&#34;2024-08-04&#34; data-preview=&#34;Inspired by Simon Willison I&amp;#39;m starting a weeknotes retrospective post to recap the week. The theme this week has been learning and setting up obsidian to...&#34;&gt;Weeknote 0&lt;/a&gt; (Modified: 2024-08-04 20:47:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/obsidian-go-to-definition/&#34; class=&#34;wikilink&#34; data-title=&#34;Obsidian-go-to-definition&#34; data-description=&#34;It was not obvious to me, but if you have a wikilink such as trying-obsidian, you can jump to the file in obsidian, just like you can with lsp go to...&#34; data-date=&#34;2024-08-04&#34; data-preview=&#34;It was not obvious to me, but if you have a wikilink such as trying-obsidian, you can jump to the file in obsidian, just like you can with lsp go to...&#34;&gt;Obsidian-go-to-definition&lt;/a&gt; (Modified: 2024-08-04 20:44:09)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/trying-obsidian/&#34; class=&#34;wikilink&#34; data-title=&#34;Trying Obsidian&#34; data-description=&#34;I am giving obsidian a try, this is a test post to learn the flow. Something that has been really hard for me for a long time is images, I don&amp;#39;t include a...&#34; data-date=&#34;2024-07-31&#34; data-preview=&#34;I am giving obsidian a try, this is a test post to learn the flow. Something that has been really hard for me for a long time is images, I don&amp;#39;t include a...&#34;&gt;Trying Obsidian&lt;/a&gt; (Modified: 2024-08-04 20:40:48)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/knock-and-sweep/&#34; class=&#34;wikilink&#34; data-title=&#34;Printing 42 keys at once&#34; data-description=&#34;I&amp;#39;m working on creating some gcode to create a whole set of key caps in one print, it is getting tedious to print them one at a time, and my past experience...&#34; data-date=&#34;2024-08-03&#34; data-preview=&#34;I&amp;#39;m working on creating some gcode to create a whole set of key caps in one print, it is getting tedious to print them one at a time, and my past experience...&#34;&gt;Printing 42 keys at once&lt;/a&gt; (Modified: 2024-08-03 21:44:57)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/blogging-in-2024/&#34; class=&#34;wikilink&#34; data-title=&#34;blogging in 2024&#34; data-description=&#34;Over the past years couple of years blog traffic has been tanking, for some time I thought it might have just been me, but then i heard it from Dave Rupert...&#34; data-date=&#34;2024-08-05&#34; data-preview=&#34;Over the past years couple of years blog traffic has been tanking, for some time I thought it might have just been me, but then i heard it from Dave Rupert...&#34;&gt;blogging in 2024&lt;/a&gt; (Modified: 2024-08-03 21:43:28)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/pandas-pattern/&#34; class=&#34;wikilink&#34; data-title=&#34;My favorite pandas pattern&#34; data-description=&#34;I work with a lot of transactional timeseries data that includes categories. I often want to create timeseries plots with each category as its own line. This...&#34; data-date=&#34;2018-03-01&#34; data-preview=&#34;I work with a lot of transactional timeseries data that includes categories. I often want to create timeseries plots with each category as its own line. This...&#34;&gt;My favorite pandas pattern&lt;/a&gt; (Modified: 2024-08-03 21:43:28)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/python-tips/&#34; class=&#34;wikilink&#34; data-title=&#34;Python Tips&#34; data-description=&#34;** func(** locals().update(d)&#34; data-date=&#34;2019-01-21&#34; data-preview=&#34;** func(** locals().update(d)&#34;&gt;Python Tips&lt;/a&gt; (Modified: 2024-08-03 21:43:28)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/productive-one-on-one/&#34; class=&#34;wikilink&#34; data-title=&#34;Productive one on one&#34; data-date=&#34;2020-02-24&#34; data-preview=&#34;Inspired by https://m.soundcloud.com/front-end-happy-hour/episode-095-shot-for-shot-one-on-ones&#34;&gt;Productive one on one&lt;/a&gt; (Modified: 2024-08-03 21:42:14)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/kedro-basics/&#34; class=&#34;wikilink&#34; data-title=&#34;Kedro Basics&#34; data-description=&#34;In my upcoming free kedro course, you can learn how to start building pipelines in 5 days.&#34; data-date=&#34;2020-08-08&#34; data-preview=&#34;In my upcoming free kedro course, you can learn how to start building pipelines in 5 days.&#34;&gt;Kedro Basics&lt;/a&gt; (Modified: 2024-08-03 21:41:58)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/passion/&#34; class=&#34;wikilink&#34; data-title=&#34;Follow Your Passion&#34; data-description=&#34;none&#34; data-date=&#34;2019-01-01&#34; data-preview=&#34;none&#34;&gt;Follow Your Passion&lt;/a&gt; (Modified: 2024-08-03 21:41:48)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/thank-you/&#34; class=&#34;wikilink&#34; data-title=&#34;Thanks For Subscribing&#34; data-description=&#34;You&amp;#39;re awesome! Thanks for subscribing to my newsletter.&#34; data-date=&#34;2020-05-20&#34; data-preview=&#34;You&amp;#39;re awesome! Thanks for subscribing to my newsletter.&#34;&gt;Thanks For Subscribing&lt;/a&gt; (Modified: 2024-08-03 21:41:17)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/animal-well-keyboard/&#34; class=&#34;wikilink&#34; data-title=&#34;animal well keyboard&#34; data-description=&#34;Animal well does not let you remap keys, and really doesn&amp;#39;t even inform you that it is keyboard compatible. I had to play around and discover the keymap,...&#34; data-date=&#34;2024-07-04&#34; data-preview=&#34;Animal well does not let you remap keys, and really doesn&amp;#39;t even inform you that it is keyboard compatible. I had to play around and discover the keymap,...&#34;&gt;animal well keyboard&lt;/a&gt; (Modified: 2024-08-03 21:41:07)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/automate-your-deploys/&#34; class=&#34;wikilink&#34; data-title=&#34;automate your deploys&#34; data-date=&#34;2020-02-07&#34;&gt;automate your deploys&lt;/a&gt; (Modified: 2024-08-03 21:40:36)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/expand-one-line-links/&#34; class=&#34;wikilink&#34; data-title=&#34;Expand One Line Links&#34; data-description=&#34;I wanted a super simple way to cross-link blog posts that require as little effort as possible, yet still looks good in vanilla markdown in GitHub. I have...&#34; data-date=&#34;2020-11-18&#34; data-preview=&#34;I wanted a super simple way to cross-link blog posts that require as little effort as possible, yet still looks good in vanilla markdown in GitHub. I have...&#34;&gt;Expand One Line Links&lt;/a&gt; (Modified: 2024-08-03 21:39:48)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/journey/&#34; class=&#34;wikilink&#34; data-title=&#34;It&amp;#39;s not all about winning&#34; data-description=&#34;This is my story into data science.&#34; data-date=&#34;2019-02-02&#34; data-preview=&#34;This is my story into data science.&#34;&gt;It&amp;#39;s not all about winning&lt;/a&gt; (Modified: 2024-08-03 21:39:36)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/2018-retrospective/&#34; class=&#34;wikilink&#34; data-title=&#34;2018 Retrospective&#34; data-description=&#34;2018 was a year of many ups and downs, and learning to deal with a whole new set of problems professionally and at home. In 2018 I logged in to my first...&#34; data-date=&#34;2019-01-05&#34; data-preview=&#34;2018 was a year of many ups and downs, and learning to deal with a whole new set of problems professionally and at home. In 2018 I logged in to my first...&#34;&gt;2018 Retrospective&lt;/a&gt; (Modified: 2024-08-03 21:39:25)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/goals-2019/&#34; class=&#34;wikilink&#34; data-title=&#34;2019 goals&#34; data-description=&#34;2019 goals&#34; data-date=&#34;2019-01-12&#34; data-preview=&#34;2019 goals&#34;&gt;2019 goals&lt;/a&gt; (Modified: 2024-08-03 21:39:11)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/debugging-python/&#34; class=&#34;wikilink&#34; data-title=&#34;Debugging Python&#34; data-description=&#34;Debugging Python&#34; data-date=&#34;2019-10-01&#34; data-preview=&#34;Debugging Python&#34;&gt;Debugging Python&lt;/a&gt; (Modified: 2024-08-03 21:38:11)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gatsby-rss-feed/&#34; class=&#34;wikilink&#34; data-title=&#34;RSS feed for your Gatsby Site&#34; data-description=&#34;Add an rss feed to your Gatsby Site&#34; data-date=&#34;2020-01-21&#34; data-preview=&#34;Add an rss feed to your Gatsby Site&#34;&gt;RSS feed for your Gatsby Site&lt;/a&gt; (Modified: 2024-08-03 21:38:01)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/pyspark/&#34; class=&#34;wikilink&#34; data-title=&#34;Pyspark&#34; data-description=&#34;I have been using pyspark since March 2019, here are my thoughts.&#34; data-date=&#34;2019-09-22&#34; data-preview=&#34;I have been using pyspark since March 2019, here are my thoughts.&#34;&gt;Pyspark&lt;/a&gt; (Modified: 2024-08-03 21:37:51)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/packages-to-investigate/&#34; class=&#34;wikilink&#34; data-title=&#34;📝 Packages to Investigate Notes&#34; data-description=&#34;Tabnine&#34; data-date=&#34;2019-10-14&#34; data-preview=&#34;Tabnine&#34;&gt;📝 Packages to Investigate Notes&lt;/a&gt; (Modified: 2024-08-03 21:37:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/git-diff-branches/&#34; class=&#34;wikilink&#34; data-title=&#34;Today I learned `git diff feature..main`&#34; data-description=&#34;Sometimes we get a little happy and mistakenly commit something that we just cant figure out. This is a good way to figure out what the heck has changed on the current branch compared to any other branch.&#34; data-date=&#34;2020-03-03&#34;&gt;Today I learned &lt;code&gt;git diff feature..main&lt;/code&gt;&lt;/a&gt; (Modified: 2024-08-03 21:37:33)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/practice-your-craft/&#34; class=&#34;wikilink&#34; data-title=&#34;Practice your craft&#34; data-date=&#34;2020-03-04&#34; data-preview=&#34;Show up For Practice # how I practice # What Works for You #&#34;&gt;Practice your craft&lt;/a&gt; (Modified: 2024-08-03 21:37:23)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/mentorship-vs-sponsorship/&#34; class=&#34;wikilink&#34; data-title=&#34;Mentorship Vs Sponsorship&#34; data-description=&#34;https://www.hanselminutes.com/784/doing-open-source-with-brian-douglas&#34; data-date=&#34;2021-04-17&#34; data-preview=&#34;https://www.hanselminutes.com/784/doing-open-source-with-brian-douglas&#34;&gt;Mentorship Vs Sponsorship&lt;/a&gt; (Modified: 2024-08-03 21:37:17)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gatsby-scripts-with-onload/&#34; class=&#34;wikilink&#34; data-title=&#34;Gatsby Scripts with onload&#34; data-description=&#34;This might be useful&#34; data-date=&#34;2020-05-22&#34; data-preview=&#34;This might be useful&#34;&gt;Gatsby Scripts with onload&lt;/a&gt; (Modified: 2024-08-03 21:37:06)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/long-variable-names-are-good/&#34; class=&#34;wikilink&#34; data-title=&#34;Long variable names are good&#34; data-description=&#34;🏷️ Long variable names are a good thing. Self documenting code is more important than poorly documented code. Simply adding a few characters to your...&#34; data-date=&#34;2020-02-24&#34; data-preview=&#34;🏷️ Long variable names are a good thing. Self documenting code is more important than poorly documented code. Simply adding a few characters to your...&#34;&gt;Long variable names are good&lt;/a&gt; (Modified: 2024-08-03 21:36:51)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/kedro-dependency-management/&#34; class=&#34;wikilink&#34; data-title=&#34;Kedro Dependency Management&#34; data-description=&#34;https://kedro.readthedocs.io/en/stable/04_project_dependencies.html?highlight=install&#34; data-date=&#34;2021-01-19&#34; data-preview=&#34;https://kedro.readthedocs.io/en/stable/04_project_dependencies.html?highlight=install&#34;&gt;Kedro Dependency Management&lt;/a&gt; (Modified: 2024-08-03 21:36:12)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/vim-notes/&#34; class=&#34;wikilink&#34; data-title=&#34;Vim Notes&#34; data-description=&#34;norcalli/neovim-plugin&#34; data-date=&#34;2018-02-01&#34; data-preview=&#34;norcalli/neovim-plugin&#34;&gt;Vim Notes&lt;/a&gt; (Modified: 2024-08-03 21:35:59)&lt;/li&gt;&#xA;&lt;li&gt;[[stories-10-10-2020-10-21-2020]] (Modified: 2024-08-03 21:34:59)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/new-machine-tpio/&#34; class=&#34;wikilink&#34; data-title=&#34;New Machine for developing Tests with TestProject.io&#34; data-description=&#34;Today I setup a new machine on Digital Ocean to use with TestProject.io, Here are my installation notes.&#34; data-date=&#34;2020-07-25&#34; data-preview=&#34;Today I setup a new machine on Digital Ocean to use with TestProject.io, Here are my installation notes.&#34;&gt;New Machine for developing Tests with TestProject.io&lt;/a&gt; (Modified: 2024-08-03 21:34:49)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/find-kedro-release/&#34; class=&#34;wikilink&#34; data-title=&#34;📢 Announcing find-kedro&#34; data-description=&#34;kedro is an amazing project that allows for super-fast prototyping of data pipelines, yet yielding production-ready pipelines. find-kedro enhances this experience by adding a pytest-like node discovery eliminating the need to bubble up pipelines through modules.&#34; data-date=&#34;2020-05-04&#34; data-preview=&#34;kedro is an amazing project that allows for super-fast prototyping of data pipelines, yet yielding production-ready pipelines. find-kedro enhances this experience by adding a pytest-like node...&#34;&gt;📢 Announcing find-kedro&lt;/a&gt; (Modified: 2024-08-03 21:34:35)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/serverless-things-to-investigate/&#34; class=&#34;wikilink&#34; data-title=&#34;Serverless things to investigate&#34; data-description=&#34;Free - only one step is free - can take rss to social&#34; data-date=&#34;2020-02-10&#34; data-preview=&#34;Free - only one step is free - can take rss to social&#34;&gt;Serverless things to investigate&lt;/a&gt; (Modified: 2024-08-03 21:34:24)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/cmd-exe-tips/&#34; class=&#34;wikilink&#34; data-title=&#34;cmd.exe tips&#34; data-description=&#34;cmd.exe tips&#34; data-date=&#34;2020-01-23&#34; data-preview=&#34;cmd.exe tips&#34;&gt;cmd.exe tips&lt;/a&gt; (Modified: 2024-08-03 21:34:12)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/last-n-git-files/&#34; class=&#34;wikilink&#34; data-title=&#34;List the latest files to change in a git repo&#34; data-date=&#34;2020-10-08&#34; data-preview=&#34;while read file; do echo $(git log --pretty=format:%ad -n 1 --date=raw -- $file) $file; done &amp;lt; &amp;lt;(git ls-tree -r --name-only HEAD | grep static/stories) | sort -r | head -n 3 | cut -d &amp;amp;#34; &amp;amp;#34; -f 3&#34;&gt;List the latest files to change in a git repo&lt;/a&gt; (Modified: 2024-08-03 21:33:57)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/maintianing-multiple-git-remotes/&#34; class=&#34;wikilink&#34; data-title=&#34;Maintianing multiple git remotes&#34; data-date=&#34;2020-05-07&#34; data-preview=&#34;git remote -v git remote add gitlab &amp;lt;url&amp;gt; git push gitlab main&#34;&gt;Maintianing multiple git remotes&lt;/a&gt; (Modified: 2024-08-03 21:33:49)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/fix-git-commit-author/&#34; class=&#34;wikilink&#34; data-title=&#34;Fix git commit author&#34; data-description=&#34;I was 20 commits into a hackoberfest PR when I suddenly realized they they all had my work email on them instead of my personal email 😱.&#34; data-date=&#34;2020-10-17&#34; data-preview=&#34;I was 20 commits into a hackoberfest PR when I suddenly realized they they all had my work email on them instead of my personal email 😱.&#34;&gt;Fix git commit author&lt;/a&gt; (Modified: 2024-08-03 21:33:41)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/reasons-to-kedro-notes/&#34; class=&#34;wikilink&#34; data-title=&#34;Reasons to Kedro&#34; data-description=&#34;collaboration - Sharable catalog - small nodes over monolithic notebooks - catalog - easily load anything without needing to run - No need to write...&#34; data-date=&#34;2020-10-31&#34; data-preview=&#34;collaboration - Sharable catalog - small nodes over monolithic notebooks - catalog - easily load anything without needing to run - No need to write...&#34;&gt;Reasons to Kedro&lt;/a&gt; (Modified: 2024-08-03 21:33:32)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/out-of-space/&#34; class=&#34;wikilink&#34; data-title=&#34;Out of Space&#34; data-description=&#34;Out of Space! How to remove 65 conda environments in one command.&#34; data-date=&#34;2020-02-01&#34; data-preview=&#34;Out of Space! How to remove 65 conda environments in one command.&#34;&gt;Out of Space&lt;/a&gt; (Modified: 2024-08-03 21:33:10)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/adding-google-fonts-to-a-gatsbyjs-site/&#34; class=&#34;wikilink&#34; data-title=&#34;Adding google fonts to a gatsbyjs site&#34; data-description=&#34;https://stackoverflow.com/questions/47488440/how-do-i-add-google-fonts-to-a-gatsby-site&#34; data-date=&#34;2020-05-17&#34; data-preview=&#34;https://stackoverflow.com/questions/47488440/how-do-i-add-google-fonts-to-a-gatsby-site&#34;&gt;Adding google fonts to a gatsbyjs site&lt;/a&gt; (Modified: 2024-08-03 21:32:57)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/strip-trailing-whitespace/&#34; class=&#34;wikilink&#34; data-title=&#34;Strip Trailing Whitespace from Git projects&#34; data-description=&#34;A common linting error thrown by various linters is for trailing whitespace. I most often use flake8. I generally have pre-commit hooks setup to strip this,...&#34; data-date=&#34;2020-09-30&#34; data-preview=&#34;A common linting error thrown by various linters is for trailing whitespace. I most often use flake8. I generally have pre-commit hooks setup to strip this,...&#34;&gt;Strip Trailing Whitespace from Git projects&lt;/a&gt; (Modified: 2024-08-03 21:32:44)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/happy/&#34; class=&#34;wikilink&#34; data-title=&#34;Do More of What Brings You Joy&#34; data-description=&#34;happiness in the workplace&#34; data-date=&#34;2019-01-01&#34; data-preview=&#34;happiness in the workplace&#34;&gt;Do More of What Brings You Joy&lt;/a&gt; (Modified: 2024-08-03 21:31:48)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/brainstorming-kedro-hooks/&#34; class=&#34;wikilink&#34; data-title=&#34;Brainstorming Kedro Hooks&#34; data-description=&#34;This post is a 🧠 branstorming work in progress. I will likely use it as a storage location/brain dump of hook ideas.&#34; data-date=&#34;2020-05-22&#34; data-preview=&#34;This post is a 🧠 branstorming work in progress. I will likely use it as a storage location/brain dump of hook ideas.&#34;&gt;Brainstorming Kedro Hooks&lt;/a&gt; (Modified: 2024-08-03 21:31:37)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/kedro-preflight/&#34; class=&#34;wikilink&#34; data-title=&#34;📝 Kedro Preflight Notes&#34; data-description=&#34;run checks before running the pipeline&#34; data-date=&#34;2020-05-09&#34; data-preview=&#34;run checks before running the pipeline&#34;&gt;📝 Kedro Preflight Notes&lt;/a&gt; (Modified: 2024-08-03 21:31:06)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/should-i-switch-to-zeit-now/&#34; class=&#34;wikilink&#34; data-title=&#34;Should I switch to Zeit Now&#34; data-description=&#34;Should I switch to Zeit Now. Netlify build times are starting to creep in.&#34; data-date=&#34;2020-02-06&#34; data-preview=&#34;Should I switch to Zeit Now. Netlify build times are starting to creep in.&#34;&gt;Should I switch to Zeit Now&lt;/a&gt; (Modified: 2024-08-03 21:30:50)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/kedro-catalog/&#34; class=&#34;wikilink&#34; data-title=&#34;Kedro Catalog&#34; data-description=&#34;I am exploring a kedro catalog meta data hook&#34; data-date=&#34;2020-07-24&#34; data-preview=&#34;I am exploring a kedro catalog meta data hook&#34;&gt;Kedro Catalog&lt;/a&gt; (Modified: 2024-08-03 21:30:35)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/python-deepwatch/&#34; class=&#34;wikilink&#34; data-title=&#34;python-deepwatch&#34; data-description=&#34;Is it possible to deep watch a single python function for changes?&#34; data-date=&#34;2020-04-27&#34; data-preview=&#34;Is it possible to deep watch a single python function for changes?&#34;&gt;python-deepwatch&lt;/a&gt; (Modified: 2024-08-03 21:30:20)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/career-day-wapello-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;Career Day Wapello 2021&#34; data-description=&#34;_&#34; data-date=&#34;2021-03-25&#34; data-preview=&#34;_&#34;&gt;Career Day Wapello 2021&lt;/a&gt; (Modified: 2024-08-01 15:44:43)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/obsidian-image-converter/&#34; class=&#34;wikilink&#34; data-title=&#34;Obsidian Image Converter&#34; data-description=&#34;I&amp;#39;m giving obsidian a go as an editor for my blog and one of the main things I want to fix in my workflow is the ability to quickly drop in images. on first...&#34; data-date=&#34;2024-07-30&#34; data-preview=&#34;I&amp;#39;m giving obsidian a go as an editor for my blog and one of the main things I want to fix in my workflow is the ability to quickly drop in images. on first...&#34;&gt;Obsidian Image Converter&lt;/a&gt; (Modified: 2024-08-01 15:40:11)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/obsidian-using-templater-like-copier/&#34; class=&#34;wikilink&#34; data-title=&#34;Obsidian Using Templater Like Copier&#34; data-description=&#34;I&amp;#39;ve long used copier to create all of my posts for my blog, and it works really well for my workflow. I think of a title, call a template, and give it a...&#34; data-date=&#34;2024-07-31&#34; data-preview=&#34;I&amp;#39;ve long used copier to create all of my posts for my blog, and it works really well for my workflow. I think of a title, call a template, and give it a...&#34;&gt;Obsidian Using Templater Like Copier&lt;/a&gt; (Modified: 2024-08-01 15:39:49)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-199/&#34; class=&#34;wikilink&#34;&gt;Gratitude 199&lt;/a&gt; (Modified: 2024-08-01 12:47:18)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude/&#34; class=&#34;wikilink&#34;&gt;gratitude&lt;/a&gt; (Modified: 2024-08-01 11:26:34)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-97/&#34; class=&#34;wikilink&#34;&gt;Gratitude 096&lt;/a&gt; (Modified: 2024-08-01 10:17:01)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-147/&#34; class=&#34;wikilink&#34;&gt;Gratitude 147&lt;/a&gt; (Modified: 2024-08-01 10:16:15)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-007/&#34; class=&#34;wikilink&#34;&gt;Gratitude 007&lt;/a&gt; (Modified: 2024-08-01 10:15:59)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/good-morning/&#34; class=&#34;wikilink&#34;&gt;Good Morning&lt;/a&gt; (Modified: 2024-08-01 10:15:48)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-005/&#34; class=&#34;wikilink&#34;&gt;Gratitude 005&lt;/a&gt; (Modified: 2024-08-01 10:15:33)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-003/&#34; class=&#34;wikilink&#34;&gt;Gratitude 003&lt;/a&gt; (Modified: 2024-08-01 10:15:11)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-004/&#34; class=&#34;wikilink&#34;&gt;Gratitude 004&lt;/a&gt; (Modified: 2024-08-01 10:14:59)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-001/&#34; class=&#34;wikilink&#34;&gt;Gratitude 001&lt;/a&gt; (Modified: 2024-08-01 10:14:50)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-008/&#34; class=&#34;wikilink&#34;&gt;Gratitude 008&lt;/a&gt; (Modified: 2024-08-01 10:14:38)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-002/&#34; class=&#34;wikilink&#34;&gt;Gratitude 002&lt;/a&gt; (Modified: 2024-08-01 10:14:26)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-006/&#34; class=&#34;wikilink&#34;&gt;Gratitude 006&lt;/a&gt; (Modified: 2024-08-01 10:14:09)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-093/&#34; class=&#34;wikilink&#34;&gt;Gratitude 093&lt;/a&gt; (Modified: 2024-08-01 10:12:37)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-081/&#34; class=&#34;wikilink&#34;&gt;Gratitude 081&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-082/&#34; class=&#34;wikilink&#34;&gt;Gratitude 082&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-083/&#34; class=&#34;wikilink&#34;&gt;Gratitude 083&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-084/&#34; class=&#34;wikilink&#34;&gt;Gratitude 084&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-085/&#34; class=&#34;wikilink&#34;&gt;Gratitude 085&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-086/&#34; class=&#34;wikilink&#34;&gt;Gratitude 086&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-087/&#34; class=&#34;wikilink&#34;&gt;Gratitude 087&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-088/&#34; class=&#34;wikilink&#34;&gt;Gratitude 088&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-089/&#34; class=&#34;wikilink&#34;&gt;Gratitude 089&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-090/&#34; class=&#34;wikilink&#34;&gt;Gratitude 090&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-103/&#34; class=&#34;wikilink&#34;&gt;Gratitude 103&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-104/&#34; class=&#34;wikilink&#34;&gt;Gratitude 104&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/the-good-old-days/&#34; class=&#34;wikilink&#34;&gt;The Good Old Days&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-050/&#34; class=&#34;wikilink&#34;&gt;Gratitude 049&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-051/&#34; class=&#34;wikilink&#34;&gt;Gratitude 051&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-052/&#34; class=&#34;wikilink&#34;&gt;Gratitude 052&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-053/&#34; class=&#34;wikilink&#34;&gt;Gratitude 053&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-054/&#34; class=&#34;wikilink&#34;&gt;Gratitude 054&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-055/&#34; class=&#34;wikilink&#34;&gt;Gratitude 055&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-056/&#34; class=&#34;wikilink&#34;&gt;Gratitude 056&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-057/&#34; class=&#34;wikilink&#34;&gt;Gratitude 057&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-058/&#34; class=&#34;wikilink&#34;&gt;Gratitude 058&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-059/&#34; class=&#34;wikilink&#34;&gt;Gratitude 059&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-060/&#34; class=&#34;wikilink&#34;&gt;Gratitude 060&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-061/&#34; class=&#34;wikilink&#34;&gt;Gratitude 061&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-062/&#34; class=&#34;wikilink&#34;&gt;Gratitude 062&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-063/&#34; class=&#34;wikilink&#34;&gt;Gratitude 063&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-064/&#34; class=&#34;wikilink&#34;&gt;Gratitude 64&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-065/&#34; class=&#34;wikilink&#34;&gt;Gratitude 065&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-066/&#34; class=&#34;wikilink&#34;&gt;Gratitude 066&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-067/&#34; class=&#34;wikilink&#34;&gt;Gratitude 067&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-068/&#34; class=&#34;wikilink&#34;&gt;Gratitude 068&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-069/&#34; class=&#34;wikilink&#34;&gt;Gratitude 069&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-070/&#34; class=&#34;wikilink&#34;&gt;Gratitude 070&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-071/&#34; class=&#34;wikilink&#34;&gt;Gratitude 071&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-072/&#34; class=&#34;wikilink&#34;&gt;Gratitude 072&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-073/&#34; class=&#34;wikilink&#34;&gt;gratitude 073&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-074/&#34; class=&#34;wikilink&#34;&gt;Gratitude 074&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-075/&#34; class=&#34;wikilink&#34;&gt;Gratitude 075&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-076/&#34; class=&#34;wikilink&#34;&gt;Gratitude 076&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-077/&#34; class=&#34;wikilink&#34;&gt;Gratitude 077&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-078/&#34; class=&#34;wikilink&#34;&gt;Gratitude 078&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-079/&#34; class=&#34;wikilink&#34;&gt;Gratitude 079&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-080/&#34; class=&#34;wikilink&#34;&gt;Gratitude 080&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-023/&#34; class=&#34;wikilink&#34;&gt;Gratitude 023&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-024/&#34; class=&#34;wikilink&#34;&gt;Gratitude 024&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-025/&#34; class=&#34;wikilink&#34;&gt;Gratitude 025&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-026/&#34; class=&#34;wikilink&#34;&gt;Gratitude 026&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-027/&#34; class=&#34;wikilink&#34;&gt;Gratitude 027&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-028/&#34; class=&#34;wikilink&#34;&gt;Gratitude 028&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-029/&#34; class=&#34;wikilink&#34;&gt;Gratitude 029&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-030/&#34; class=&#34;wikilink&#34;&gt;Gratitude 030&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-031/&#34; class=&#34;wikilink&#34;&gt;Gratitude 031&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-032/&#34; class=&#34;wikilink&#34;&gt;Gratitude 032&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-033/&#34; class=&#34;wikilink&#34;&gt;Gratitude 033&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-034/&#34; class=&#34;wikilink&#34;&gt;Gratitude 034&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-035/&#34; class=&#34;wikilink&#34;&gt;Gratitude 035&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-036/&#34; class=&#34;wikilink&#34;&gt;Gratitude 036&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-037/&#34; class=&#34;wikilink&#34;&gt;Gratitude 037&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-039/&#34; class=&#34;wikilink&#34;&gt;Gratitude 039&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-040/&#34; class=&#34;wikilink&#34;&gt;Gratitude 0040&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-041/&#34; class=&#34;wikilink&#34;&gt;Gratitude 0040&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-042/&#34; class=&#34;wikilink&#34;&gt;Gratitude 042&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-043/&#34; class=&#34;wikilink&#34;&gt;Gratitude 043&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-044/&#34; class=&#34;wikilink&#34;&gt;Gratitude 044&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-045/&#34; class=&#34;wikilink&#34;&gt;Gratitude 045&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-046/&#34; class=&#34;wikilink&#34;&gt;Gratitude 046&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-047/&#34; class=&#34;wikilink&#34;&gt;Gratitude 047&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-048/&#34; class=&#34;wikilink&#34;&gt;Gratitude 048&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-049/&#34; class=&#34;wikilink&#34;&gt;Gratitude 049&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-190/&#34; class=&#34;wikilink&#34;&gt;Gratitude 190&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-191/&#34; class=&#34;wikilink&#34;&gt;Gratitude 191&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-192/&#34; class=&#34;wikilink&#34;&gt;Gratitude 192&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-193/&#34; class=&#34;wikilink&#34;&gt;Gratitude 193&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-194/&#34; class=&#34;wikilink&#34;&gt;Gratitude 194&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-195/&#34; class=&#34;wikilink&#34;&gt;Gratitude 195&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-196/&#34; class=&#34;wikilink&#34;&gt;Gratitude 196&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-197/&#34; class=&#34;wikilink&#34;&gt;Gratitude 197&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-198/&#34; class=&#34;wikilink&#34;&gt;Gratitude 198&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-91/&#34; class=&#34;wikilink&#34;&gt;Gratitude 91&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-98/&#34; class=&#34;wikilink&#34;&gt;Gratitude 098&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-99/&#34; class=&#34;wikilink&#34;&gt;Gratitude 099&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-009/&#34; class=&#34;wikilink&#34;&gt;Gratitude 009&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-010/&#34; class=&#34;wikilink&#34;&gt;Gratitude 010&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-011/&#34; class=&#34;wikilink&#34;&gt;Gratitude 011&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-012/&#34; class=&#34;wikilink&#34;&gt;Gratitude 012&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-013/&#34; class=&#34;wikilink&#34;&gt;Gratitude 013&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-014/&#34; class=&#34;wikilink&#34;&gt;Gratitude 014&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-015/&#34; class=&#34;wikilink&#34;&gt;Gratitude 015&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-016/&#34; class=&#34;wikilink&#34;&gt;Gratitude 016&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-017/&#34; class=&#34;wikilink&#34;&gt;Gratitude 017&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-018/&#34; class=&#34;wikilink&#34;&gt;Gratitude 018&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-019/&#34; class=&#34;wikilink&#34;&gt;Gratitude 019&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-020/&#34; class=&#34;wikilink&#34;&gt;Gratitude 020&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-021/&#34; class=&#34;wikilink&#34;&gt;Gratitude 022&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-022/&#34; class=&#34;wikilink&#34;&gt;Gratitude 022&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-160/&#34; class=&#34;wikilink&#34;&gt;Gratitude 160&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-161/&#34; class=&#34;wikilink&#34;&gt;Gratitude 161&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-162/&#34; class=&#34;wikilink&#34;&gt;Gratitude 162&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-163/&#34; class=&#34;wikilink&#34;&gt;Gratitude 163&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-164/&#34; class=&#34;wikilink&#34;&gt;Gratitude 164&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-165/&#34; class=&#34;wikilink&#34;&gt;Gratitude 165&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-166/&#34; class=&#34;wikilink&#34;&gt;Gratitude 166&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-167/&#34; class=&#34;wikilink&#34;&gt;Gratitude 167&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-168/&#34; class=&#34;wikilink&#34;&gt;Gratitude 168&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-169/&#34; class=&#34;wikilink&#34;&gt;Gratitude 169&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-170/&#34; class=&#34;wikilink&#34;&gt;Gratitude 170&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-171/&#34; class=&#34;wikilink&#34;&gt;Gratitude 171&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-172/&#34; class=&#34;wikilink&#34;&gt;Gratitude 172&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-173/&#34; class=&#34;wikilink&#34;&gt;Gratitude 173&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-174/&#34; class=&#34;wikilink&#34;&gt;Gratitude 174&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-175/&#34; class=&#34;wikilink&#34;&gt;Gratitude 175&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-176/&#34; class=&#34;wikilink&#34;&gt;Gratitude 176&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-177/&#34; class=&#34;wikilink&#34;&gt;Gratitude 177&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-178/&#34; class=&#34;wikilink&#34;&gt;Gratitude 178&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-179/&#34; class=&#34;wikilink&#34;&gt;Gratitude 178&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-180/&#34; class=&#34;wikilink&#34;&gt;Gratitude 180&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-181/&#34; class=&#34;wikilink&#34;&gt;Gratitude 181&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-182/&#34; class=&#34;wikilink&#34;&gt;Gratitude 182&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-183/&#34; class=&#34;wikilink&#34;&gt;Gratitude 183&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-184/&#34; class=&#34;wikilink&#34;&gt;Gratitude 184&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-185/&#34; class=&#34;wikilink&#34;&gt;Gratitude 185&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-186/&#34; class=&#34;wikilink&#34;&gt;Gratitude 186&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-187/&#34; class=&#34;wikilink&#34;&gt;Gratitude 187&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-188/&#34; class=&#34;wikilink&#34;&gt;Gratitude 188&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-189/&#34; class=&#34;wikilink&#34;&gt;Gratitude 189&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-127/&#34; class=&#34;wikilink&#34;&gt;Gratitude 127&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-128/&#34; class=&#34;wikilink&#34;&gt;Gratitude 128&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-129/&#34; class=&#34;wikilink&#34;&gt;Gratitude 129&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-130/&#34; class=&#34;wikilink&#34;&gt;Gratitude 130&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-131/&#34; class=&#34;wikilink&#34;&gt;Gratitude 131&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-132/&#34; class=&#34;wikilink&#34;&gt;Gratitude 132&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-133/&#34; class=&#34;wikilink&#34;&gt;Gratitude 133&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-134/&#34; class=&#34;wikilink&#34;&gt;Gratitude 134&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-135/&#34; class=&#34;wikilink&#34;&gt;Gratitude 135&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-136/&#34; class=&#34;wikilink&#34;&gt;Gratitude 136&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-137/&#34; class=&#34;wikilink&#34;&gt;Gratitude 137&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-138/&#34; class=&#34;wikilink&#34;&gt;Gratitude 138&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-139/&#34; class=&#34;wikilink&#34;&gt;Gratitude 139&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-140/&#34; class=&#34;wikilink&#34;&gt;Gratitude 140&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-141/&#34; class=&#34;wikilink&#34;&gt;Gratitude 141&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-142/&#34; class=&#34;wikilink&#34;&gt;Gratitude 142&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-143/&#34; class=&#34;wikilink&#34;&gt;Gratitude 143&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-144/&#34; class=&#34;wikilink&#34;&gt;Gratitude 144&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-146/&#34; class=&#34;wikilink&#34;&gt;Gratitude 146&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-148/&#34; class=&#34;wikilink&#34;&gt;Gratitude 148&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-149/&#34; class=&#34;wikilink&#34;&gt;Gratitude 149&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-150/&#34; class=&#34;wikilink&#34;&gt;Gratitude 150&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-151/&#34; class=&#34;wikilink&#34;&gt;Gratitude 151&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-152/&#34; class=&#34;wikilink&#34;&gt;Gratitude 152&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-153/&#34; class=&#34;wikilink&#34;&gt;Gratitude 153&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-154/&#34; class=&#34;wikilink&#34;&gt;Gratitude 154&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-155/&#34; class=&#34;wikilink&#34;&gt;Gratitude 155&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-156/&#34; class=&#34;wikilink&#34;&gt;Gratitude 156&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-157/&#34; class=&#34;wikilink&#34;&gt;Gratitude 157&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-158/&#34; class=&#34;wikilink&#34;&gt;Gratitude 158&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-159/&#34; class=&#34;wikilink&#34;&gt;Gratitude 159&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-095/&#34; class=&#34;wikilink&#34;&gt;Gratitude 095&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-096/&#34; class=&#34;wikilink&#34;&gt;Gratitude 097&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-100/&#34; class=&#34;wikilink&#34;&gt;Gratitude 100&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-101/&#34; class=&#34;wikilink&#34;&gt;Gratitude 101&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-102/&#34; class=&#34;wikilink&#34;&gt;Gratitude 102&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-105/&#34; class=&#34;wikilink&#34;&gt;Gratitude 105&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-106/&#34; class=&#34;wikilink&#34;&gt;Gratitude 106&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-107/&#34; class=&#34;wikilink&#34;&gt;Gratitude 107&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-108/&#34; class=&#34;wikilink&#34;&gt;Gratitude 108&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-109/&#34; class=&#34;wikilink&#34;&gt;Gratitude 109&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-110/&#34; class=&#34;wikilink&#34;&gt;Gratitude 110&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-111/&#34; class=&#34;wikilink&#34;&gt;Gratitude 111&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-112/&#34; class=&#34;wikilink&#34;&gt;Gratitude 112&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-113/&#34; class=&#34;wikilink&#34;&gt;Gratitude 113&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-114/&#34; class=&#34;wikilink&#34;&gt;Gratitude 114&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-115/&#34; class=&#34;wikilink&#34;&gt;Gratitude 115&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-116/&#34; class=&#34;wikilink&#34;&gt;Gratitude 116&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-117/&#34; class=&#34;wikilink&#34;&gt;Gratitude 117&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-118/&#34; class=&#34;wikilink&#34;&gt;Gratitude 118&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-119/&#34; class=&#34;wikilink&#34;&gt;Gratitude 119&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-120/&#34; class=&#34;wikilink&#34;&gt;Gratitude 120&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-121/&#34; class=&#34;wikilink&#34;&gt;Gratitude 121&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-122/&#34; class=&#34;wikilink&#34;&gt;Gratitude 122&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-123/&#34; class=&#34;wikilink&#34;&gt;Gratitude 123&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-124/&#34; class=&#34;wikilink&#34;&gt;Gratitude 124&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-125/&#34; class=&#34;wikilink&#34;&gt;Gratitude 125&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-126/&#34; class=&#34;wikilink&#34;&gt;Gratitude 126&lt;/a&gt; (Modified: 2024-08-01 07:16:40)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/gratitude-093-1/&#34; class=&#34;wikilink&#34;&gt;Gratitude 094&lt;/a&gt; (Modified: 2024-07-31 18:27:43)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/markata-supports-jinja-plugins-0-5-0-dev2/&#34; class=&#34;wikilink&#34; data-title=&#34;Markata Supports Jinja Plugins 0.5.0.dev2&#34; data-description=&#34;Markata now allows you to create jinja extensions that will be loaded right in with nothing more than a .&#34; data-date=&#34;2022-10-11&#34; data-preview=&#34;Markata now allows you to create jinja extensions that will be loaded right in with nothing more than a .&#34;&gt;Markata Supports Jinja Plugins 0.5.0.dev2&lt;/a&gt; (Modified: 2024-07-31 13:41:57)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/markata-telescope-picker/&#34; class=&#34;wikilink&#34; data-title=&#34;Markata Filters as Telescope Pickers in Neovim&#34; data-description=&#34;I often pop into my blog from neovim with the intent to look at just a single series of posts, , , or just see todays posts. Markata has a great way of...&#34; data-date=&#34;2022-01-23&#34; data-preview=&#34;I often pop into my blog from neovim with the intent to look at just a single series of posts, , , or just see todays posts. Markata has a great way of...&#34;&gt;Markata Filters as Telescope Pickers in Neovim&lt;/a&gt; (Modified: 2024-07-31 13:41:57)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/pyohio-cfp/&#34; class=&#34;wikilink&#34; data-title=&#34;PyOhio CFP&amp;#39;s&#34; data-description=&#34;Here are some CFP&amp;#39;s that I used for PyOhio 2022.&#34; data-date=&#34;2022-04-12&#34; data-preview=&#34;Here are some CFP&amp;#39;s that I used for PyOhio 2022.&#34;&gt;PyOhio CFP&amp;#39;s&lt;/a&gt; (Modified: 2024-07-31 13:41:57)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/reader/&#34; class=&#34;wikilink&#34; data-title=&#34;Reader&#34; data-description=&#34;Latest posts from blogs I follow&#34; data-preview=&#34;Latest posts from blogs I follow&#34;&gt;Reader&lt;/a&gt; (Modified: 2024-07-31 13:41:57)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/ubuntu/&#34; class=&#34;wikilink&#34; data-title=&#34;Copy and Paste on Linux&#34; data-description=&#34;These are the notes that I used as I set up my first ever ubuntu desktop.&#34; data-date=&#34;2021-06-25&#34; data-preview=&#34;These are the notes that I used as I set up my first ever ubuntu desktop.&#34;&gt;Copy and Paste on Linux&lt;/a&gt; (Modified: 2024-07-31 13:41:57)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/uses/&#34; class=&#34;wikilink&#34; data-title=&#34;Uses&#34; data-description=&#34;This is a listing of all the things that I use on a daily basis to build data pipelines, lead my team, and build this website.&#34; data-date=&#34;2021-11-20&#34; data-preview=&#34;This is a listing of all the things that I use on a daily basis to build data pipelines, lead my team, and build this website.&#34;&gt;Uses&lt;/a&gt; (Modified: 2024-07-31 13:41:57)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/upcoming-streams/&#34; class=&#34;wikilink&#34; data-title=&#34;Upcoming Stream&#34; data-description=&#34;!!! Caution I&amp;#39;m no longer streaming As much as I would really love to make streaming work, its really hard for my family situation to make large blocks of...&#34; data-date=&#34;2021-06-08&#34; data-preview=&#34;!!! Caution I&amp;#39;m no longer streaming As much as I would really love to make streaming work, its really hard for my family situation to make large blocks of...&#34;&gt;Upcoming Stream&lt;/a&gt; (Modified: 2024-07-31 13:41:57)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/from-markdown-to-blog-with-markata/&#34; class=&#34;wikilink&#34; data-title=&#34;From Markdown to Blog with Markata | lightning talk | python web conf 2022&#34; data-description=&#34;Markata is a great python framework that allows you to go from markdown to a full website very quickly. You can get up and running with nothing more than...&#34; data-date=&#34;2022-08-31&#34; data-preview=&#34;Markata is a great python framework that allows you to go from markdown to a full website very quickly. You can get up and running with nothing more than...&#34;&gt;From Markdown to Blog with Markata | lightning talk | python web conf 2022&lt;/a&gt; (Modified: 2024-07-31 13:41:57)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/lookatme-slides/&#34; class=&#34;wikilink&#34; data-title=&#34;How I Present Markdown Slides from the Terminal&#34; data-description=&#34;I love the freedom of writing in markdown. It allows me to write content from the comfort of my editor with very little focus on page style. It turns out...&#34; data-date=&#34;2022-03-21&#34; data-preview=&#34;I love the freedom of writing in markdown. It allows me to write content from the comfort of my editor with very little focus on page style. It turns out...&#34;&gt;How I Present Markdown Slides from the Terminal&lt;/a&gt; (Modified: 2024-07-31 13:41:57)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/markata-0-3-0/&#34; class=&#34;wikilink&#34; data-title=&#34;markata 0.3.0 is 15-20% faster&#34; data-date=&#34;2022-08-21&#34; data-preview=&#34;a sprinter edging out his opponent by Dall-e It’s about time to release Markata 0.3.0. I’ve had 8 pre-releases since the last release, but more importantly it has about 3 months of updates. Many of...&#34;&gt;markata 0.3.0 is 15-20% faster&lt;/a&gt; (Modified: 2024-07-31 13:41:57)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/markata-configure-head/&#34; class=&#34;wikilink&#34; data-title=&#34;markata extend &amp;lt;head&amp;gt; in configuration&#34; data-date=&#34;2022-09-11&#34; data-preview=&#34;A long needed feature of markata has been the ability to really configure out templates with configuration rather. It’s been long that you needed that if you really want to change the style, meta...&#34;&gt;markata extend &amp;lt;head&amp;gt; in configuration&lt;/a&gt; (Modified: 2024-07-31 13:41:57)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/markata-github-pages/&#34; class=&#34;wikilink&#34; data-title=&#34;Markata GitHub Pages&#34; data-description=&#34;hugo puts it in the base url https://gohugo.io/getting-started/configuration/#baseurl * mkdocs uses a special cli build command...&#34; data-date=&#34;2022-10-19&#34; data-preview=&#34;hugo puts it in the base url https://gohugo.io/getting-started/configuration/#baseurl * mkdocs uses a special cli build command...&#34;&gt;Markata GitHub Pages&lt;/a&gt; (Modified: 2024-07-31 13:41:57)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/markata-now-uses-hatch/&#34; class=&#34;wikilink&#34; data-title=&#34;Markata now uses hatch&#34; data-description=&#34;Markata now uses hatch as its build backend, and version bumping tool. , and are completely gone.&#34; data-date=&#34;2022-10-08&#34; data-preview=&#34;Markata now uses hatch as its build backend, and version bumping tool. , and are completely gone.&#34;&gt;Markata now uses hatch&lt;/a&gt; (Modified: 2024-07-31 13:41:57)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/htmx-on-my-blog/&#34; class=&#34;wikilink&#34; data-title=&#34;I&amp;#39;ve added htmx to my blog&#34; data-description=&#34;I&amp;#39;ve added htmx to my blog. It&amp;#39;s extra bloatware that I long avoided, but it&amp;#39;s so damn convenient.&#34; data-date=&#34;2024-06-15&#34; data-preview=&#34;I&amp;#39;ve added htmx to my blog. It&amp;#39;s extra bloatware that I long avoided, but it&amp;#39;s so damn convenient.&#34;&gt;I&amp;#39;ve added htmx to my blog&lt;/a&gt; (Modified: 2024-07-31 13:41:57)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/keyboard-driven-vscode/&#34; class=&#34;wikilink&#34; data-title=&#34;Keyboard Driven VSCode&#34; data-description=&#34;Reimagining my tmux configuration inside of vscode.&#34; data-date=&#34;2019-07-07&#34; data-preview=&#34;Reimagining my tmux configuration inside of vscode.&#34;&gt;Keyboard Driven VSCode&lt;/a&gt; (Modified: 2024-07-31 13:41:57)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/markata-todoui-live-replay-4-6-2022/&#34; class=&#34;wikilink&#34; data-title=&#34;LIVE-REPLAY - Python dev | Markata todoui | 4/6/2022&#34; data-description=&#34;https://youtu.be/-42A5210HYo&#34; data-date=&#34;2022-05-12&#34; data-preview=&#34;https://youtu.be/-42A5210HYo&#34;&gt;LIVE-REPLAY - Python dev | Markata todoui | 4/6/2022&lt;/a&gt; (Modified: 2024-07-31 13:41:57)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/markata/&#34; class=&#34;wikilink&#34; data-title=&#34;markata&#34; data-description=&#34;This post is a work in progress.&#34; data-date=&#34;2024-05-30&#34; data-preview=&#34;This post is a work in progress.&#34;&gt;markata&lt;/a&gt; (Modified: 2024-07-31 13:41:57)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/packages-i-maintain/&#34; class=&#34;wikilink&#34; data-title=&#34;Packages I Maintain&#34; data-description=&#34;I open sourced the static site framework that I use to build my-blog among other side projects. It&amp;#39;s a plugins all the way down static site generator, that...&#34; data-date=&#34;2022-08-30&#34; data-preview=&#34;I open sourced the static site framework that I use to build my-blog among other side projects. It&amp;#39;s a plugins all the way down static site generator, that...&#34;&gt;Packages I Maintain&lt;/a&gt; (Modified: 2024-07-31 13:41:57)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/pipx-examples/&#34; class=&#34;wikilink&#34; data-title=&#34;pipx examples&#34; data-date=&#34;2022-01-07&#34; data-preview=&#34;count lines of code # pipx run pygount markata pipx run pygount markata --format=summary pipx run pygount markata --suffix=cfg,py,yml&#34;&gt;pipx examples&lt;/a&gt; (Modified: 2024-07-31 13:41:57)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Obsidian Image Converter</title>
    <id>https://waylonwalker.com/obsidian-image-converter/</id>
    <updated>2024-07-30T21:09:35Z</updated>
    <published>2024-07-30T21:09:35Z</published>
    <link href="https://waylonwalker.com/obsidian-image-converter/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m giving obsidian a go as an editor for my blog and one of the main things I want to fix in my workflow is the ability to quickly drop in images. on first...</summary>
    <content type="html">&lt;p&gt;I’m giving obsidian a go as an editor for my blog and one of the main things I&#xA;want to fix in my workflow is the ability to quickly drop in images.  on first&#xA;look through the community plugins I found Image Converter.  I set it up to&#xA;convert to webp and drop them in a &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; submodule.  I may make it something&#xA;other than a git repo in the future, but I’ve learned that adding images to my&#xA;blog repo quickly makes it heavy and hard to clone on other machines.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/626d85b1-5588-45c4-a4f4-c372dc7c8ff3.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/626d85b1-5588-45c4-a4f4-c372dc7c8ff3.webp&#34; alt=&#34;obsidian-image-converter-20240731211310793.webp&#34;/ data-glightbox=&#34;description: obsidian-image-converter-20240731211310793.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Once the images are there they are pushed and deployed as their own site to&#xA;cloudflare pages.  I made a quick edit to my &lt;a href=&#34;/sick-wikilink-hover/&#34; class=&#34;wikilink&#34; data-title=&#34;sick wikilink hover&#34; data-description=&#34;Today I set up some sick wikilink hover effects using tailwind see a-case-for-tailwindcss. When you hover over them they show an image preview of the link...&#34; data-date=&#34;2024-05-30&#34; data-preview=&#34;Today I set up some sick wikilink hover effects using tailwind see a-case-for-tailwindcss. When you hover over them they show an image preview of the link...&#34;&gt;sick wikilink hover&lt;/a&gt; plugin for&#xA;my blog.  if it sees a wikilink ending in webp, convert the domain over to&#xA;obsidian-assets.waylonwalker.com, and clean up the remaining &lt;code&gt;&amp;#34;!  &amp;#34;&lt;/code&gt; that the&#xA;python md-it library leaves behind.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;after first try I needed to increase the width from 600 to 1400, the image in this post was unreadable.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;This is part of me getting set up and &lt;a href=&#34;/trying-obsidian/&#34; class=&#34;wikilink&#34; data-title=&#34;Trying Obsidian&#34; data-description=&#34;I am giving obsidian a try, this is a test post to learn the flow. Something that has been really hard for me for a long time is images, I don&amp;#39;t include a...&#34; data-date=&#34;2024-07-31&#34; data-preview=&#34;I am giving obsidian a try, this is a test post to learn the flow. Something that has been really hard for me for a long time is images, I don&amp;#39;t include a...&#34;&gt;Trying Obsidian&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>convert mp4 for twitter with ffmpeg</title>
    <id>https://waylonwalker.com/convert-mp4-for-twitter-with-ffmpeg/</id>
    <updated>2024-07-25T12:51:29Z</updated>
    <published>2024-07-25T12:51:29Z</published>
    <link href="https://waylonwalker.com/convert-mp4-for-twitter-with-ffmpeg/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve had a couple of uploads to twitter fail recently and has been a pain. I tried some online converters for convenience, but none of them worked. I reached...</summary>
    <content type="html">&lt;p&gt;I’ve had a couple of uploads to twitter fail recently and has been a pain.  I&#xA;tried some online converters for convenience, but none of them worked.  I&#xA;reached out to chatgpt and found succeess with this ffmpeg command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ffmpeg -i input.mp4 &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  -vf &lt;span class=&#34;s2&#34;&gt;&amp;#34;scale=trunc(oh*a/2)*2:min(720\,trunc(ih*a/2)*2)&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  -c:v libx264 -profile:v high -level:v 4.1 &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  -b:v 3500k -maxrate 3500k -bufsize 7000k &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  -pix_fmt yuv420p &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  -c:a aac -b:a 128k -ar &lt;span class=&#34;m&#34;&gt;44100&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  -movflags +faststart &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  output.mp4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ BurntSushi jiff</title>
    <id>https://waylonwalker.com/burntsushi-jiff/</id>
    <updated>2024-07-24T03:15:31Z</updated>
    <published>2024-07-24T03:15:31Z</published>
    <link href="https://waylonwalker.com/burntsushi-jiff/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? jiff by BurntSushi.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/BurntSushi/jiff&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jiff&lt;/a&gt; by &lt;a href=&#34;https://github.com/BurntSushi&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;BurntSushi&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A datetime library for Rust that encourages you to jump into the pit of success.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ asg017 sqlite-jiff</title>
    <id>https://waylonwalker.com/asg017-sqlite-jiff/</id>
    <updated>2024-07-24T03:15:27Z</updated>
    <published>2024-07-24T03:15:27Z</published>
    <link href="https://waylonwalker.com/asg017-sqlite-jiff/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about sqlite-jiff, an amazing project by asg017. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/asg017/sqlite-jiff&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sqlite-jiff&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/asg017&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;asg017&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Infisical infisical</title>
    <id>https://waylonwalker.com/infisical-infisical/</id>
    <updated>2024-07-21T15:01:16Z</updated>
    <published>2024-07-21T15:01:16Z</published>
    <link href="https://waylonwalker.com/infisical-infisical/" rel="alternate" type="text/html"></link>
    <summary type="text">I like Infisical&#39;s project infisical.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/Infisical&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Infisical’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/Infisical/infisical&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;infisical&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;♾ Infisical is the open-source secret management platform: Sync secrets across your team/infrastructure, prevent secret leaks, and manage internal PKI&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ evantravers zmk-config</title>
    <id>https://waylonwalker.com/evantravers-zmk-config/</id>
    <updated>2024-07-19T16:34:03Z</updated>
    <published>2024-07-19T16:34:03Z</published>
    <link href="https://waylonwalker.com/evantravers-zmk-config/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across zmk-config from evantravers, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/evantravers/zmk-config&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;zmk-config&lt;/a&gt; from &lt;a href=&#34;https://github.com/evantravers&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;evantravers&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Textualize transcendent-textual</title>
    <id>https://waylonwalker.com/textualize-transcendent-textual/</id>
    <updated>2024-07-17T20:57:23Z</updated>
    <published>2024-07-17T20:57:23Z</published>
    <link href="https://waylonwalker.com/textualize-transcendent-textual/" rel="alternate" type="text/html"></link>
    <summary type="text">I like Textualize&#39;s project transcendent-textual.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/Textualize&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Textualize’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/Textualize/transcendent-textual&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;transcendent-textual&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Textual apps and libraries&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>animal well codes</title>
    <id>https://waylonwalker.com/animal-well-codes/</id>
    <updated>2024-07-11T20:05:36Z</updated>
    <published>2024-07-11T20:05:36Z</published>
    <link href="https://waylonwalker.com/animal-well-codes/" rel="alternate" type="text/html"></link>
    <summary type="text">_ ul d dl l dl ur ul</summary>
    <content type="html">&lt;h2 id=&#34;fish-room&#34;&gt;fish room &lt;a href=&#34;#fish-room&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;fish bubbles&lt;/em&gt;&#xA;ul d dl l dl ur ul&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;jellyfish&lt;/em&gt;&#xA;d l d l d l u r&lt;/p&gt;&#xA;&lt;h2 id=&#34;egg-room&#34;&gt;egg room &lt;a href=&#34;#egg-room&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;bar dir&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;given bar codes&lt;/em&gt;&#xA;top r&#xA;mid dr&#xA;bot dl&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;calculated bar codes&lt;/em&gt;&#xA;num dir&lt;/p&gt;&#xA;&lt;p&gt;1 r&#xA;2 dr&#xA;3 d&#xA;4 dl&#xA;5 l&#xA;6 ul&#xA;7 u&#xA;8 ur&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;bar code direction&lt;/em&gt;&#xA;num bar&#xA;1 top&#xA;2 mid&#xA;3 top mid&#xA;4 bot&#xA;5 top bot&#xA;6 mid bot&#xA;7 top mid bot&#xA;8 empty&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;egg room decode&lt;/em&gt;&#xA;6 3 &lt;em&gt;3 6 3 1 3&lt;/em&gt; 4&#xA;2 4 3 &lt;em&gt;2 8&lt;/em&gt; 3 5 8 _&#xA;3 5 7 5_ __ 5 2 5 6 3 1 3&#xA;&lt;em&gt;3 1 3 6 4&lt;/em&gt; 4 6 4 2 4 6 8&#xA;6 4 8 7 &lt;em&gt;3 7 6&lt;/em&gt; 5 7 6 __&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;egg room decode dir&lt;/em&gt;&#xA;ul dd __ dd ul dd rr dd __ dl&#xA;dr dl dd __ dr ur__ dd ll ur __&#xA;dd ll uu ll __ ____ ll dr ll ul dd rr dd&#xA;__ dd rr dd ul dl __ dl ul dl dr dl ul ur&#xA;ul dl ur uu __ dd uu ul __ ll uu ul ____&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ volfpeter fasthx</title>
    <id>https://waylonwalker.com/volfpeter-fasthx/</id>
    <updated>2024-07-10T12:55:17Z</updated>
    <published>2024-07-10T12:55:17Z</published>
    <link href="https://waylonwalker.com/volfpeter-fasthx/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out volfpeter and their project fasthx.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/volfpeter&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;volfpeter&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/volfpeter/fasthx&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fasthx&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/fastapi/&#34; class=&#34;glossary-term&#34; title=&#34;FastAPI is a modern and efficient web framework for Python, built on top of the Starlette web framework, and pydantic for data validation and serialization.&#34;&gt;FastAPI&lt;/a&gt; server-side rendering with built-in &lt;a href=&#34;/htmx/&#34; class=&#34;glossary-term&#34; title=&#34;htmx is a frontend javascript library for creating dynamic web applications.&#34;&gt;HTMX&lt;/a&gt; support.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ typecraft-dev shmux</title>
    <id>https://waylonwalker.com/typecraft-dev-shmux/</id>
    <updated>2024-07-09T20:35:41Z</updated>
    <published>2024-07-09T20:35:41Z</published>
    <link href="https://waylonwalker.com/typecraft-dev-shmux/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by shmux from typecraft-dev.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/typecraft-dev/shmux&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;shmux&lt;/a&gt; from &lt;a href=&#34;https://github.com/typecraft-dev&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;typecraft-dev&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;the shell-script tmux management you didn’t know you needed. baby&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ iximiuz awesome-container-tinkering</title>
    <id>https://waylonwalker.com/iximiuz-awesome-container-tinkering/</id>
    <updated>2024-07-09T00:59:29Z</updated>
    <published>2024-07-09T00:59:29Z</published>
    <link href="https://waylonwalker.com/iximiuz-awesome-container-tinkering/" rel="alternate" type="text/html"></link>
    <summary type="text">I like iximiuz&#39;s project awesome-container-tinkering.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/iximiuz&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;iximiuz’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/iximiuz/awesome-container-tinkering&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;awesome-container-tinkering&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;List of awesome tools to tinker with containers.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ svenstaro miniserve</title>
    <id>https://waylonwalker.com/svenstaro-miniserve/</id>
    <updated>2024-07-06T21:47:02Z</updated>
    <published>2024-07-06T21:47:02Z</published>
    <link href="https://waylonwalker.com/svenstaro-miniserve/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? miniserve by svenstaro.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/svenstaro/miniserve&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;miniserve&lt;/a&gt; by &lt;a href=&#34;https://github.com/svenstaro&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;svenstaro&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;🌟 For when you really just want to serve some files over HTTP right now!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>arch remove orphaned packages</title>
    <id>https://waylonwalker.com/arch-remove-orphaned-packages/</id>
    <updated>2024-07-06T11:34:31Z</updated>
    <published>2024-07-06T11:34:31Z</published>
    <link href="https://waylonwalker.com/arch-remove-orphaned-packages/" rel="alternate" type="text/html"></link>
    <content type="text">&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>k8s kustomize diff</title>
    <id>https://waylonwalker.com/kubebernetes-kustomize-diff/</id>
    <updated>2024-07-06T09:42:42Z</updated>
    <published>2024-07-06T09:42:42Z</published>
    <link href="https://waylonwalker.com/kubebernetes-kustomize-diff/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve started leaning in on kubernetes kustomize to customize my manifests per deployment per environment. Today I learned that it comes with a diff command.</summary>
    <content type="html">&lt;p&gt;I’ve started leaning in on kubernetes kustomize to customize my manifests per&#xA;deployment per environment.  Today I learned that it comes with a diff command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl diff -k k8s/overlays/local&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can enable color diffs by using an external diff provider like colordiff.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;KUBECTL_EXTERNAL_DIFF&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;colordiff -N -u&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You might need to install colordiff if you don’t already have it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pacman -S colordiff&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install colordiff&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now I can try out kustomize changes and see the change with kustomize diff.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>animal well keyboard</title>
    <id>https://waylonwalker.com/animal-well-keyboard/</id>
    <updated>2024-07-04T21:58:41Z</updated>
    <published>2024-07-04T21:58:41Z</published>
    <link href="https://waylonwalker.com/animal-well-keyboard/" rel="alternate" type="text/html"></link>
    <summary type="text">Animal well does not let you remap keys, and really doesn&#39;t even inform you that it is keyboard compatible. I had to play around and discover the keymap,...</summary>
    <content type="html">&lt;p&gt;Animal well does not let you remap keys, and really doesn’t even inform you&#xA;that it is keyboard compatible.  I had to play around and discover the keymap,&#xA;which can be a bit tricky on a 40% board.  This is what I found.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;wasd - move&lt;/li&gt;&#xA;&lt;li&gt;space - jump / a&lt;/li&gt;&#xA;&lt;li&gt;enter - interact / b&lt;/li&gt;&#xA;&lt;li&gt;x - throw&lt;/li&gt;&#xA;&lt;li&gt;c - inventory&lt;/li&gt;&#xA;&lt;li&gt;1 - left item / rb&lt;/li&gt;&#xA;&lt;li&gt;2 - open item menu / triangle&lt;/li&gt;&#xA;&lt;li&gt;3 - right item / lb&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Phil997 pydantic-sqlite</title>
    <id>https://waylonwalker.com/phil997-pydantic-sqlite/</id>
    <updated>2024-07-04T21:57:43Z</updated>
    <published>2024-07-04T21:57:43Z</published>
    <link href="https://waylonwalker.com/phil997-pydantic-sqlite/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered pydantic-sqlite by Phil997, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/Phil997/pydantic-sqlite&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pydantic-sqlite&lt;/a&gt; by &lt;a href=&#34;https://github.com/Phil997&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Phil997&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;Simple package for storing pydantic BaseModels in an in-memory SQLite database.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>diskcache as debounce</title>
    <id>https://waylonwalker.com/diskcache-as-debounce/</id>
    <updated>2024-07-03T11:14:11Z</updated>
    <published>2024-07-03T11:14:11Z</published>
    <link href="https://waylonwalker.com/diskcache-as-debounce/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been using fastapi more and more lately and one feature I just started using is background tasks thoughts-333.</summary>
    <content type="html">&lt;p&gt;I’ve been using &lt;a href=&#34;/fastapi/&#34; class=&#34;glossary-term&#34; title=&#34;FastAPI is a modern and efficient web framework for Python, built on top of the Starlette web framework, and pydantic for data validation and serialization.&#34;&gt;fastapi&lt;/a&gt; more and more lately and one feature I just started&#xA;using is background tasks [[ thoughts-333 ]].&lt;/p&gt;&#xA;&lt;div class=&#34;admonition seealso&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Seealso&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;basic diskcache example &amp;lt;a href=&amp;#34;/python-diskcache/&amp;#34; class=&amp;#34;wikilink&amp;#34; data-title=&amp;#34;How I setup a sqlite cache in python&amp;#34; data-description=&amp;#34;When I need to cache some data between runs or share a cache accross multiple processes my go to library in python is . It&amp;amp;#39;s built on sqlite with just enough...&amp;#34; data-date=&amp;#34;2022-03-29&amp;#34;&amp;gt;How I setup a sqlite cache in python&amp;lt;/a&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;one-background-task-per-db-entry&#34;&gt;One Background Task per db entry &lt;a href=&#34;#one-background-task-per-db-entry&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I am using it for longer running tasks and I don’t want to give users the&#xA;ability to spam these long running tasks with many duplicates running at the&#xA;same time. And each fastapi worker will be running in a different process so I&#xA;cannot keep track of work in memory, I have to do it in a distributed fashion.&#xA;Since they are all running on the same machine with access to the same disk,&#xA;diskcache is a good choice&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-i-need&#34;&gt;What I need &lt;a href=&#34;#what-i-need&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;check if a job is running&lt;/li&gt;&#xA;&lt;li&gt;automatically expire jobs&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;less-infrastructure-complexity&#34;&gt;Less infrastructure complexity &lt;a href=&#34;#less-infrastructure-complexity&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;My brain first went to thinking I needed another service like redis running&#xA;alongside fastapi for this, then it hit me that I can use diskcache.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-i-used-diskcache&#34;&gt;How I used diskcache &lt;a href=&#34;#how-i-used-diskcache&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is how I used diskcache to debounce taking screenshots for a unique shot&#xA;every 60 seconds.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;diskcache&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Cache&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;jobs_cache&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Cache&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;jobs-cache&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@shots_router.get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/shot/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{shot_id}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;responses&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;image/webp&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}}}})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@shots_router.get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/shot/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{shot_id}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;responses&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;image/webp&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}}}})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_shot_by_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;background_tasks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BackgroundTasks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;shot_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;shot&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Shot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shot_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# check if the shot exists and return it or continue to create it.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;is_running&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;jobs_cache&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shot_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;is_running&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;expire_time&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fromtimestamp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;jobs_cache&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;peekitem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;expire_time&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;now&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;[red]Already running store_shot: &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;shot_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;[red]Can retry in &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;expire_time&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;seconds&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;s&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;jobs_cache&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shot_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;60&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;background_tasks&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_task&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;store_shot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;shot_id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shot_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Doomlab7 homelab-diagrams</title>
    <id>https://waylonwalker.com/doomlab7-homelab-diagrams/</id>
    <updated>2024-07-02T13:17:32Z</updated>
    <published>2024-07-02T13:17:32Z</published>
    <link href="https://waylonwalker.com/doomlab7-homelab-diagrams/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about homelab-diagrams, an amazing project by Doomlab7. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/Doomlab7/homelab-diagrams&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;homelab-diagrams&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/Doomlab7&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Doomlab7&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;A repository to house diagrams for my &lt;a href=&#34;/homelab/&#34; class=&#34;glossary-term&#34; title=&#34;A place to self host applications. For me this is primarily self built web applications, and applications for sharing files with my family. Techno Tim has a...&#34;&gt;homelab&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pypeaday learn-pdm</title>
    <id>https://waylonwalker.com/pypeaday-learn-pdm/</id>
    <updated>2024-07-02T13:17:29Z</updated>
    <published>2024-07-02T13:17:29Z</published>
    <link href="https://waylonwalker.com/pypeaday-learn-pdm/" rel="alternate" type="text/html"></link>
    <summary type="text">learn-pdm by pypeaday is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/pypeaday/learn-pdm&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;learn-pdm&lt;/a&gt; by &lt;a href=&#34;https://github.com/pypeaday&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pypeaday&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;A repository for learning and playing with the pdm package manager/system for python&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ wyattbubbylee zmk-config-fourpad</title>
    <id>https://waylonwalker.com/wyattbubbylee-zmk-config-fourpad/</id>
    <updated>2024-07-02T13:17:21Z</updated>
    <published>2024-07-02T13:17:21Z</published>
    <link href="https://waylonwalker.com/wyattbubbylee-zmk-config-fourpad/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on zmk-config-fourpad, created by wyattbubbylee.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/wyattbubbylee/zmk-config-fourpad&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;zmk-config-fourpad&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/wyattbubbylee&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;wyattbubbylee&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;my fourpad keybord&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>kind cluster</title>
    <id>https://waylonwalker.com/kind-cluster/</id>
    <updated>2024-07-02T08:01:20Z</updated>
    <published>2024-07-02T08:01:20Z</published>
    <link href="https://waylonwalker.com/kind-cluster/" rel="alternate" type="text/html"></link>
    <summary type="text">kind is a very useful tool to quickly standup and teardown kubernetes clusters. I use it to run clusters locally. Generally they are short lived clusters for...</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://kind.sigs.k8s.io/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kind.sigs.k8s.io.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kind.sigs.k8s.io.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kind&lt;/a&gt;{.hoverlink} is a very useful tool to quickly standup and&#xA;teardown kubernetes clusters.  I use it to run clusters locally.  Generally&#xA;they are short lived clusters for trying, testing, and learning about&#xA;kubernetes.&lt;/p&gt;&#xA;&lt;p&gt;Kind is Kubernetes in Docker, its very fast to get a new cluster up and&#xA;running.  Other than checking a box in docker desktop it is the easiest way&#xA;currently to get a cluster up and running.  I’ve used docker desktop for k8s&#xA;before I really developed on k8s and it was buggy at the time and sometimes&#xA;started and sometimes didn’t, when it didnt I had no idea how to fix it.  I’d&#xA;suggest kind as the best option to get a cluster up and running locally.&lt;/p&gt;&#xA;&lt;h2 id=&#34;not-production&#34;&gt;Not Production &lt;a href=&#34;#not-production&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you are looking for a production ready cluster this is not it.  I really&#xA;like &lt;a href=&#34;https://k3s.io/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/k3s.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/k3s.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;k3s&lt;/a&gt;{.hoverlink}.  At the time that I chose k3s it was&#xA;the most lightweight option that easily supported multi-node clusters.&lt;/p&gt;&#xA;&lt;h2 id=&#34;starting-a-kind-cluster&#34;&gt;Starting a kind cluster &lt;a href=&#34;#starting-a-kind-cluster&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The first step, and maybe only one that you need is to create a cluster and&#xA;give it a name.  This command will edit your $KUBECONFIG file, and set the kind&#xA;cluster as your default cluster to interact with.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kind create cluster --name &amp;lt;CLUSTER_NAME&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;using-podmanhttpspodmanio-as-a-backend&#34;&gt;Using &lt;a href=&#34;https://podman.io/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/podman.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/podman.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;podman&lt;/a&gt; as a backend &lt;a href=&#34;#using-podmanhttpspodmanio-as-a-backend&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I use podman as my docker engine, kind works with docker and podman, but docker&#xA;by default, in order to switch to podman you need to set an environment&#xA;variable.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;KIND_EXPERIMENTAL_PROVIDER&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;podman&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This will tell kind to use podman as the backend provider instead of docker.&lt;/p&gt;&#xA;&lt;h2 id=&#34;loading-images&#34;&gt;Loading images &lt;a href=&#34;#loading-images&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If your images are not publically available from a registry, you can load them&#xA;in kind using the &lt;code&gt;kind load docker-image&lt;/code&gt; command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kind load docker-image &lt;span class=&#34;nv&#34;&gt;$REPOSITORY&lt;/span&gt;:&lt;span class=&#34;nv&#34;&gt;$TAG&lt;/span&gt; --name &amp;lt;CLUSTER_NAME&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; the CLUSTER_NAME is the name that you gave kind when you started the kind cluster.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;argocd&#34;&gt;Argocd &lt;a href=&#34;#argocd&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Argocd is a great way to setup gitops workflows in kubernetes.  compared to&#xA;just hand-rolling kubectl apply, argo holds the state and is able to not only&#xA;apply new and change, but cleanup removed things.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/kind-cluster-with-argo/&#34; class=&#34;wikilink&#34; data-title=&#34;setting up a kind cluster with argocd installed&#34; data-description=&#34;Kind (Kubernetes in Docker) is a tool that makes it easy to create and tear down local clusters quickly. I like to use it to test out new workflows.&#34; data-date=&#34;2024-04-04&#34; data-preview=&#34;Kind (Kubernetes in Docker) is a tool that makes it easy to create and tear down local clusters quickly. I like to use it to test out new workflows.&#34;&gt;setting up a kind cluster with argocd installed&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;You can stand up argocd in kind for learning argo or getting a nice visual.&#xA;But often when I use kind its overkill.  The cluster is not long lived, I don’t&#xA;care if things are not cleaned up, and I want to quickly apply changes without&#xA;a commit and push to a &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; repo.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Install sealed-secreats via manifest</title>
    <id>https://waylonwalker.com/install-sealed-secreats-via-manifest/</id>
    <updated>2024-07-02T07:54:01Z</updated>
    <published>2024-07-02T07:54:01Z</published>
    <link href="https://waylonwalker.com/install-sealed-secreats-via-manifest/" rel="alternate" type="text/html"></link>
    <summary type="text">Yesterday I realized that I have overlooked the default installation method of the sealed secrets controller for kubernetes-kubeseal this whole time an...</summary>
    <content type="html">&lt;p&gt;Yesterday I realized that I have overlooked the default installation method of&#xA;the sealed secrets controller for &lt;a href=&#34;/kubernetes-kubeseal/&#34; class=&#34;wikilink&#34; data-title=&#34;kubernetes kubeseal&#34; data-description=&#34;In my homelab kubernetes cluster I am using kubeseal to encrypt secrets. I have been using it successfully for a few months now wtih great success. It allows...&#34; data-date=&#34;2024-03-27&#34; data-preview=&#34;In my homelab kubernetes cluster I am using kubeseal to encrypt secrets. I have been using it successfully for a few months now wtih great success. It allows...&#34;&gt;kubernetes kubeseal&lt;/a&gt; this whole time an&#xA;jumped straight to the helm section.  I spun up a quick &lt;a href=&#34;/kind-cluster/&#34; class=&#34;wikilink&#34; data-title=&#34;kind cluster&#34; data-description=&#34;kind is a very useful tool to quickly standup and teardown kubernetes clusters. I use it to run clusters locally. Generally they are short lived clusters for...&#34; data-date=&#34;2024-07-02&#34; data-preview=&#34;kind is a very useful tool to quickly standup and teardown kubernetes clusters. I use it to run clusters locally. Generally they are short lived clusters for...&#34;&gt;kind cluster&lt;/a&gt; and&#xA;had it up quickly.  I can’t say this is any better or worse than helm as I have&#xA;never needed to customize the install.  According to the docs you can customize&#xA;it with [[ kustomize ]] or helm.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# option if you don&amp;#39;t have a cluster try with kind&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kind create cluster&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -L https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.27.0/controller.yaml &amp;gt; controller.yaml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl apply -f controller.yaml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ rothgar bashScheduler</title>
    <id>https://waylonwalker.com/rothgar-bashscheduler/</id>
    <updated>2024-07-01T16:06:43Z</updated>
    <published>2024-07-01T16:06:43Z</published>
    <link href="https://waylonwalker.com/rothgar-bashscheduler/" rel="alternate" type="text/html"></link>
    <summary type="text">I like rothgar&#39;s project bashScheduler.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/rothgar&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rothgar’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/rothgar/bashScheduler&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;bashScheduler&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Kubernetes scheduler written in less than 100 lines of bash 😬 😆&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ joric nrfmicro</title>
    <id>https://waylonwalker.com/joric-nrfmicro/</id>
    <updated>2024-07-01T14:44:42Z</updated>
    <published>2024-07-01T14:44:42Z</published>
    <link href="https://waylonwalker.com/joric-nrfmicro/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by nrfmicro from joric.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/joric/nrfmicro&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nrfmicro&lt;/a&gt; from &lt;a href=&#34;https://github.com/joric&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;joric&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A Pro Micro alternative for wireless keyboards&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>playerctl fixes arch media keys</title>
    <id>https://waylonwalker.com/playerctl-fixes-arch/</id>
    <updated>2024-06-25T18:23:41Z</updated>
    <published>2024-06-25T18:23:41Z</published>
    <link href="https://waylonwalker.com/playerctl-fixes-arch/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve long had issues with my qmk keyboard media keys on my arch install, I always thought it was on the keyboard end. Today I learned that playerctl fixes this.</summary>
    <content type="html">&lt;p&gt;I’ve long had issues with my qmk keyboard media keys on my arch install, I&#xA;always thought it was on the keyboard end.  Today I learned that playerctl&#xA;fixes this.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;paru -S playerctl&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Once it is installed all of my media keys started working right away.&lt;/p&gt;&#xA;&lt;p&gt;I played around with it a bit more and came up with a way to display the&#xA;current playing title in my notifictations.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;notify-send &lt;span class=&#34;s2&#34;&gt;&amp;#34;`playerctl metadata --format &amp;#39;{{lc(status)}}:{{artist}}-{{album}}-{{title}}&amp;#39;`&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ jzhang38 TinyLlama</title>
    <id>https://waylonwalker.com/jzhang38-tinyllama/</id>
    <updated>2024-06-23T20:18:31Z</updated>
    <published>2024-06-23T20:18:31Z</published>
    <link href="https://waylonwalker.com/jzhang38-tinyllama/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred TinyLlama by jzhang38. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/jzhang38/TinyLlama&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;TinyLlama&lt;/a&gt; by &lt;a href=&#34;https://github.com/jzhang38&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jzhang38&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;The TinyLlama project is an open endeavor to pretrain a 1.1B Llama model on 3 trillion tokens.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tusharsadhwani packaged</title>
    <id>https://waylonwalker.com/tusharsadhwani-packaged/</id>
    <updated>2024-06-18T02:43:40Z</updated>
    <published>2024-06-18T02:43:40Z</published>
    <link href="https://waylonwalker.com/tusharsadhwani-packaged/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred packaged by tusharsadhwani. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/tusharsadhwani/packaged&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;packaged&lt;/a&gt; by &lt;a href=&#34;https://github.com/tusharsadhwani&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tusharsadhwani&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;The easiest way to ship python applications.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Dataherald dataherald</title>
    <id>https://waylonwalker.com/dataherald-dataherald/</id>
    <updated>2024-06-12T02:22:27Z</updated>
    <published>2024-06-12T02:22:27Z</published>
    <link href="https://waylonwalker.com/dataherald-dataherald/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? dataherald by Dataherald.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/Dataherald/dataherald&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dataherald&lt;/a&gt; by &lt;a href=&#34;https://github.com/Dataherald&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Dataherald&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Interact with your SQL database, Natural Language to SQL using LLMs&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ orbitinghail sqlsync</title>
    <id>https://waylonwalker.com/orbitinghail-sqlsync/</id>
    <updated>2024-06-11T12:38:23Z</updated>
    <published>2024-06-11T12:38:23Z</published>
    <link href="https://waylonwalker.com/orbitinghail-sqlsync/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out sqlsync by orbitinghail. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/orbitinghail/sqlsync&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sqlsync&lt;/a&gt; by &lt;a href=&#34;https://github.com/orbitinghail&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;orbitinghail&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;SQLSync is a collaborative offline-first wrapper around SQLite. It is designed to synchronize web application state between users, devices, and the edge.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>What I&#39;m learning in 2024</title>
    <id>https://waylonwalker.com/learning-2024/</id>
    <updated>2024-06-09T10:06:30Z</updated>
    <published>2024-06-09T10:06:30Z</published>
    <link href="https://waylonwalker.com/learning-2024/" rel="alternate" type="text/html"></link>
    <summary type="text">2024 has been a learning fueled year, Diving deep into things I never would have previously thought I would. It&#39;s been a bit of a mix of the 🔥hot twitter...</summary>
    <content type="html">&lt;p&gt;2024 has been a learning fueled year, Diving deep into things I never would&#xA;have previously thought I would.  It’s been a bit of a mix of the 🔥hot twitter&#xA;trends, and exactly what tech twitter tells you not to do.  It just goes to&#xA;show community is great, the tech community is filled with strong opinions, but&#xA;you need to think about what really makes sense for you, your career and your&#xA;customers (or lack there of).&lt;/p&gt;&#xA;&lt;h2 id=&#34;tech&#34;&gt;tech &lt;a href=&#34;#tech&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;k8s&lt;/li&gt;&#xA;&lt;li&gt;tailwind&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/fastapi/&#34; class=&#34;glossary-term&#34; title=&#34;FastAPI is a modern and efficient web framework for Python, built on top of the Starlette web framework, and pydantic for data validation and serialization.&#34;&gt;fastapi&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/htmx/&#34; class=&#34;glossary-term&#34; title=&#34;htmx is a frontend javascript library for creating dynamic web applications.&#34;&gt;htmx&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;jinja&lt;/li&gt;&#xA;&lt;li&gt;opnsense&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;successful-one-day-builds&#34;&gt;successful one day builds &lt;a href=&#34;#successful-one-day-builds&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;play-outside&lt;/li&gt;&#xA;&lt;li&gt;reader&lt;/li&gt;&#xA;&lt;li&gt;thoughts&lt;/li&gt;&#xA;&lt;li&gt;thoughts chrome-extension&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;kubernetes&#34;&gt;Kubernetes &lt;a href=&#34;#kubernetes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Damn did I sleep on k8s for way took long.  This is like exactly what I’ve&#xA;needed for a lot of things.  It’s a perect example of what happens when you&#xA;listen to the tech community tell you.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/looking-for-a-heroku-replacement/&#34; class=&#34;wikilink&#34; data-title=&#34;Looking for a Heroku replacement, What I found was shocking!&#34; data-description=&#34;Your browser does not support the audio element.&#34; data-date=&#34;2023-12-04&#34; data-preview=&#34;Your browser does not support the audio element.&#34;&gt;Looking for a Heroku replacement, What I found was shocking!&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I started looking for something to make my &lt;a href=&#34;/homelab/&#34; class=&#34;glossary-term&#34; title=&#34;A place to self host applications. For me this is primarily self built web applications, and applications for sharing files with my family. Techno Tim has a...&#34;&gt;homelab&lt;/a&gt; deployments easier at home.&#xA;Previously I needed to ssh into my server and fuss around with docker compose.&#xA;This just did not feel right for me to go into production and fiddle with it&#xA;like this.&lt;/p&gt;&#xA;&lt;p&gt;In my search I keep seeing kubernetes crop up as the best solution.  I held off&#xA;for a long time, until I finally decided to give it a go.  I’m not sure if I&#xA;got lucky or what but my first few applications that I migrated in went&#xA;smooth as could be.&lt;/p&gt;&#xA;&lt;p&gt;I chose to run k3s as this seemed like the lowest power consumption, easiest to&#xA;manage, and still allowed me to run multiple nodes.  At this point I was unsure&#xA;if I would use multiple nodes, but I did not want to take away the option out&#xA;of the gate.&lt;/p&gt;&#xA;&lt;p&gt;I wrote a follow up article on my experience 6 monthts in.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/kubernetes-6-months-in/&#34; class=&#34;wikilink&#34; data-title=&#34;kubernetes 6 months in&#34; data-description=&#34;I stumbled into kubernetes December 2023 when I was looking for a better way to self host applications. I was looking for something that didn&amp;#39;t require...&#34; data-date=&#34;2024-03-26&#34; data-preview=&#34;I stumbled into kubernetes December 2023 when I was looking for a better way to self host applications. I was looking for something that didn&amp;#39;t require...&#34;&gt;kubernetes 6 months in&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;tailwind&#34;&gt;tailwind &lt;a href=&#34;#tailwind&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Again I wrote off tailwind for a long time.  This time tech twitter really&#xA;likes it and tells me I should use it, but I already know css and I just don’t&#xA;see the point of needing to use a framework.&lt;/p&gt;&#xA;&lt;p&gt;It wasn’t until thePrimeagen roughly said all css classes are shitty, everyone&#xA;writes shitty css classes, and you might as well use the same shitty css&#xA;classes everywhere that it really hit me, and I gave it a shot.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/a-case-for-tailwindcss/&#34; class=&#34;wikilink&#34; data-title=&#34;A Case For Tailwindcss&#34; data-description=&#34;I was watching @theprimeagen recently and I think he sold me on using tailwindcss. The thing about tailwind is that it is not a big component library, it&amp;#39;s a...&#34; data-date=&#34;2023-09-10&#34; data-preview=&#34;I was watching @theprimeagen recently and I think he sold me on using tailwindcss. The thing about tailwind is that it is not a big component library, it&amp;#39;s a...&#34;&gt;A Case For Tailwindcss&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;What I really found was that having a designer lay out all of the rhythm,&#xA;spacing, and colors for you is really powerful.&lt;/p&gt;&#xA;&lt;p class=&#34;text-indigo-500 text-lg&#34;&gt;I now have this site fully styled with tailwind, and even use md-it-attrs that&#xA;allow me to pop extra classes right in markdown and style posts like&#xA;[this]&lt;/p&gt;&#xA;&lt;h2 id=&#34;fastapi&#34;&gt;fastapi &lt;a href=&#34;#fastapi&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’ve been using fast api for a little while now but using it more and more in&#xA;2024.  It has a lot of really great ideas with dependency management, and&#xA;pydantic for moving data in and out of routes.&lt;/p&gt;&#xA;&lt;p&gt;Here are some of the posts I’ve made about fastapi, theres defitely more to&#xA;come here, I have some Ideas that I am honing down around meeting users where&#xA;they are so that routes return the appropriate content type based on their&#xA;explicitly requested content type or assumed by user agent.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/fastapi-static-content/&#34; class=&#34;wikilink&#34; data-title=&#34;how to host static content with fastapi&#34; data-description=&#34;I wanted to host some static files through fastapi. Typical use cases for this might be some static web content like html/css/js. It could also be images or...&#34; data-date=&#34;2023-10-04&#34; data-preview=&#34;I wanted to host some static files through fastapi. Typical use cases for this might be some static web content like html/css/js. It could also be images or...&#34;&gt;how to host static content with fastapi&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;[[ fastapi-jinja-url-for-with-query-params ]]&lt;/p&gt;&#xA;&lt;h2 id=&#34;htmx&#34;&gt;htmx &lt;a href=&#34;#htmx&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have posts about htmx going back to &lt;a href=&#34;/htmx-get/&#34; class=&#34;wikilink&#34; data-title=&#34;Ease into htmx with htmx-get&#34; data-description=&#34;I recently attended python web conf 2022 and after seeing some incredible presentations on it I am excited to give htmx a try.&#34; data-date=&#34;2022-03-25&#34; data-preview=&#34;I recently attended python web conf 2022 and after seeing some incredible presentations on it I am excited to give htmx a try.&#34;&gt;Ease into htmx with htmx-get&lt;/a&gt; on 3/25/2022.  I’ve been&#xA;interested for awhile, but just didn’t really have the platform to use it till&#xA;recently.  My public content has been all static built content for a long time,&#xA;but now I am building applications for myself that are server rendered such as&#xA;&lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;Thoughts&lt;/a&gt; and &lt;a href=&#34;/odb-play-outside/&#34; class=&#34;wikilink&#34; data-title=&#34;One Day Build - Play Outside&#34; data-description=&#34;Inspired by Adam Savage and his One Day builds on youtube. I often build things, and want to make them generally useful for others and over configure out of...&#34; data-date=&#34;2024-04-10&#34; data-preview=&#34;Inspired by Adam Savage and his One Day builds on youtube. I often build things, and want to make them generally useful for others and over configure out of...&#34;&gt;One Day Build - Play Outside&lt;/a&gt;.  I’ve had more use cases&#xA;for using htmx.&lt;/p&gt;&#xA;&lt;p&gt;The last pre-release of markata from 6/15/2022 now supports feed partials.&#xA;This gives me a really easy way to pop things like recent posts on the bottom&#xA;of every single page.  I’m sure I can do this with jinja, but htmx makes it&#xA;really easy to do and understand.  If its up and running you will now see a&#xA;Recent posts seciton below the article on this page powered by htmx.&lt;/p&gt;&#xA;&lt;h2 id=&#34;jinja&#34;&gt;jinja &lt;a href=&#34;#jinja&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’ve been using jinja for years now, but its mostly been some template&#xA;variables here, some loops there.  Now that I am putting fastapi and htmx to&#xA;work I am really learning how to setup and design templates properly.  Building&#xA;up from a good re-usable base, including partials that so that pages can be&#xA;rendered as full pages or partials.&lt;/p&gt;&#xA;&lt;h2 id=&#34;just&#34;&gt;just &lt;a href=&#34;#just&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have long been using my shell history to re-run complex shell commands that I&#xA;use to build projets, compile tailwind, build docker images, run docker in&#xA;local development.  Most of the time they are not complex, but sometimes are&#xA;something that would take me a few minutes to remember if I lost my shell&#xA;history without it being documented&lt;/p&gt;&#xA;&lt;p&gt;I’ve started storing all these things that I can in just.  If its something&#xA;that I get from my shell history I start thinking about how it would belong in&#xA;a justfile.  I’ve tried a few others over the years but they always seem tied&#xA;to a language or build tool, just is language agnostic and runs in any&#xA;terminal.  Worst case, someone does not want to install it they can copy paste&#xA;out of the justfile.&lt;/p&gt;&#xA;&lt;p&gt;Biggest benefit is that it communicates to others what I do when I am working&#xA;on a project.  There are some good competitors like runbook that run readmes,&#xA;but just has been working great for me and easy to use.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tailwind post template</title>
    <id>https://waylonwalker.com/tailwind-post-template/</id>
    <updated>2024-06-08T14:47:42Z</updated>
    <published>2024-06-08T14:47:42Z</published>
    <link href="https://waylonwalker.com/tailwind-post-template/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I am playing around with tailwind, flexing the css muscle and learning how to build new and different layouts with it.</summary>
    <content type="html">&lt;p&gt;Today I am playing around with tailwind, flexing the css muscle and learning&#xA;how to build new and different layouts with it.&lt;/p&gt;&#xA;&lt;p&gt;I created a new post template that mimics a terminal look in css where I could&#xA;inject the post title, description, and other frontmatter elements.&lt;/p&gt;&#xA;&lt;iframe src=&#34;/playground/tailwind-post-template&#34; width=&#34;100%&#34; height=&#34;800px&#34; class=&#34;overflow-hidden&#34; scrolling=&#34;no&#34;&gt;&#xA;&lt;p&gt;I think this is a pretty cool layout, I could make a&#xA;&lt;a href=&#34;https://carbon.now.sh&#34;&gt;carbon.now.sh&lt;/a&gt;{.hoverlink} clone or more realistically I could&#xA;make it into a template for blog pages and this could become &lt;a href=&#34;/og/&#34; class=&#34;glossary-term&#34; title=&#34;OG is short for open graph, a set of standard meta tags that are used for social media sharing. This is what tells other websites how to describe and display...&#34;&gt;og&lt;/a&gt; images.&lt;/p&gt;&#xA;&lt;p class=&#34;mx-auto block w-fit mb-0&#34;&gt;&lt;/p&gt;&#xA;&lt;p class=&#34;mx-auto block w-fit mt-0&#34;&gt;&lt;a href=&#34;/still-loving-tailwind/&#34; class=&#34;wikilink&#34; data-title=&#34;Still Loving Tailwind&#34; data-description=&#34;I&amp;#39;ve been using tailwind for a few months now and I can still say I&amp;#39;m loving it. I&amp;#39;ve been using it to create some rapid prototypes that may or may not ever...&#34; data-date=&#34;2023-11-30&#34; data-preview=&#34;I&amp;#39;ve been using tailwind for a few months now and I can still say I&amp;#39;m loving it. I&amp;#39;ve been using it to create some rapid prototypes that may or may not ever...&#34;&gt;Still Loving Tailwind&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&lt;/iframe&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ catppuccin ulauncher</title>
    <id>https://waylonwalker.com/catppuccin-ulauncher/</id>
    <updated>2024-06-07T03:40:13Z</updated>
    <published>2024-06-07T03:40:13Z</published>
    <link href="https://waylonwalker.com/catppuccin-ulauncher/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on ulauncher by catppuccin.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/catppuccin/ulauncher&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ulauncher&lt;/a&gt; by &lt;a href=&#34;https://github.com/catppuccin&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;catppuccin&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;🇺 Soothing pastel theme for Ulauncher&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ codex-team editor.js</title>
    <id>https://waylonwalker.com/codex-team-editor-js/</id>
    <updated>2024-06-06T21:10:13Z</updated>
    <published>2024-06-06T21:10:13Z</published>
    <link href="https://waylonwalker.com/codex-team-editor-js/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on editor.js by codex-team.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/codex-team/editor.js&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;editor.js&lt;/a&gt; by &lt;a href=&#34;https://github.com/codex-team&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;codex-team&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A block-style editor with clean JSON output&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ darrenburns posting</title>
    <id>https://waylonwalker.com/darrenburns-posting/</id>
    <updated>2024-06-04T02:02:35Z</updated>
    <published>2024-06-04T02:02:35Z</published>
    <link href="https://waylonwalker.com/darrenburns-posting/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out darrenburns and their project posting.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/darrenburns&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;darrenburns&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/darrenburns/posting&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;posting&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The modern API client that lives in your terminal.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tailscale ssh</title>
    <id>https://waylonwalker.com/tailscale-ssh/</id>
    <updated>2024-06-03T16:40:18Z</updated>
    <published>2024-06-03T16:40:18Z</published>
    <link href="https://waylonwalker.com/tailscale-ssh/" rel="alternate" type="text/html"></link>
    <summary type="text">Tailscale allows you to ssh into all of your tailscale machines, it busts through firewalls and accross networks without complex setup. If you have used...</summary>
    <content type="html">&lt;p&gt;Tailscale allows you to ssh into all of your tailscale machines, it busts&#xA;through firewalls and accross networks without complex setup.  If you have used&#xA;tailscale before this is an obvious no brainer.  What is not obvious is that&#xA;you can configure tailscale to allow ssh connections from devices within your&#xA;tailnet without even a ssh daemon process running right through the tailscale&#xA;daemon.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tailscale status&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tailscale &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; --ssh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I picked this up from the tailscale youtube channel.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=08clF9srJ2k&amp;amp;t=35s&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34;&gt;Tailscale&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Latest Page in Markata</title>
    <id>https://waylonwalker.com/latest-page-in-markata/</id>
    <updated>2024-06-01T21:01:26Z</updated>
    <published>2024-06-01T21:01:26Z</published>
    <link href="https://waylonwalker.com/latest-page-in-markata/" rel="alternate" type="text/html"></link>
    <summary type="text">I just implemented a latest blog post link in Markata by asking for the first post slug from the blog feed. The implementation uses the jinja_md plugin to...</summary>
    <content type="html">&lt;p&gt;I just implemented a latest blog post link in Markata by asking for the first&#xA;post slug from the blog feed.  The implementation uses the jinja_md plugin to&#xA;render jinja against the markdown and a &lt;meta/&gt; tag to redirect.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;My latest blog post is [[ {{ markata.feeds.blog.posts[0].slug }} ]].  Click the&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;link if you are not automatically redirected.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;meta http-equiv=&amp;#34;Refresh&amp;#34; content=&amp;#34;0; url=&amp;#39;/{{ markata.feeds.blog.posts[0].slug }}&amp;#39;&amp;#34; /&amp;gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;setting-up-the-feed&#34;&gt;Setting up the feed &lt;a href=&#34;#setting-up-the-feed&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Feeds are setup in &lt;code&gt;markata.toml&lt;/code&gt; configuration.  They provide a handy way to&#xA;create an &lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;html&lt;/a&gt; feed, rss feed, and quickly reference a filtered set of posts&#xA;like this.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# you will need to enable the jinja_md plugin along with the defaults&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;markata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;hooks&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;markata.plugins.jinja_md&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;default&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# set up the blog feed&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;markata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;feeds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;slug&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;blog&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;template&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;feed.html&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;filter&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;date&amp;lt;=today and templateKey in [&amp;#39;blog-post&amp;#39;] and published&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;sort&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;date&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;reverse&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;For more information on markata check out the full &lt;a href=&#34;/markata/&#34; class=&#34;wikilink&#34; data-title=&#34;markata&#34; data-description=&#34;This post is a work in progress.&#34; data-date=&#34;2024-05-30&#34; data-preview=&#34;This post is a work in progress.&#34;&gt;markata&lt;/a&gt; post.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Refactoring one line links into wikilinks</title>
    <id>https://waylonwalker.com/refactoring-into-wikilinks/</id>
    <updated>2024-05-31T20:33:10Z</updated>
    <published>2024-05-31T20:33:10Z</published>
    <link href="https://waylonwalker.com/refactoring-into-wikilinks/" rel="alternate" type="text/html"></link>
    <summary type="text">Previously I had setup a feature of my website to expand one line links into a card. This was not a standard, even to the point that some formatters wrap the...</summary>
    <content type="html">&lt;p&gt;Previously I had setup a feature of my website to expand one line links into a&#xA;card.  This was not a standard, even to the point that some formatters wrap the&#xA;links with &lt;angle brackets=&#34;&#34;&gt;, thus breaking my custom plugin.  Moving to the&#xA;wikilink standard will allow my markdown posts to work accross more site&#xA;builders without custom integrations.&lt;/angle&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/expand-one-line-links/&#34; class=&#34;wikilink&#34; data-title=&#34;Expand One Line Links&#34; data-description=&#34;I wanted a super simple way to cross-link blog posts that require as little effort as possible, yet still looks good in vanilla markdown in GitHub. I have...&#34; data-date=&#34;2020-11-18&#34; data-preview=&#34;I wanted a super simple way to cross-link blog posts that require as little effort as possible, yet still looks good in vanilla markdown in GitHub. I have...&#34;&gt;Expand One Line Links&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-a-wikilink&#34;&gt;What is a wikilink &lt;a href=&#34;#what-is-a-wikilink&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Wikilinks are standard to a lot of wikis written in markdown.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/jsepia/markdown-it-wikilinks#readme&#34; class=&#34;hoverlink  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34;&gt;markdown-it-wikilinks&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The wikilink syntax is a slug wrapped in double square brackets.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[[ slug ]]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Marksman lsp will even autocomplete these for you, its pretty sweet.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; I recently implemented hover for wikilinks and and am pretty stoked about the&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;result.  Check this one out &lt;a href=&#34;/sick-wikilink-hover/&#34; class=&#34;wikilink&#34; data-title=&#34;sick wikilink hover&#34; data-description=&#34;Today I set up some sick wikilink hover effects using tailwind see a-case-for-tailwindcss. When you hover over them they show an image preview of the link...&#34; data-date=&#34;2024-05-30&#34; data-preview=&#34;Today I set up some sick wikilink hover effects using tailwind see a-case-for-tailwindcss. When you hover over them they show an image preview of the link...&#34;&gt;sick wikilink hover&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;vim-quickfix&#34;&gt;Vim Quickfix &lt;a href=&#34;#vim-quickfix&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You could use &lt;code&gt;vimgrep&lt;/code&gt; to fill your quickfix list will all of the one line links&#xA;but I am less familiar with vimgrep and kept missing posts for some reason, I&#xA;think it was something in my file glob missing some directories.&lt;/p&gt;&#xA;&lt;p&gt;I chose to use &lt;code&gt;cexpr&lt;/code&gt; to fill my quickfix list using a command that outputs a&#xA;vimgrep format &lt;code&gt;filename:line:col:msg&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cexpr&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;system&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;rg ^&amp;lt;https -t md --vimgrep .&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This filled my quickfix list with all of the one line links.&lt;/p&gt;&#xA;&lt;h2 id=&#34;vim-cdo&#34;&gt;Vim cdo &lt;a href=&#34;#vim-cdo&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now all I needed to do was to run a substitution command on every line in the&#xA;quickfix list.  This one features the one eyed fighting kirby that I learned&#xA;from the primeagen [[ thoughts-200 ]].&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cdo&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/\(^https:\/\/waylonwalker.com\/\)\(.*\)/&lt;/span&gt;[[ \&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; ]]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This converts all of the full links into a slug wrapped in double square&#xA;brackets.&lt;/p&gt;&#xA;&lt;h2 id=&#34;more&#34;&gt;More &lt;a href=&#34;#more&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There was a bit more to the full refactor, for instance some had a til/ preix,&#xA;some were for youtube, and some were not pointed to my site.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>about this site</title>
    <id>https://waylonwalker.com/about-this-site/</id>
    <updated>2024-05-31T14:07:02Z</updated>
    <published>2024-05-31T14:07:02Z</published>
    <link href="https://waylonwalker.com/about-this-site/" rel="alternate" type="text/html"></link>
    <summary type="text">I registered waylonwalker.com and started making content for it in 2017 after a big industry downturn in 2016 that left me scared for what would happen if I...</summary>
    <content type="html">&lt;p&gt;I registered waylonwalker.com and started making content for it in 2017 after a&#xA;big industry downturn in 2016 that left me scared for what would happen if I&#xA;were laid off.  The company I was working for at the time did it’s first major&#xA;downsizing in history sending many really good engineers out to look for new&#xA;opportunities in a world flooded with many in the same situation.  This was&#xA;very similar to what happened to the tech industry in 2024.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This was very similar to what happened to the tech industry in 2024.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;See &lt;a href=&#34;/about/&#34; class=&#34;wikilink&#34; data-title=&#34;Waylon Walker&#34; data-description=&#34;👋 Hi, I am Waylon Walker. Husband, Father of two, and creator things on the web, learning, and teaching others. I play lots of Minecraft, make art, and...&#34; data-date=&#34;2021-11-20&#34; data-preview=&#34;👋 Hi, I am Waylon Walker. Husband, Father of two, and creator things on the web, learning, and teaching others. I play lots of Minecraft, make art, and...&#34;&gt;Waylon Walker&lt;/a&gt; for more about me.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-this-site&#34;&gt;What is this site? &lt;a href=&#34;#what-is-this-site&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It’s a blog&lt;/li&gt;&#xA;&lt;li&gt;Digital Garden&lt;/li&gt;&#xA;&lt;li&gt;Learn in public&lt;/li&gt;&#xA;&lt;li&gt;TIL&lt;/li&gt;&#xA;&lt;li&gt;portfolio&lt;/li&gt;&#xA;&lt;li&gt;my personal corner of the internet&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;its-nottext-red-500-text-6xl-font-bold-perfect&#34;&gt;It’s [NOT]{.text-red-500 .text-6xl .font-bold} Perfect &lt;a href=&#34;#its-nottext-red-500-text-6xl-font-bold-perfect&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;There will be mistakes&lt;/li&gt;&#xA;&lt;li&gt;I will learn&lt;/li&gt;&#xA;&lt;li&gt;Grammar will be fine, but never perfect&lt;/li&gt;&#xA;&lt;li&gt;Code will run on my machine, but not guaranteed to be perfect&lt;/li&gt;&#xA;&lt;li&gt;There will be days when the whole site is broken&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;it-started-as-a-blog&#34;&gt;It started as a blog &lt;a href=&#34;#it-started-as-a-blog&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p class=&#34;font-bold underline decoration-teal-500&#34;&gt;This site started out as a [big B]&lt;/p&gt;&#xA;&lt;h2 id=&#34;its-a-digital-garden&#34;&gt;It’s a digital garden &lt;a href=&#34;#its-a-digital-garden&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Somewhere along the line I found a really great community of people who create&#xA;content in ways that they does not require that level of depth and polish on&#xA;each and every post they make.  Ideas flow out and content gets made over time.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://maggieappleton.com&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/maggieappleton.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/maggieappleton.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Maggie Appleton&lt;/a&gt;{.hoverlink} and the idea of &lt;a href=&#34;https://maggieappleton.com/garden-history&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/maggieappleton.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/maggieappleton.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;digital&#xA;gardening&lt;/a&gt;{.hoverlink} has been very&#xA;inspiriational. She makes really great content with amazing drawings in them.&#xA;She publishes early and often and labels content with the state that it is in,&#xA;early and often.  Some posts are budding, and some are evergreen.  She also&#xA;distinguishes between notes and essays.&lt;/p&gt;&#xA;&lt;h2 id=&#34;learn-in-public&#34;&gt;Learn in public &lt;a href=&#34;#learn-in-public&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.swyx.io/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.swyx.io.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.swyx.io.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Shawn Wang&lt;/a&gt;{.hoverlink} (swyx) Has been very inpsiring with ideas&#xA;around &lt;a href=&#34;https://www.swyx.io/learn-in-public&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.swyx.io.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.swyx.io.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Learn In Public&lt;/a&gt;{.hoverlink}.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Whatever your thing is, make the thing you wish you had found when you were&#xA;learning. Don’t judge your results by “claps” or retweets or stars or upvotes&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;just talk to yourself from 3 months ago. I keep an almost-daily dev blog&#xA;written for no one else but me.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Try your best to be right but don’t wait til your the expert to share what you&#xA;are learning.  If something works for you, you are likely mostly right even if&#xA;you don’t have all the right words for it yet.  Don’t be afraid to be wrong.&lt;/p&gt;&#xA;&lt;h2 id=&#34;til&#34;&gt;TIL &lt;a href=&#34;#til&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;On to one of the most inspirational pieces that I have taken ideas from&#xA;&lt;a href=&#34;https://x.com/jbrancha&#34; class=&#34;hoverlink  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/x.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/x.com.ico&#34;&gt;@jbrancha&lt;/a&gt;&lt;a href=&#34;https://github.com/jbranchaud/til&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;#til&#xA;repository&lt;/a&gt;{.hoverlink}.  He has been posting daily Tils&#xA;for Years, and they do pretty damn well on google despite what SEO experts say&#xA;his results end up in my google search quite often.&lt;/p&gt;&#xA;&lt;p&gt;I’ve made many posts on this site in the TIL format.  I don’t strictly stick to&#xA;a schedule or a character length quite like Josh Does, but generally they are&#xA;short, sweet, single ideas.&lt;/p&gt;&#xA;&lt;h2 id=&#34;thoughts&#34;&gt;Thoughts &lt;a href=&#34;#thoughts&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I created a sub site &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;Thoughts&lt;/a&gt; to serve as a sort of list of bookmarks,&#xA;its a place for me to comment, quote, and link to other pages on the internet.&lt;/p&gt;&#xA;&lt;h2 id=&#34;portfolio&#34;&gt;Portfolio &lt;a href=&#34;#portfolio&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is my place to create and share content that becomes part of my portfolio.&#xA;I network with others, share content across social accounts and make it public.&#xA;This is an example of my work in writing, documenting, mentoring, and web&#xA;development.&lt;/p&gt;&#xA;&lt;h2 id=&#34;static-site&#34;&gt;Static Site &lt;a href=&#34;#static-site&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This site has gone from &lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;html&lt;/a&gt;, to gatsby, and finally I built my own static site&#xA;generator &lt;a href=&#34;/markata/&#34; class=&#34;wikilink&#34; data-title=&#34;markata&#34; data-description=&#34;This post is a work in progress.&#34; data-date=&#34;2024-05-30&#34; data-preview=&#34;This post is a work in progress.&#34;&gt;markata&lt;/a&gt;.  It’s been through a few different hosts, but at the&#xA;end of the day the content is all&#xA;&lt;a href=&#34;https://www.markdownguide.org/basic-syntax/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.markdownguide.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.markdownguide.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;markdown&lt;/a&gt;{.hoverlink} with frontmatter.&lt;/p&gt;&#xA;&lt;p&gt;For instance the beginning of this post looks like this.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;---&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;date: 2024-05-31 14:07:02&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;templateKey: blog-post&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;title: about this site&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tags:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; meta&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;published: True&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;---&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;own-your-content&#34;&gt;Own your Content &lt;a href=&#34;#own-your-content&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Throughout this process I have become a proponent of owning your own content on&#xA;the internet.  If you own the domain, the content, and host it yourself you&#xA;control when it gets published, deleted, and updated.  No one can take this&#xA;away from you execept for you.  It’s a very powerful tool that I highly&#xA;recommend everyone to use.  You can get your own domain for $12/year or less,&#xA;and that is all you need to pay.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pypeaday eol-dr</title>
    <id>https://waylonwalker.com/pypeaday-eol-dr/</id>
    <updated>2024-05-31T11:49:42Z</updated>
    <published>2024-05-31T11:49:42Z</published>
    <link href="https://waylonwalker.com/pypeaday-eol-dr/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred eol-dr by pypeaday. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/pypeaday/eol-dr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;eol-dr&lt;/a&gt; by &lt;a href=&#34;https://github.com/pypeaday&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pypeaday&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;A crowd-sourced guide to help techs help their non-tech spouses / partners / parents / kids when we are at the end-of-life&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>sick wikilink hover</title>
    <id>https://waylonwalker.com/sick-wikilink-hover/</id>
    <updated>2024-05-30T21:48:49Z</updated>
    <published>2024-05-30T21:48:49Z</published>
    <link href="https://waylonwalker.com/sick-wikilink-hover/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I set up some sick wikilink hover effects using tailwind see a-case-for-tailwindcss. When you hover over them they show an image preview of the link...</summary>
    <content type="html">&lt;p&gt;Today I set up some sick wikilink hover effects using tailwind see &lt;a href=&#34;/a-case-for-tailwindcss/&#34; class=&#34;wikilink&#34; data-title=&#34;A Case For Tailwindcss&#34; data-description=&#34;I was watching @theprimeagen recently and I think he sold me on using tailwindcss. The thing about tailwind is that it is not a big component library, it&amp;#39;s a...&#34; data-date=&#34;2023-09-10&#34; data-preview=&#34;I was watching @theprimeagen recently and I think he sold me on using tailwindcss. The thing about tailwind is that it is not a big component library, it&amp;#39;s a...&#34;&gt;A Case For Tailwindcss&lt;/a&gt;. When you hover over them they show an image preview&#xA;of the link that you are going to.  I cant find where I have seen this but it&#xA;comes from some docs sites.&lt;/p&gt;&#xA;&lt;p&gt;I’ll finish this article later, just excited to see it up.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>markata</title>
    <id>https://waylonwalker.com/markata/</id>
    <updated>2024-05-30T13:45:54Z</updated>
    <published>2024-05-30T13:45:54Z</published>
    <link href="https://waylonwalker.com/markata/" rel="alternate" type="text/html"></link>
    <summary type="text">This post is a work in progress.</summary>
    <content type="html">&lt;p&gt;This post is a work in progress.&lt;/p&gt;&#xA;&lt;p&gt;Markata is the static site generator that I created to build my website &lt;a href=&#34;/about-this-site/&#34; class=&#34;wikilink&#34; data-title=&#34;about this site&#34; data-description=&#34;I registered waylonwalker.com and started making content for it in 2017 after a big industry downturn in 2016 that left me scared for what would happen if I...&#34; data-date=&#34;2024-05-31&#34; data-preview=&#34;I registered waylonwalker.com and started making content for it in 2017 after a big industry downturn in 2016 that left me scared for what would happen if I...&#34;&gt;about this site&lt;/a&gt;.  I built it for me and I enjoy using it.  I know everying&#xA;it can do and I can extend it to do more easily.  I have set it up for some&#xA;friends to also use it and am proud that it helps them publish their content.&lt;/p&gt;&#xA;&lt;p&gt;It’s a meme to create your own static site generator to make your website.  Yes&#xA;its funny, I don’t recommend it if your not ready for the level of work that&#xA;comes with it, but at the end of the day it’s very rewarding and a great way to&#xA;learn.&lt;/p&gt;&#xA;&lt;h2 id=&#34;static-sites-were-all-the-rage&#34;&gt;Static Sites were all the rage &lt;a href=&#34;#static-sites-were-all-the-rage&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;JAMStack was 🔥&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Gatsby and Next.js hit the scene as the next generation of static site builders&#xA;and were getting big around the time I started building my site in 2017.  They&#xA;were based on react.  I dove into react and learned it enough to build my&#xA;website, but I really lacked the depth of knowledge in the js ecosystem to&#xA;really work on it effectively.  For instance when it got slow, it was hard for&#xA;me to profile and find out why.  What I really wanted was my site written in&#xA;python, which I knew the ecosystem for very well, but I did not find the&#xA;existing site generators easy to extend to do the things I needed.  Naively I&#xA;thought it would be easier to just build my own than learn how to make one do&#xA;what I wanted it to.  Not invented here syndrome hitting hard.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;In their Defense&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;I really lacked the depth of knowledge in the js ecosystem to really work on&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;it (gatsby) effectively.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;plugins-all-the-way-down&#34;&gt;Plugins all the way down &lt;a href=&#34;#plugins-all-the-way-down&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I started building this as I dove deeper into the &lt;a href=&#34;/kedro/&#34; class=&#34;wikilink&#34; data-title=&#34;Kedro&#34; data-description=&#34;My Notes about using kedro&#34; data-date=&#34;2019-11-02&#34; data-preview=&#34;My Notes about using kedro&#34;&gt;Kedro&lt;/a&gt; framework for Data&#xA;Engineering pipelines.  They use a plugin framework for allowing users to&#xA;extend it called pluggy.  I had a great experience extending kedro using pluggy&#xA;and wanted to build something with based on pluggy when I had started markata.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/pluggy-minimal-example/&#34; class=&#34;wikilink&#34; data-title=&#34;A Minimal Pluggy Example&#34; data-description=&#34;Pluggy makes it so easy to allow users to modify the behavior of a framework without thier specific feature needing to be implemented in the framework itself.&#34; data-date=&#34;2022-01-01&#34; data-preview=&#34;Pluggy makes it so easy to allow users to modify the behavior of a framework without thier specific feature needing to be implemented in the framework itself.&#34;&gt;A Minimal Pluggy Example&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;more-posts&#34;&gt;More Posts &lt;a href=&#34;#more-posts&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have more posts about markata in the [[ tag/markata ]].&lt;/p&gt;&#xA;&lt;p&gt;{% for post in markata.feeds.markatafeed.map(reverse=True) %}&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/%7B%7Bpost.slug%7D%7D&#34;&gt;{{post.title}}&lt;/a&gt; - {{post.date}}&#xA;{% endfor %}&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>my linked in work history</title>
    <id>https://waylonwalker.com/my-linked-in-work-history/</id>
    <updated>2024-05-30T11:14:16Z</updated>
    <published>2024-05-30T11:14:16Z</published>
    <link href="https://waylonwalker.com/my-linked-in-work-history/" rel="alternate" type="text/html"></link>
    <summary type="text">My linked in work history is empty. I made up a position about content developer that tracks how long I&#39;ve been blogging. I think i did this because LinkedIn...</summary>
    <content type="html">&lt;p&gt;My linked in work history is empty.  I made up a position about content&#xA;developer that tracks how long I’ve been blogging.  I think i did this because&#xA;LinkedIn requires it.  Either way this is public knowledge and fine sharing.&lt;/p&gt;&#xA;&lt;h2 id=&#34;social-engineering&#34;&gt;Social Engineering &lt;a href=&#34;#social-engineering&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you have taken any security class for your job seriously you have already&#xA;been told not to share your work with most companies to the public, this is&#xA;private information that only opens you up for social engineering attacks&#xA;against that company.&lt;/p&gt;&#xA;&lt;h2 id=&#34;i-care-about-privacy-and-security&#34;&gt;I care about privacy and security &lt;a href=&#34;#i-care-about-privacy-and-security&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I care about the security of these companies I work for and their reputation,&#xA;so I refuse to publically share it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;need-to-know&#34;&gt;Need to know &lt;a href=&#34;#need-to-know&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If somehow you need to know where I work it’s my choice to tell you.  I don’t&#xA;need to advertise to every social engineering hacker where I work on the&#xA;platform that they go to get that information from.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Your LinkedIn is Garbage</title>
    <id>https://waylonwalker.com/your-linkedin-is-garbage/</id>
    <updated>2024-05-30T11:02:39Z</updated>
    <published>2024-05-30T11:02:39Z</published>
    <link href="https://waylonwalker.com/your-linkedin-is-garbage/" rel="alternate" type="text/html"></link>
    <summary type="text">Your linkedin link sits at the top of your resume, its one of the first things I see when I open your resume, but yet it gives me no more information that...</summary>
    <content type="html">&lt;p&gt;Your linkedin link sits at the top of your resume, its one of the first things&#xA;I see when I open your resume, but yet it gives me no more information that the&#xA;damn resume you sent me.&lt;/p&gt;&#xA;&lt;p&gt;Save that space on your resume for something useful.&lt;/p&gt;&#xA;&lt;h2 id=&#34;so-you-want-that-inme-on-your-resume&#34;&gt;So you want that /in/me on your resume &lt;a href=&#34;#so-you-want-that-inme-on-your-resume&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Fine if you want it on your resume make it actually useful for someone reading&#xA;your resume.&lt;/p&gt;&#xA;&lt;h2 id=&#34;actually-post-something&#34;&gt;Actually post something &lt;a href=&#34;#actually-post-something&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If I am reading resume’s and I actually take the time to look at your linkedin&#xA;I want to see you post something.  Take a side, make an opinion and post it.&#xA;Learn something new, make a post about it.  If you have a blog and you make a&#xA;good post share it there.&lt;/p&gt;&#xA;&lt;h2 id=&#34;your-work-history-belongs-on-your-resume&#34;&gt;Your work history belongs on your resume &lt;a href=&#34;#your-work-history-belongs-on-your-resume&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Any security 101 tells you that you should not share your work history on&#xA;linked in.  You should not share photos of you at your workplace that include&#xA;sensitive information such as your badge.&lt;/p&gt;&#xA;&lt;p&gt;Your work history on LinkedIn is for hackers to steal and use for social&#xA;engineering.&lt;/p&gt;&#xA;&lt;p&gt;If you took security seriously you would not include you work history at all,&#xA;and any hiring manager who gives a shit would see that and should understand.&#xA;Reality is that they probably don’t and it probably raised more questions than&#xA;answers for them.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/my-linked-in-work-history/&#34; class=&#34;wikilink&#34; data-title=&#34;my linked in work history&#34; data-description=&#34;My linked in work history is empty. I made up a position about content developer that tracks how long I&amp;#39;ve been blogging. I think i did this because LinkedIn...&#34; data-date=&#34;2024-05-30&#34; data-preview=&#34;My linked in work history is empty. I made up a position about content developer that tracks how long I&amp;#39;ve been blogging. I think i did this because LinkedIn...&#34;&gt;my linked in work history&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;congrats-on-your-work-anniversary&#34;&gt;Congrats on your work anniversary &lt;a href=&#34;#congrats-on-your-work-anniversary&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;All these comments and messages are auto generated, both sides know it and its&#xA;garbage.  If you actually care about someones work history or achievements take&#xA;30s to craft a message of your own to them, that actually means something and&#xA;is not garbage.&lt;/p&gt;&#xA;&lt;h2 id=&#34;tldr&#34;&gt;TLDR &lt;a href=&#34;#tldr&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you are not going to take the time and effort to make something worth&#xA;sharing, take your garbage profile off your resume.o&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ eraser-dev eraser</title>
    <id>https://waylonwalker.com/eraser-dev-eraser/</id>
    <updated>2024-05-25T01:25:18Z</updated>
    <published>2024-05-25T01:25:18Z</published>
    <link href="https://waylonwalker.com/eraser-dev-eraser/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered eraser by eraser-dev, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/eraser-dev/eraser&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;eraser&lt;/a&gt; by &lt;a href=&#34;https://github.com/eraser-dev&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;eraser-dev&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;🧹 Cleaning up images from Kubernetes nodes&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ublue-os image-template</title>
    <id>https://waylonwalker.com/ublue-os-image-template/</id>
    <updated>2024-05-22T12:34:45Z</updated>
    <published>2024-05-22T12:34:45Z</published>
    <link href="https://waylonwalker.com/ublue-os-image-template/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on image-template by ublue-os.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/ublue-os/image-template&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;image-template&lt;/a&gt; by &lt;a href=&#34;https://github.com/ublue-os&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ublue-os&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Build your own custom Universal Blue Image!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ublue-os obs-studio-portable</title>
    <id>https://waylonwalker.com/ublue-os-obs-studio-portable/</id>
    <updated>2024-05-21T01:44:25Z</updated>
    <published>2024-05-21T01:44:25Z</published>
    <link href="https://waylonwalker.com/ublue-os-obs-studio-portable/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on obs-studio-portable by ublue-os.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/ublue-os/obs-studio-portable&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;obs-studio-portable&lt;/a&gt; by &lt;a href=&#34;https://github.com/ublue-os&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ublue-os&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;OCI container image of OBS Studio that bundles a curated collection of 3rd party plugins&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ andydunstall piko</title>
    <id>https://waylonwalker.com/andydunstall-piko/</id>
    <updated>2024-05-16T13:54:42Z</updated>
    <published>2024-05-16T13:54:42Z</published>
    <link href="https://waylonwalker.com/andydunstall-piko/" rel="alternate" type="text/html"></link>
    <summary type="text">andydunstall has done a fantastic job with piko. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/andydunstall&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;andydunstall&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/andydunstall/piko&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;piko&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;An open-source alternative to Ngrok, designed to serve production traffic and be simple to host (particularly on Kubernetes)&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ starfederation datastar</title>
    <id>https://waylonwalker.com/starfederation-datastar/</id>
    <updated>2024-05-10T19:07:04Z</updated>
    <published>2024-05-10T19:07:04Z</published>
    <link href="https://waylonwalker.com/starfederation-datastar/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on datastar by starfederation.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/starfederation/datastar&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;datastar&lt;/a&gt; by &lt;a href=&#34;https://github.com/starfederation&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;starfederation&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The hypermedia framework.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>just picker</title>
    <id>https://waylonwalker.com/just-picker/</id>
    <updated>2024-05-08T20:48:23Z</updated>
    <published>2024-05-08T20:48:23Z</published>
    <link href="https://waylonwalker.com/just-picker/" rel="alternate" type="text/html"></link>
    <summary type="text">has been by go to tool for saving commands in a way that I can replay them and have team members replay them without relying on the shell history of any...</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/casey/just&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;&lt;code&gt;just&lt;/code&gt;&lt;/a&gt; has been by go to tool for saving&#xA;commands in a way that I can replay them and have team members replay them&#xA;without relying on the shell history of any given machine.  This is my go to&#xA;default step, it lets you pick a just command to run with a fuzzy picker.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;default:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  @just --list&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>showmount-e</title>
    <id>https://waylonwalker.com/showmount-e/</id>
    <updated>2024-04-25T20:15:29Z</updated>
    <published>2024-04-25T20:15:29Z</published>
    <link href="https://waylonwalker.com/showmount-e/" rel="alternate" type="text/html"></link>
    <summary type="text">TIL how to display the list of nfs mounts on your network.</summary>
    <content type="html">&lt;p&gt;TIL how to display the list of nfs mounts on your network.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;showmount -e&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can even look for mounts of other machines on your network.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;showmount -e &amp;lt;hostname&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>control minio token access</title>
    <id>https://waylonwalker.com/control-minio-token-access/</id>
    <updated>2024-04-24T17:03:34Z</updated>
    <published>2024-04-24T17:03:34Z</published>
    <link href="https://waylonwalker.com/control-minio-token-access/" rel="alternate" type="text/html"></link>
    <summary type="text">To allow access only to the , you can pass add the Resource field to the User Policy when you create a new token.</summary>
    <content type="html">&lt;p&gt;To allow access only to the &lt;bucket&gt;, you can pass add the Resource field  to&#xA;the User Policy when you create a new token.&lt;/bucket&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;Version&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;2012-10-17&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;Statement&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;Effect&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Allow&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;Action&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;admin:*&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;Effect&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Allow&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;Action&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;kms:*&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;Effect&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Allow&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;Action&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;s3:*&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;Resource&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;arn:aws:s3:::&amp;lt;bucket&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;arn:aws:s3:::&amp;lt;bucket&amp;gt;/*&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>How to List Sqlite tables</title>
    <id>https://waylonwalker.com/how-to-list-sqlite-tables/</id>
    <updated>2024-04-23T20:03:27Z</updated>
    <published>2024-04-23T20:03:27Z</published>
    <link href="https://waylonwalker.com/how-to-list-sqlite-tables/" rel="alternate" type="text/html"></link>
    <summary type="text">You can inspect sqlite tables with the sqlite shell.</summary>
    <content type="html">&lt;p&gt;You can inspect sqlite tables with the sqlite shell.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;note that you get into the shell with &lt;code&gt;sqlite3 database.db&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tables&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I also learned that &lt;code&gt;.tables&lt;/code&gt;, &lt;code&gt;.index&lt;/code&gt; and &lt;code&gt;.schema&lt;/code&gt; are helper functions that&#xA;query the &lt;code&gt;sqlite_master&lt;/code&gt; table on the &lt;code&gt;main&lt;/code&gt; database.&lt;/p&gt;&#xA;&lt;p&gt;Here is an output from my redka database.  The sqlite_master table contains all&#xA;the sqlite objects type, name, tbl_name, rootpage, and sql to create them.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ sqlite3 database.db &lt;span class=&#34;s2&#34;&gt;&amp;#34;SELECT * from sqlite_master;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;table&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;rkey&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;rkey&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;2&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;CREATE TABLE rkey &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    id       integer primary key,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    key      text not null,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;type&lt;/span&gt;     integer not null,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        version  integer not null,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    etime    integer,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        mtime    integer not null&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;index&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;rkey_key_idx&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;rkey&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;3&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;CREATE UNIQUE INDEX rkey_key_idx on rkey &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;key&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;index&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;rkey_etime_idx&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;rkey&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;4&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;CREATE INDEX rkey_etime_idx on rkey &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;etime&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;where etime is not null&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;trigger&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;rkey_on_type_update&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;rkey&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;0&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;CREATE TRIGGER rkey_on_type_update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;before update of &lt;span class=&#34;nb&#34;&gt;type&lt;/span&gt; on rkey&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; each row&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;when old.type is not new.type&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;begin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt; raise&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;abort, &lt;span class=&#34;s1&#34;&gt;&amp;#39;key type mismatch&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;end&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;table&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;rstring&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;rstring&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;5&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;CREATE TABLE rstring &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    key_id integer not null,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    value  blob not null,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    foreign key &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;key_id&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; references rkey &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;id&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          on delete cascade&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;index&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;rstring_pk_idx&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;rstring&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;6&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;CREATE UNIQUE INDEX rstring_pk_idx on rstring &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;key_id&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;view&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;vstring&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;vstring&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;0&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;CREATE VIEW vstring as&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    rkey.id as key_id, rkey.key, rstring.value,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        datetime&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;etime/1000, &lt;span class=&#34;s1&#34;&gt;&amp;#39;unixepoch&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; as etime,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        datetime&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;mtime/1000, &lt;span class=&#34;s1&#34;&gt;&amp;#39;unixepoch&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; as mtime&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  from rkey join rstring on rkey.id &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; rstring.key_id&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  where rkey.type &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    and &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;rkey.etime is null or rkey.etime &amp;gt; unixepoch&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;subsec&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;table&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;rhash&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;rhash&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;7&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;CREATE TABLE rhash &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    key_id integer not null,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    field text not null,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    value blob not null,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    foreign key &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;key_id&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; references rkey &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;id&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      on delete cascade&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;index&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;rhash_pk_idx&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;rhash&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;8&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;CREATE UNIQUE INDEX rhash_pk_idx on rhash &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;key_id, field&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;index&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;rhash_key_id_idx&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;rhash&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;9&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;CREATE INDEX rhash_key_id_idx on rhash &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;key_id&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;view&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;vhash&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;vhash&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;0&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;CREATE VIEW vhash as&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    rkey.id as key_id, rkey.key, rhash.field, rhash.value,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        datetime&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;etime/1000, &lt;span class=&#34;s1&#34;&gt;&amp;#39;unixepoch&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; as etime,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        datetime&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;mtime/1000, &lt;span class=&#34;s1&#34;&gt;&amp;#39;unixepoch&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; as mtime&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  from rkey join rhash on rkey.id &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; rhash.key_id&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  where rkey.type &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    and &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;rkey.etime is null or rkey.etime &amp;gt; unixepoch&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;subsec&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Redka Runs on SQLite</title>
    <id>https://waylonwalker.com/redka-runs-on-sqlite/</id>
    <updated>2024-04-22T19:54:24Z</updated>
    <published>2024-04-22T19:54:24Z</published>
    <link href="https://waylonwalker.com/redka-runs-on-sqlite/" rel="alternate" type="text/html"></link>
    <summary type="text">With the liscense changes to redis there are several new forks out there. One that I am particularly interested in is redka.</summary>
    <content type="html">&lt;p&gt;With the liscense changes to redis there are several new forks out there.  One&#xA;that I am particularly interested in is&#xA;&lt;a href=&#34;https://github.com/nalgeon/redka&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;redka&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl https://i.jpillora.com/nalgeon/redka &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod +x redka&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./redka database.db&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We now have redis running on port 6379 that we can connect to with a redis&#xA;client. And we have a sqlite database that we can inspect.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ sqlite3 database.db &lt;span class=&#34;s2&#34;&gt;&amp;#34;SELECT name FROM sqlite_master;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rkey&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rkey_key_idx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rkey_etime_idx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rkey_on_type_update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rstring&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rstring_pk_idx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vstring&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rhash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rhash_pk_idx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rhash_key_id_idx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vhash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We can look at the values in the vstring table.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sqlite3 database.db &lt;span class=&#34;s2&#34;&gt;&amp;#34;SELECT * from vstring;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;1&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;hi&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;hello there you&lt;span class=&#34;o&#34;&gt;||&lt;/span&gt;2024-04-17 01:46:26&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Am I vulnerable to the xz backdoor?</title>
    <id>https://waylonwalker.com/am-i-vulnerable-to-the-xz-backdoor/</id>
    <updated>2024-04-21T07:53:54Z</updated>
    <published>2024-04-21T07:53:54Z</published>
    <link href="https://waylonwalker.com/am-i-vulnerable-to-the-xz-backdoor/" rel="alternate" type="text/html"></link>
    <summary type="text">The main system that I am concerned about is my arch BTW machine. I found a great article from the official archlinux site covering it.</summary>
    <content type="html">&lt;p&gt;The main system that I am concerned about is my arch BTW machine. I found a&#xA;great &lt;a href=&#34;https://archlinux.org/news/the-xz-package-has-been-backdoored/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/archlinux.org.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/archlinux.org.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;article&lt;/a&gt;&#xA;from the official archlinux site covering it.&lt;/p&gt;&#xA;&lt;p&gt;For my machine I am concerned with this line.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The xz packages prior to version 5.6.1-2 (specifically 5.6.0-1 and 5.6.1-1)&#xA;contain this backdoor.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I checked my xz package with &lt;a href=&#34;/paru/&#34; class=&#34;glossary-term&#34; title=&#34;paru is a package manager for archlinux that installs packages from the &lt;a href=&#34;/aur/&#34; class=&#34;glossary-term&#34; title=&#34;Arch User Repository, a collection of community maintained packages for archlinux.&#34;&gt;AUR&lt;/a&gt;.&#34;&gt;paru&lt;/a&gt;, and I am good.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;paru -Qii zx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>arch dependencies</title>
    <id>https://waylonwalker.com/arch-dependencies/</id>
    <updated>2024-04-20T07:42:21Z</updated>
    <published>2024-04-20T07:42:21Z</published>
    <link href="https://waylonwalker.com/arch-dependencies/" rel="alternate" type="text/html"></link>
    <summary type="text">paru has some nice features that I rarely use, and hav to look up when I need them. Here are two commands to help with dependency management.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;/paru/&#34; class=&#34;glossary-term&#34; title=&#34;paru is a package manager for archlinux that installs packages from the &lt;a href=&#34;/aur/&#34; class=&#34;glossary-term&#34; title=&#34;Arch User Repository, a collection of community maintained packages for archlinux.&#34;&gt;AUR&lt;/a&gt;.&#34;&gt;paru&lt;/a&gt; has some nice features that I rarely use, and hav to look up when I need&#xA;them.  Here are two commands to help with dependency management.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ paru -Qii nodejs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Name            : nodejs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Version         : 21.7.2-1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Description     : Evented I/O &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; V8 javascript&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Architecture    : x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;URL             : https://nodejs.org/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Licenses        : MIT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Groups          : None&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Provides        : None&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Depends On      : icu  libuv  libnghttp2  libnghttp3  libngtcp2  openssl  zlib  brotli  c-ares&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Optional Deps   : npm: nodejs package manager &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;installed&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Required By     : node-gyp  nodejs-nopt  npm  semver&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Optional For    : None&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Conflicts With  : None&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Replaces        : None&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Installed Size  : 46.86 MiB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Packager        : Felix Yan &amp;lt;felixonmars@archlinux.org&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Build Date      : Thu &lt;span class=&#34;m&#34;&gt;04&lt;/span&gt; Apr &lt;span class=&#34;m&#34;&gt;2024&lt;/span&gt; 05:11:09 AM CDT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Install Date    : Mon &lt;span class=&#34;m&#34;&gt;15&lt;/span&gt; Apr &lt;span class=&#34;m&#34;&gt;2024&lt;/span&gt; 07:27:02 AM CDT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Install Reason  : Installed as a dependency &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; another package&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Install Script  : No&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Validated By    : Signature&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Backup Files    : None&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Extended Data   : &lt;span class=&#34;nv&#34;&gt;pkgtype&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;pkg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can check all the packages depended on by nodejs by running the following.&#xA;This is everything from all of the repos you have configured, not what you have&#xA;installed.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ pactree --reverse --sync --depth &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; nodejs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nodejs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─acorn&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─ansible-language-server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─asar&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─babel-cli&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─babel-core&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─bash-language-server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─blinksocks&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─bower&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─browserify&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─coffeescript&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─dot-language-server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─emscripten&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─eslint&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─eslint-language-server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─eslint_d&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─gitlab&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─gnomon&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─grunt-cli&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─gtop&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─gulp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─hedgedoc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─jake&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─markdownlint-cli2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─marked&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─marked-man&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─matrix-appservice-irc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─modclean&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─node-gyp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─nodejs-emojione&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─nodejs-material-design-icons&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─nodejs-nopt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─nodejs-source-map&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─nodejs-yaml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─npm&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─openui5&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─pm2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─prettier&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─pyright&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─rapydscript-ng&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─s3rver&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─semver&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─serverless&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─stylelint&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─stylus&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─svelte-language-server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─tailwindcss-language-server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─ts-node&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─typescript&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─typescript-svelte-plugin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─uglify-js&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─vscode-css-languageserver&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─vscode-html-languageserver&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─vscode-json-languageserver&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─vue-language-server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─vue-typescript-plugin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─wasm-bindgen&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─web-ext&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─wrangler&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─yaml-language-server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─yarn&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>copier trust</title>
    <id>https://waylonwalker.com/copier-trust/</id>
    <updated>2024-04-19T20:41:06Z</updated>
    <published>2024-04-19T20:41:06Z</published>
    <link href="https://waylonwalker.com/copier-trust/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently had to update my copier-gallery command to trust my own templates because some of them have shell scripts that run afterwards. Be warned that this...</summary>
    <content type="html">&lt;p&gt;I recently had to update my copier-gallery command to trust my own templates&#xA;because some of them have shell scripts that run afterwards.  Be warned that&#xA;this could be a dangerous feature to run on random templates you get off the&#xA;internet, but these are all mine, so if I wreck it its my own fault.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;copier copy --trust &amp;lt;template&amp;gt; &amp;lt;destination&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;All the the copier copy api can be found with help.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ copier copy --help&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;copier copy 8.3.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Copy from a template &lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; to a destination.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Usage:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    copier copy &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;SWITCHES&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; template_src destination_path&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Hidden-switches:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -h, --help                         Prints this &lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt; message and quits&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --help-all                         Prints &lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt; messages of all sub-commands and quits&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -v, --version                      Prints the program&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;s version and quits&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Switches:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -C, --no-cleanup                   On error, &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt; not delete destination &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; it was&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       created by Copier.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --UNSAFE, --trust                  Allow templates with unsafe features &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Jinja&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       extensions, migrations, tasks&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -a, --answers-file VALUE:str       Update using this path &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;relative to&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;destination_path&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; to find the answers file&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -d, --data &lt;span class=&#34;nv&#34;&gt;VARIABLE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;VALUE:str      Make VARIABLE available as VALUE when rendering the&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       template&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; may be given multiple &lt;span class=&#34;nb&#34;&gt;times&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -f, --force                        Same as &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;--defaults --overwrite&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -g, --prereleases                  Use prereleases to compare template VCS tags.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -l, --defaults                     Use default answers to questions, which might be&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       null &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; not specified.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -n, --pretend                      Run but &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt; not make any changes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -q, --quiet                        Suppress status output&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -r, --vcs-ref VALUE:str            Git reference to checkout in &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;template_src&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;. If you&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt; not specify it, it will try to checkout the&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       latest git tag, as sorted using the PEP &lt;span class=&#34;m&#34;&gt;440&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       algorithm. If you want to checkout always the&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       latest version, use &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;--vcs-ref&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;HEAD&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -s, --skip VALUE:str               Skip specified files &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; they exist already&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; may be&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       given multiple &lt;span class=&#34;nb&#34;&gt;times&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -w, --overwrite                    Overwrite files that already exist, without asking.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -x, --exclude VALUE:str            A name or shell-style pattern matching files or&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       folders that must not be copied&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; may be given&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       multiple &lt;span class=&#34;nb&#34;&gt;times&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>ipython f2</title>
    <id>https://waylonwalker.com/ipython-f2/</id>
    <updated>2024-04-18T20:40:41Z</updated>
    <published>2024-04-18T20:40:41Z</published>
    <link href="https://waylonwalker.com/ipython-f2/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I accidentally ran f2 in ipython to discover that it opens your $EDITOR! I use this feature quite often in zsh, it is bound to for me, and since I have...</summary>
    <content type="html">&lt;p&gt;Today I accidentally ran f2 in ipython to discover that it opens your $EDITOR!&#xA;I use this feature quite often in zsh, it is bound to &lt;code&gt;&amp;lt;c-e&amp;gt;&lt;/code&gt; for me, and since&#xA;I have my environment variable &lt;code&gt;EDITOR&lt;/code&gt; set to &lt;code&gt;nvim&lt;/code&gt; it opens nvim when I hit&#xA;&lt;code&gt;&amp;lt;c-e&amp;gt;&lt;/code&gt;.  Today I discovered that Ipython has this bound to &lt;code&gt;F2&lt;/code&gt;.  If you know&#xA;how to set it to &lt;code&gt;&amp;lt;c-e&amp;gt;&lt;/code&gt; let me know I’ve tried, a lot.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;EDITOR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;nvim&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ipython&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;F2&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;better yet add &lt;code&gt;export EDITOR=nvim&lt;/code&gt; to your .zshrc&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ~/.zshrc&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;EDITOR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;nvim&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>sqlmodel indexes</title>
    <id>https://waylonwalker.com/sqlmodel-indexes/</id>
    <updated>2024-04-17T21:55:25Z</updated>
    <published>2024-04-17T21:55:25Z</published>
    <link href="https://waylonwalker.com/sqlmodel-indexes/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve really been enjoying using sqlmodel for my projects that need a database. One thing that I definitely lacked on for too long was indexing my database. I...</summary>
    <content type="html">&lt;p&gt;I’ve really been enjoying using sqlmodel for my projects that need a database.&#xA;One thing that I definitely lacked on for too long was indexing my database.  I&#xA;hit a point with one database where it was taking 7s for pretty simple&#xA;paginated queries to return 10 records.&lt;/p&gt;&#xA;&lt;p&gt;For every field that you will be querying on, you can create an index, by&#xA;setting it equal to &lt;code&gt;Field(index=True)&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Hero&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SQLModel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Field&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;primary_key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Field&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;secret_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;age&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Field&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;example courtesy of the docs&lt;/em&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; primary keys are indexed by default.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/div&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The docs cover this pretty well, and in quite depth - &lt;a href=&#34;https://sqlmodel.tiangolo.com/tutorial/indexes/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/sqlmodel.tiangolo.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/sqlmodel.tiangolo.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Optimizing Queries&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>python inline snapshot</title>
    <id>https://waylonwalker.com/python-inline-snapshot/</id>
    <updated>2024-04-17T13:32:53Z</updated>
    <published>2024-04-17T13:32:53Z</published>
    <link href="https://waylonwalker.com/python-inline-snapshot/" rel="alternate" type="text/html"></link>
    <summary type="text">is a new tool that I am trying out for python testing. It takes snapshots of your outputs and places them inline with the test.</summary>
    <content type="html">&lt;p&gt;&lt;code&gt;inline-snapshot&lt;/code&gt; is a new tool that I am trying out for python testing.  It&#xA;takes snapshots of your outputs and places them inline with the test.&lt;/p&gt;&#xA;&lt;p&gt;Here is the most basic starter.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;inline_snapshot&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;test_one&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;assert&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;snapshot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now when I run &lt;code&gt;pytest&lt;/code&gt; my tests will &lt;strong&gt;fail&lt;/strong&gt; because my assert has no value, but if I&#xA;run &lt;code&gt;pytest --inline-snapshot=create&lt;/code&gt; it will fill out my snapshot values and the&#xA;file will then look like this.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;inline_snapshot&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;test_one&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;assert&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;snapshot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;It also works with pydantic models.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;MyModel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BaseModel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;age&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;nickname&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;test_my_model_instance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;assert&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MyModel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Waylon&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;age&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;snapshot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MyModel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Waylon&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;age&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;test_my_model_fields&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;me&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MyModel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Waylon&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;age&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;nickname&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Waylon&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;assert&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;me&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;snapshot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Waylon&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;assert&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;me&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;age&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;snapshot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;assert&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;me&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nickname&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;snapshot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Waylon&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nalgeon redka</title>
    <id>https://waylonwalker.com/nalgeon-redka/</id>
    <updated>2024-04-17T12:06:05Z</updated>
    <published>2024-04-17T12:06:05Z</published>
    <link href="https://waylonwalker.com/nalgeon-redka/" rel="alternate" type="text/html"></link>
    <summary type="text">nalgeon has done a fantastic job with redka. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/nalgeon&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nalgeon&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/nalgeon/redka&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;redka&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Redis re-implemented with SQLite&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>sqlite vacuum</title>
    <id>https://waylonwalker.com/sqlite-vacuum/</id>
    <updated>2024-04-16T21:31:24Z</updated>
    <published>2024-04-16T21:31:24Z</published>
    <link href="https://waylonwalker.com/sqlite-vacuum/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I learned how to VACUUM a sqlite database and cut its size in about half. It&#39;s a database that I have had running for quite awhile and has some decent...</summary>
    <content type="html">&lt;p&gt;Today I learned how to VACUUM a sqlite database and cut its size in about half.&#xA;It’s a database that I have had running for quite awhile and has some decent&#xA;traffic on it.&lt;/p&gt;&#xA;&lt;p&gt;Why is it important to do a VACUUM? In short its becuase the file system gets&#xA;fragmented with as data is updated. On delete the files are removed from the&#xA;database and marked as available for reuse in the filesystem, but the space is&#xA;not reclaimed.&lt;/p&gt;&#xA;&lt;p&gt;To VACUUM a database, run the following sql command.  You can do it right form&#xA;the sqlite shell by running &lt;code&gt;sqlite3&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;You will need about double the current size of the database as free space to&#xA;do the VACUUM, you need space for a full copy, journaling or write ahead&#xA;logs, and the existing database.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;VACUUM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The docs are fantastic for &lt;a href=&#34;https://www.sqlite.org/lang_vacuum.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.sqlite.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.sqlite.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vacuum&lt;/a&gt;.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Tailwind Animations</title>
    <id>https://waylonwalker.com/tailwind-animations/</id>
    <updated>2024-04-15T21:19:21Z</updated>
    <published>2024-04-15T21:19:21Z</published>
    <link href="https://waylonwalker.com/tailwind-animations/" rel="alternate" type="text/html"></link>
    <summary type="text">I learned that tailwind animations are pretty easy to add only needing a few classes. For some reason though my brain broke, thinking that I could...</summary>
    <content type="html">&lt;p&gt;I learned that tailwind animations are pretty easy to add only needing a few&#xA;classes.  For some reason though my brain broke, thinking that I could&#xA;dynamically change the number and you can’t cause there are only so many pre&#xA;compiled classes without using an arbitrary value with brackets.&lt;/p&gt;&#xA;&lt;p&gt;Here are the classes that I used to transition my colors very slowly.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;square&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;transition-colors ease-in-out duration-700&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And the entire square element.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;square&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;w-16 h-16 bg-rose-500 rounded border border-4 border-rose-800 hover:bg-indigo-600 hover:border-yellow-500 transition-colors ease-in-out duration-700&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>How to kill ollama server</title>
    <id>https://waylonwalker.com/how-to-kill-ollama-server/</id>
    <updated>2024-04-14T18:31:36Z</updated>
    <published>2024-04-14T18:31:36Z</published>
    <link href="https://waylonwalker.com/how-to-kill-ollama-server/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently updated ollama, and it now installs a systemd service that I was not expecting. Seems like a great option, but I hadn&#39;t expeted this and I was...</summary>
    <content type="html">&lt;p&gt;I recently updated &lt;a href=&#34;https://ollama.com/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/ollama.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/ollama.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ollama&lt;/a&gt;, and it now installs a systemd&#xA;service that I was not expecting.  Seems like a great option, but I hadn’t&#xA;expeted this and I was able to kill it previously.  It was using up gpu, and I&#xA;do other things on my machine with a gpu.  I tried pkill, kill, and everything,&#xA;it was still coming back.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;No matter what it comes back&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# stop it&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl stop ollama.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# disable it if you want&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl disable ollama.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# confirm its status&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl status ollama.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can confirm this with the following command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# checking running processes&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ps aux &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep ollama&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pgrep ollama&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# checking gpu processes&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gpustat --show-cmd --show-pid&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Next time you want to start you can do it as before with &lt;code&gt;ollama serve&lt;/code&gt;.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Composing Typer clis</title>
    <id>https://waylonwalker.com/composing-typer-clis/</id>
    <updated>2024-04-13T08:27:26Z</updated>
    <published>2024-04-13T08:27:26Z</published>
    <link href="https://waylonwalker.com/composing-typer-clis/" rel="alternate" type="text/html"></link>
    <summary type="text">Typer makes it easy to compose your cli applications, like you might with a web router if you are more familiar with that. This allows you to build smaller...</summary>
    <content type="html">&lt;p&gt;Typer makes it easy to compose your cli applications, like you might with a web&#xA;router if you are more familiar with that.  This allows you to build smaller&#xA;applications that compose into a larger application.&lt;/p&gt;&#xA;&lt;p&gt;You will see similar patterns in the wild, namely the &lt;code&gt;aws&lt;/code&gt; cli which always&#xA;has the &lt;code&gt;aws &amp;lt;command&amp;gt; &amp;lt;subcommand&amp;gt;&lt;/code&gt; pattern.&lt;/p&gt;&#xA;&lt;p&gt;Lets setup the cli app itself first.  You can put it in &lt;code&gt;project/cli/cli.py&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;typer&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;project.cli.api&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;api_app&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;project.cli.config&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;config_app&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;project.cli.user&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;user_app&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;project.cli.run&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;run_app&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;app&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;typer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Typer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_typer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;api_app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;api&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_typer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;config_app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;config&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_typer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;user_app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;user&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_typer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run_app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;run&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Creating an app that will become a command is the same as creating a regular&#xA;app in Typer.  We need to create a callback that will become our command, and a&#xA;command that will become our subcommand in the parent app.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;typer&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;rich.console&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Console&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;project.config&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_config&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;config_app&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;typer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Typer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@config_app.callback&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;model cli&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@config_app.command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;project_config&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;Console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fokais_config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Setting up the entrypoint in pyproject.toml.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;project&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;scripts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;# &amp;lt;- this project is part of the config DO NOT change it&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;project&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;project.cli.cli:app&amp;#34;&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;# &amp;lt;- This project is the project name, DO change it&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now you can see each cli application as a sub command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ project --help&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; Usage: project &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;OPTIONS&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; COMMAND &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;ARGS&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;╭─ Options ─────────────────────────────────────────────────────────────────────────────────────────╮&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ --install-completion  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;bash&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;zsh&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;fish&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;powershell&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;pwsh&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  Install completion &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; the specified shell.│&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                                                        &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;default: None&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;                            │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ --show-completion     &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;bash&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;zsh&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;fish&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;powershell&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;pwsh&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  Show completion &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; the specified shell,   │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                                                        to copy it or customize the installation.  │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                                                        &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;default: None&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;                            │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ --help                                                 Show this message and exit.                │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;╰───────────────────────────────────────────────────────────────────────────────────────────────────╯&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;╭─ Commands ────────────────────────────────────────────────────────────────────────────────────────╮&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ api                        model cli                                                              │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ config                     config cli                                                             │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ user                       user cli                                                               │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ run                        run cli                                                                │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;╰───────────────────────────────────────────────────────────────────────────────────────────────────╯&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In the example above we can run the command &lt;code&gt;project config show&lt;/code&gt; to see the&#xA;current configuration of our project.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tailwind arbitrary values</title>
    <id>https://waylonwalker.com/tailwind-custom-size/</id>
    <updated>2024-04-12T21:21:42Z</updated>
    <published>2024-04-12T21:21:42Z</published>
    <link href="https://waylonwalker.com/tailwind-custom-size/" rel="alternate" type="text/html"></link>
    <summary type="text">I learned not to fear the arbitrary size feature of tailwind. While building out reader.waylonwalker.com I kept getting content flowing off the screen, and...</summary>
    <content type="html">&lt;p&gt;I learned not to fear the arbitrary size feature of tailwind.  While building&#xA;out &lt;a href=&#34;https://reader.waylonwalker.com&#34;&gt;reader.waylonwalker.com&lt;/a&gt; I kept getting&#xA;content flowing off the screen, and struggling to keep it on the screen.  I&#xA;really felt that I should be able to do this with vanilla tailwind, but after&#xA;some encouragement from Twitter I decided to lean on arbitrary values and it&#xA;worked.&lt;/p&gt;&#xA;&lt;p&gt;Don’t fear the arbitrary values.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;li&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;max-w-[100vw]&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;li&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Learn more about using-arbitrary-values from their docs&#xA;&lt;a href=&#34;https://tailwindcss.com/docs/adding-custom-styles#using-arbitrary-values&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/tailwindcss.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/tailwindcss.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;docs&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>fix npm global install needs sudo</title>
    <id>https://waylonwalker.com/fix-npm-global-install-needs-sudo/</id>
    <updated>2024-04-11T13:28:17Z</updated>
    <published>2024-04-11T13:28:17Z</published>
    <link href="https://waylonwalker.com/fix-npm-global-install-needs-sudo/" rel="alternate" type="text/html"></link>
    <summary type="text">Each time I go to set up npm I am frustrated by the errors saying that I don&#39;t have permission to , and it&#39;s frustrating. And I forget what I need to do to...</summary>
    <content type="html">&lt;p&gt;Each time I go to set up npm I am frustrated by the errors saying that I don’t&#xA;have permission to &lt;code&gt;npm i -g &amp;lt;package&amp;gt;&lt;/code&gt;, and it’s frustrating.  And I forget&#xA;what I need to do to tell npm to install packages in a directory I own, and my&#xA;shell to look there so that I can use the executables.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir ~/.npm-global&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;NPM_CONFIG_PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;~/.npm-global&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;:~/.npm-global/bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;For the fix to remain persistent you need to put these two lines in your shell&#xA;profile like &lt;code&gt;~/.bashrc&lt;/code&gt; or &lt;code&gt;~/.zshrc&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;NPM_CONFIG_PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;~/.npm-global&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;:~/.npm-global/bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>One Day Build - Play Outside</title>
    <id>https://waylonwalker.com/odb-play-outside/</id>
    <updated>2024-04-10T12:32:20Z</updated>
    <published>2024-04-10T12:32:20Z</published>
    <link href="https://waylonwalker.com/odb-play-outside/" rel="alternate" type="text/html"></link>
    <summary type="text">Inspired by Adam Savage and his One Day builds on youtube. I often build things, and want to make them generally useful for others and over configure out of...</summary>
    <content type="html">&lt;p&gt;Inspired by Adam Savage and his One Day builds on youtube.  I often build&#xA;things, and want to make them generally useful for others and over configure&#xA;out of the gate.  This project is purely for me inspired by a need I have.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://play-outside.wayl.one/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/play-outside.wayl.one.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/play-outside.wayl.one.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;play-outside&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;how-to&#34;&gt;!How-To &lt;a href=&#34;#how-to&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This post will not directly show how to make a weather app, but document the&#xA;process that I went through to make mine.  It will show the tools that I used&#xA;to make it, and the final result.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-situation&#34;&gt;The Situation &lt;a href=&#34;#the-situation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It often goes in our house ask dad while he is busy and he will probably just&#xA;say yes without thinking much.  This happens a lot when kids ask to go&#xA;outside.  I think sure, go for it, you will figure it out.  Then my wife walks&#xA;in and asks where they are, followed by, did you even check the weather, its&#xA;-11 degrees outside right now.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I need a tool for this decision making process&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;lungs&#34;&gt;Lungs &lt;a href=&#34;#lungs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You we have a family of not the most heathly lungs, we have my wife with lung&#xA;cancer, one lung missing, and kids with asthma.  We need to account for&#xA;temperature, humidity, wind chill, and air quality before heading outside and&#xA;seeing the repercussions of it later.&lt;/p&gt;&#xA;&lt;h2 id=&#34;final-result&#34;&gt;Final result &lt;a href=&#34;#final-result&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;So this is what I built, its a web app that checks the weather and air quality&#xA;in your area and determines if its safe to go outside.  It will even recommend&#xA;limiting your time, or wearing a coat.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://play-outside.wayl.one/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://play-outside.wayl.one&amp;amp;height=1200&amp;amp;width=600&amp;amp;scaled_width=600&amp;amp;scaled_height=1200&amp;amp;selectors=&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-stack&#34;&gt;The Stack &lt;a href=&#34;#the-stack&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is a one day build, I have both kids at home from school, so this is&#xA;realistically only like 2-3 hours at most, so this has to be chosen based on&#xA;familiarity.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Docker&lt;/li&gt;&#xA;&lt;li&gt;k8s&lt;/li&gt;&#xA;&lt;li&gt;Python&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/fastapi/&#34; class=&#34;glossary-term&#34; title=&#34;FastAPI is a modern and efficient web framework for Python, built on top of the Starlette web framework, and pydantic for data validation and serialization.&#34;&gt;FastAPI&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;tailwind&lt;/li&gt;&#xA;&lt;li&gt;httpx&lt;/li&gt;&#xA;&lt;li&gt;OpenWeatherMap API&lt;/li&gt;&#xA;&lt;li&gt;ipwho.is&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This is the same stack (minue the apis) that I am using to build my startup&#xA;fokais.com with.  I am quite familiar with it and should be able to quickly&#xA;make progress with it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ tree&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Permissions Size User   Date Modified Git Name&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;drwxr-xr-x     - waylon &lt;span class=&#34;m&#34;&gt;16&lt;/span&gt; Jan 12:21   -N  .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.rw-r--r--  3.8k waylon &lt;span class=&#34;m&#34;&gt;16&lt;/span&gt; Jan 12:24   -N ├──  deployment.yaml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.rw-r--r--   &lt;span class=&#34;m&#34;&gt;278&lt;/span&gt; waylon &lt;span class=&#34;m&#34;&gt;16&lt;/span&gt; Jan 12:21   -N ├──  docker-compose.yml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.rw-r--r--   &lt;span class=&#34;m&#34;&gt;552&lt;/span&gt; waylon &lt;span class=&#34;m&#34;&gt;16&lt;/span&gt; Jan 12:20   -N ├──  Dockerfile&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.rw-r--r--   15k waylon &lt;span class=&#34;m&#34;&gt;15&lt;/span&gt; Jan 14:37   -N ├──  favicon.ico&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.rw-r--r--  1.9k waylon &lt;span class=&#34;m&#34;&gt;15&lt;/span&gt; Jan 15:58   -N ├──  justfile&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.rw-r--r--  1.1k waylon &lt;span class=&#34;m&#34;&gt;15&lt;/span&gt; Jan 11:39   -N ├──  LICENSE.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.rw-r--r--   51k waylon &lt;span class=&#34;m&#34;&gt;15&lt;/span&gt; Jan 14:38   -N ├──  package-lock.json&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.rw-r--r--    &lt;span class=&#34;m&#34;&gt;69&lt;/span&gt; waylon &lt;span class=&#34;m&#34;&gt;15&lt;/span&gt; Jan 14:38   -N ├──  package.json&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;drwxr-xr-x     - waylon &lt;span class=&#34;m&#34;&gt;16&lt;/span&gt; Jan 12:20   -N ├──  play_outside&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.rw-r--r--   &lt;span class=&#34;m&#34;&gt;138&lt;/span&gt; waylon &lt;span class=&#34;m&#34;&gt;16&lt;/span&gt; Jan 12:21   -N │  ├──  __about__.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.rw-r--r--   &lt;span class=&#34;m&#34;&gt;115&lt;/span&gt; waylon &lt;span class=&#34;m&#34;&gt;15&lt;/span&gt; Jan 11:39   -N │  ├──  __init__.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.rw-r--r--  7.5k waylon &lt;span class=&#34;m&#34;&gt;16&lt;/span&gt; Jan 08:14   -N │  ├──  api.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;drwxr-xr-x     - waylon &lt;span class=&#34;m&#34;&gt;15&lt;/span&gt; Jan 21:30   -N │  ├──  cli&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.rw-r--r--  3.5k waylon &lt;span class=&#34;m&#34;&gt;15&lt;/span&gt; Jan 21:30   -N │  │  └──  api.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.rw-r--r--  2.8k waylon &lt;span class=&#34;m&#34;&gt;16&lt;/span&gt; Jan 12:20   -N │  ├──  config.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.rw-r--r--  3.0k waylon &lt;span class=&#34;m&#34;&gt;15&lt;/span&gt; Jan 14:35   -N │  ├──  decorators.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.rw-r--r--    &lt;span class=&#34;m&#34;&gt;51&lt;/span&gt; waylon &lt;span class=&#34;m&#34;&gt;15&lt;/span&gt; Jan 14:50   -N │  └──  queries.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.rw-r--r--  2.2k waylon &lt;span class=&#34;m&#34;&gt;15&lt;/span&gt; Jan 15:16   -N ├──  pyproject.toml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.rw-r--r--   &lt;span class=&#34;m&#34;&gt;506&lt;/span&gt; waylon &lt;span class=&#34;m&#34;&gt;15&lt;/span&gt; Jan 11:39   -N ├──  README.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;drwxr-xr-x     - waylon &lt;span class=&#34;m&#34;&gt;15&lt;/span&gt; Jan 14:39   -N ├──  static&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.rw-r--r--   21k waylon &lt;span class=&#34;m&#34;&gt;16&lt;/span&gt; Jan 08:10   -N │  ├──  app.css&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.rw-r--r--   15k waylon &lt;span class=&#34;m&#34;&gt;15&lt;/span&gt; Jan 14:37   -N │  ├──  favicon.ico&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.rw-r--r--   47k waylon &lt;span class=&#34;m&#34;&gt;15&lt;/span&gt; Jan 14:32   -N │  └──  htmx.org@1.9.8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;drwxr-xr-x     - waylon &lt;span class=&#34;m&#34;&gt;15&lt;/span&gt; Jan 21:04   -N ├──  tailwind&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.rw-r--r--  6.2k waylon &lt;span class=&#34;m&#34;&gt;15&lt;/span&gt; Jan 21:04   -N │  └──  app.css&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.rw-r--r--   &lt;span class=&#34;m&#34;&gt;360&lt;/span&gt; waylon &lt;span class=&#34;m&#34;&gt;15&lt;/span&gt; Jan 21:04   -N ├──  tailwind.config.js&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;drwxr-xr-x     - waylon &lt;span class=&#34;m&#34;&gt;16&lt;/span&gt; Jan 12:16   -N ├──  templates&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.rw-r--r--  2.5k waylon &lt;span class=&#34;m&#34;&gt;16&lt;/span&gt; Jan 12:16   -N │  ├──  base.html&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.rw-r--r--  2.2k waylon &lt;span class=&#34;m&#34;&gt;16&lt;/span&gt; Jan 12:11   -N │  ├──  card.html&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.rw-r--r--   &lt;span class=&#34;m&#34;&gt;151&lt;/span&gt; waylon &lt;span class=&#34;m&#34;&gt;15&lt;/span&gt; Jan 21:07   -N │  ├──  includestyles.html&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.rw-r--r--   &lt;span class=&#34;m&#34;&gt;418&lt;/span&gt; waylon &lt;span class=&#34;m&#34;&gt;16&lt;/span&gt; Jan 12:12   -N │  └──  index.html&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;drwxr-xr-x     - waylon &lt;span class=&#34;m&#34;&gt;15&lt;/span&gt; Jan 11:39   -N └──  tests&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.rw-r--r--   &lt;span class=&#34;m&#34;&gt;115&lt;/span&gt; waylon &lt;span class=&#34;m&#34;&gt;15&lt;/span&gt; Jan 11:39   -N    └──  __init__.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;&lt;a href=&#34;/htmx/&#34; class=&#34;glossary-term&#34; title=&#34;htmx is a frontend javascript library for creating dynamic web applications.&#34;&gt;htmx&lt;/a&gt;-btw&#34;&gt;HTMX BTW &lt;a href=&#34;#htmx-btw&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have been pairing up htmx with this stack quite a lot lately, and its&#xA;fantastic, but honestly this idea just does not have a lot of endpoints, and I&#xA;don’t think it needs it for a one day build, just toss everything into one page&#xA;and call it good.&lt;/p&gt;&#xA;&lt;h2 id=&#34;getting-weather-data&#34;&gt;Getting Weather Data &lt;a href=&#34;#getting-weather-data&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The first thing we need is the feels_like or Apartment Temperature.  A quick&#xA;google search lead me to &lt;a href=&#34;https://openweathermap.org/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/openweathermap.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/openweathermap.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://openweathermap.org/&lt;/a&gt; they have a very nice&#xA;calculation for the feels like temerature already built in.&lt;/p&gt;&#xA;&lt;a href=&#34;https://openweathermap.org/&#34;&gt;&#xA;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://openweathermap.org/&amp;amp;height=450&amp;amp;width=800&amp;amp;scaled_width=800&amp;amp;scaled_height=450&amp;amp;selectors=&#34; alt=&#34;screenshot of https://openweathermap.org/&#34; height=&#34;450&#34; width=&#34;800&#34;/ data-glightbox=&#34;description: screenshot of https://openweathermap.org/&#34;&gt;&#xA;&lt;/a&gt;&#xA;&lt;p&gt;Now using openweathermap, we can get the feels like temperature, by latitude&#xA;and longitude.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_weather&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lat_long&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;httpx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AsyncClient&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://api.openweathermap.org/data/2.5/weather?units=imperial&amp;amp;lat=&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lat_long&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;latitude&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;amp;lon=&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lat_long&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;longitude&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;amp;appid=&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;open_weather_api_key&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;where-are-you&#34;&gt;Where are you?? &lt;a href=&#34;#where-are-you&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Since no one is going to know their current latitude and longitude we need a&#xA;way to look this up for it to actually be useful. For this I leaned on&#xA;&lt;a href=&#34;https://ipwhois.io/&#34; class=&#34;hoverlink  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/ipwhois.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/ipwhois.io.ico&#34;&gt;https://ipwhois.io/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;a href=&#34;https://ipwhois.io/&#34;&gt;&#xA;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://ipwhois.io/&amp;amp;height=450&amp;amp;width=800&amp;amp;scaled_width=800&amp;amp;scaled_height=450&amp;amp;selectors=&#34; alt=&#34;screenshot of https://ipwhois.io/&#34; height=&#34;450&#34; width=&#34;800&#34;/ data-glightbox=&#34;description: screenshot of https://ipwhois.io/&#34;&gt;&#xA;&lt;/a&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_lat_long&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ip_address&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ip_address&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;ip_address&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;140.177.140.75&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;httpx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AsyncClient&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://ipwho.is/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ip_address&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;decision-tree&#34;&gt;Decision Tree &lt;a href=&#34;#decision-tree&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;For this I punted over to chatGPT to see what it came up with.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-prompt&#34;&gt;I am working on a web app to tell kids if its ok to play outside.  It is&#xA;targeted towards kids living in the  midwest united states.   I have the feels&#xA;like temperature already.  Set some values for the temperature&#xA;&#xA;too cold,&#xA;no longer than 15 minutes,&#xA;coats required,&#xA;no longer than 15 minutes,&#xA;too hot&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;What it came up with wasn’t a terrible starting point, but its values&#xA;essentially said kids cant play in the snow.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;determine_play_condition&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;feels_like_temperature&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;feels_like_temperature&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;It&amp;#39;s too cold for extended play. Stay indoors and keep warm!&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;feels_like_temperature&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Perfect weather for snow play! Enjoy the winter wonderland!&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;feels_like_temperature&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;40&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Coats and winter gear required for outdoor play. Stay cozy!&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;40&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;feels_like_temperature&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;You can play in the snow, but limit your time. It&amp;#39;s getting warmer!&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;It&amp;#39;s too warm for snow play. Find other fun activities indoors!&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Example usage:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;feels_like_temp&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;25&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# Replace with the actual feels like temperature&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;determine_play_condition&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;feels_like_temp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;some-massaging-later&#34;&gt;Some Massaging Later &lt;a href=&#34;#some-massaging-later&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;My wife sent me over this image from&#xA;&lt;a href=&#34;https://tinkergarten.com/pages/weather-watch&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/tinkergarten.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/tinkergarten.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Tinkergarten&lt;/a&gt;, which is a chart&#xA;made by the Iowa Department of Public Health.  I used it as a guide to set some&#xA;values, and added some conditions based on visibility and air quality index&#xA;(aqi), which we have become all too familiar with over the past year with all&#xA;the forest fires out Western US causing our lungs issues here in the Midwest.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://d2gesac5hma2c2.cloudfront.net/uploads/attachment/file/84/weatherwatch2.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://d2gesac5hma2c2.cloudfront.net/uploads/attachment/file/84/weatherwatch2.png&#34; alt=&#34;This chart was produced by the Iowa Department of Public Health, Healthy Child Care Iowa through federal grant (MCJ19T029 &amp;amp; MCJ19KCC7) funds from the US Department of Health &amp;amp; Human Services, Health Resources &amp;amp; Services Administration, Maternal &amp;amp; Child Health Bureau. Wind-Chill and Heat Index information is from the National Weather Service. A search led us to the chart as posted on daycare.com&#34; style=&#34;width: 100%; max-width: 800px;&#34;/ data-glightbox=&#34;description: This chart was produced by the Iowa Department of Public Health, Healthy Child Care Iowa through federal grant (MCJ19T029 &amp;amp; MCJ19KCC7) funds from the US Department of Health &amp;amp; Human Services, Health Resources &amp;amp; Services Administration, Maternal &amp;amp; Child Health Bureau. Wind-Chill and Heat Index information is from the National Weather Service. A search led us to the chart as posted on daycare.com&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;(aqi) which we have become all too familiar with over the past year with all&#xA;the forest fires out Western US&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;determine_play_condition&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;weather&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;aqi&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;play_condition&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PlayCondition&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;feels_like_temperature&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;weather&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;main&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;feels_like&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;visibility&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;weather&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;visibility&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;play_condition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hours_till_sunset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;weather&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;after&amp;#34;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;play_condition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;play_condition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;bg-red-500&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;visibility&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;play_condition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;It&amp;#39;s too foggy. Find better activities inside!&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;play_condition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;bg-red-500&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;aqi&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;150&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;play_condition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;It&amp;#39;s too polluted. Find better activities inside!&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;play_condition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;bg-red-500&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;aqi&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;play_condition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;limit your time outside due to the poor air quality&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;play_condition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;bg-yellow-500&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;aqi&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;play_condition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Check the air quality outside at your discression.&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;play_condition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;bg-yellow-500&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;play_condition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;feels_like_temperature&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;play_condition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;It&amp;#39;s too cold. Stay indoors and keep warm!&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;play_condition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;bg-red-500&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;feels_like_temperature&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;play_condition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;You can play outside, but limit your time!&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;play_condition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;bg-yellow-500&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;feels_like_temperature&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;40&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;play_condition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s2&#34;&gt;&amp;#34;Coats and winter gear required for outdoor play. Stay cozy!&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;feels_like_temperature&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;play_condition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Grab a warm jacket and enjoy your time outside!&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;feels_like_temperature&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;60&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;play_condition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Grab some long sleeves and enjoy your time outside!&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;feels_like_temperature&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;90&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;play_condition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s2&#34;&gt;&amp;#34;You can play outside, but limit your time in this heat!&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;play_condition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;bg-yellow-500&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;feels_like_temperature&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;109&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;play_condition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s2&#34;&gt;&amp;#34;It&amp;#39;s too hot for outdoor play. Find cooler activities indoors!&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;play_condition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;color&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;bg-red-500&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;play_condition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Enjoy your time outside!&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;play_condition&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;pulling-the-data-together&#34;&gt;Pulling the data together &lt;a href=&#34;#pulling-the-data-together&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Since I will be needing all of the data together upon every request I put&#xA;together one &lt;code&gt;get_data&lt;/code&gt; function to return a dict of all of the data.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;forecast&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; I pulled the forecast endpoint from openweathermap as well, it looks like a&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;stripped down version of the regular weather endpoint, but every few hours&#xA;over the course of the next 5 days.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;user_ip&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;CF-Connecting-IP&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;lat_long&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_lat_long&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;user_ip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;weather&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_weather&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lat_long&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;forecast&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_forecast&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lat_long&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;air_quality&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_air_quality&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lat_long&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;weather&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;play_condition&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;determine_play_condition&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;weather&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;air_quality&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;list&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;main&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;aqi&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;forecast&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;play_condition&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;determine_play_condition&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;forecast&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fromtimestamp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;dt&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hour&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fromtimestamp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;dt&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hour&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;21&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;request.client&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;request.client.host&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;host&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;user_ip&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;user_ip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;lat_long&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lat_long&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;weather&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;weather&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;forecast&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;forecast&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;air_quality&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;air_quality&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;sunset&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;weather&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;sys&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;sunset&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;fastapi&#34;&gt;FastAPI &lt;a href=&#34;#fastapi&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Fastapi here is a great framework, it uses pydantic to validate the data&#xA;returned from the api, has a great dependency management system.&lt;/p&gt;&#xA;&lt;p&gt;I am going to use none of that, all I need is one TemplateResponse using jinja.&#xA;For good measure, I’ll toss in a &lt;code&gt;/metadata&lt;/code&gt; route that returns the data.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;fastapi&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;FastAPI&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;app&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;FastAPI&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@app.get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@no_cache&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_home&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;templates&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TemplateResponse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;index.html&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;request&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@app.get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/metadata&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;root&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;no-cache-header&#34;&gt;No Cache Header &lt;a href=&#34;#no-cache-header&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I had some issues with cloudflare caching me and not letting me hit the api&#xA;everytime.  I’ve ran into this several times in the past, so I went to the&#xA;cloudflare dashboard, manually busted the cache for the home route and popped a&#xA;&lt;code&gt;no_cache&lt;/code&gt; decorator on the &lt;code&gt;get_home&lt;/code&gt; route.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;no_cache&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;not_cached_routes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vm&#34;&gt;__module__&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vm&#34;&gt;__name__&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@wraps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;wrapper&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kwargs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# my_header will be now available in decorator&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;request&amp;#34;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;signature&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parameters&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;kwargs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;request&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inspect&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;iscoroutinefunction&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kwargs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kwargs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Cache-Control&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;no-cache, no-store, must-revalidate&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Pragma&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;no-cache&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Expires&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;response&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;wrapper&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@app.get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@no_cache&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_home&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;templates&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TemplateResponse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;index.html&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;request&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This solved my caching issues.&lt;/p&gt;&#xA;&lt;h2 id=&#34;templates&#34;&gt;Templates &lt;a href=&#34;#templates&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I used jinja for templating its built right into FastAPI.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;fastapi.templating&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Jinja2Templates&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;templates&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Jinja2Templates&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;templates&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This will get you by for quite awhile, and I probably could deal with templates&#xA;working just like this for a one day build, but I have some nice feautures that&#xA;I like from other projects, and at least one specific to just this project.&#xA;Once they are in my config object, I use them like so.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; The `request` parameter is a requirement for all templates.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/div&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@app.get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@no_cache&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_home&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;templates&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TemplateResponse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;index.html&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;request&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;globals&#34;&gt;Globals &lt;a href=&#34;#globals&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;I need a nice way to convert the openweathermap timestamps to human readable values.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;datetime&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;templates&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;globals&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;datetime&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then in jinja I can format the &lt;code&gt;weather.dt&lt;/code&gt; variable like so.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fromtimestamp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;weather&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strftime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;format&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;%A&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;putting-it-together&#34;&gt;Putting it together &lt;a href=&#34;#putting-it-together&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;I put a get_templates function in my config, and the config object is passed&#xA;the results as config.  Again I copy pasted a function &lt;code&gt;https_url_for&lt;/code&gt; from&#xA;my other project so that I can use &lt;code&gt;url_for&lt;/code&gt; in my templates and it work on&#xA;both localhost and production.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;os&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;datetime&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;datetime&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;timezone&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;fastapi.templating&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Jinja2Templates&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;rich.console&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Console&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;console&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@pass_context&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;https_url_for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path_params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Any&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;request&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;request&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;http_url&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url_for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path_params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;http_url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;replace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;http&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;https&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_templates&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BaseSettings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Jinja2Templates&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;templates&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Jinja2Templates&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;templates&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;templates&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filters&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;quote_plus&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;lambda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;u&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;quote_plus&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;u&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;templates&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filters&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;timestamp&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;lambda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;u&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fromtimestamp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;u&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tz&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;timezone&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;utc&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strftime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;%B &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%d&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;, %Y&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;templates&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;globals&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https_url_for&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;https_url_for&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;templates&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;globals&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;config&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;config&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;templates&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;globals&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;datetime&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;templates&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;globals&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;len&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;templates&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;globals&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;int&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Using environment: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;environ&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;ENV&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;environ&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;ENV&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;dev&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;qa&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;prod&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;templates&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;globals&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;url_for&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;https_url_for&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Using HTTPS&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Using HTTP&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;templates&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;styles&#34;&gt;Styles &lt;a href=&#34;#styles&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’ve been all in on tailwind lately.  I was a long holdout. I used Sass back in&#xA;2016/2017 when I was first getting into webdev, then went many years just&#xA;straight vanilla.  Tailwind just has some really well thought out color and&#xA;rythm that makes it easy.  I have also really been appreciating the locality of&#xA;behavior part of it.  I can make components in jinja with everything they need.&lt;/p&gt;&#xA;&lt;p&gt;I set up my &lt;code&gt;tailwind.config.js&lt;/code&gt; like so.  It includes the typography plugin&#xA;and some extra box shadows that are centered.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/** @type {import(&amp;#39;tailwindcss&amp;#39;).Config} */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;module&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;exports&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;templates/**/*.html&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;plugins&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;@tailwindcss/typography&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;theme&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;extend&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;boxShadow&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;xlc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;0 0 60px 15px rgba(0, 0, 0, 0.3)&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;lgc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;0 0 20px 0px rgba(0, 0, 0, 0.3)&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;For my &lt;code&gt;tailwind/app.css&lt;/code&gt; I set the background color of the page dark, text&#xA;white, and make the scrollbar not default.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;tailwind&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;base&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;tailwind&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;components&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;tailwind&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;utilities&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;html&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;scroll-behavior&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;smooth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;err&#34;&gt;@apply&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;bg-zinc-800&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;text-white&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;autofill&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bg-yellow-500&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;-webkit-scrollbar&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;err&#34;&gt;@apply&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;h-4&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;w-4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;-webkit-scrollbar-track&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;err&#34;&gt;@apply&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;rounded-full&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;bg-zinc-900&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;-webkit-scrollbar-track&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;err&#34;&gt;@apply&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;rounded-full&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;bg-pink-600&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;-webkit-scrollbar-thumb&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;err&#34;&gt;@apply&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;rounded-full&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;bg-zinc-600&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hover&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bg-zinc-500&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;-webkit-scrollbar-thumb&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;err&#34;&gt;@apply&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;rounded-full&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;bg-cyan-500&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hover&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bg-cyan-400&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;compiling-tailwind&#34;&gt;Compiling tailwind &lt;a href=&#34;#compiling-tailwind&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;I run tailwind using npx after first installing the typography plugin.  This&#xA;will use my &lt;code&gt;tailwind.config.js&lt;/code&gt; file, and the &lt;code&gt;tailwind/app.css&lt;/code&gt; file as&#xA;input, and output to &lt;code&gt;static/app.css&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; --watch will watch for changes, and automatically recompile as you make changes to any templates.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/div&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# install the typography plugin&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm i @tailwindcss/typography&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# compile the css&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npx tailwindcss --input tailwind/app.css --output static/app.css --watch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;deployment&#34;&gt;Deployment &lt;a href=&#34;#deployment&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;docker&#34;&gt;Docker &lt;a href=&#34;#docker&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;ci&#34;&gt;CI &lt;a href=&#34;#ci&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;k8s&#34;&gt;K8s &lt;a href=&#34;#k8s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;text-based&#34;&gt;TEXT BASED &lt;a href=&#34;#text-based&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://play-outside.wayl.one/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/play-outside.wayl.one.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/play-outside.wayl.one.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;play-outside&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>darkmode scrollbars</title>
    <id>https://waylonwalker.com/darkmode-scrollbars/</id>
    <updated>2024-04-10T11:56:38Z</updated>
    <published>2024-04-10T11:56:38Z</published>
    <link href="https://waylonwalker.com/darkmode-scrollbars/" rel="alternate" type="text/html"></link>
    <summary type="text">If you are designing a website in dark mode the scrollbars can be finicky to match the theme. Here is a pretty sane default that looks nice without being...</summary>
    <content type="html">&lt;p&gt;If you are designing a website in dark mode the scrollbars can be finicky to&#xA;match the theme.  Here is a pretty sane default that looks nice without being&#xA;obnoxiously contrast to the rest of the site.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;-webkit-scrollbar&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;-webkit-scrollbar-track&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;24&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;24&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;27&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;-webkit-scrollbar-track&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;39&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;39&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;42&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;-webkit-scrollbar-thumb&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;82&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;82&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;91&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;-webkit-scrollbar-thumb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;hover&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;113&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;113&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;122&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;-webkit-scrollbar-thumb&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;82&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;82&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;91&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;-webkit-scrollbar-thumb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;hover&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;113&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;113&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;122&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;-webkit-scrollbar-corner&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;39&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;39&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;42&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Want a rounded scrollbar thumb? add these styles.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;-webkit-scrollbar-thumb&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;border-radius&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.25&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;border-radius&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;9999&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;-webkit-scrollbar-thumb&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;border-radius&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.25&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;border-radius&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;9999&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This makes a very nice looking default darkmode scrollbar.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Udating Cloudflare Pages using the Wrangler cli</title>
    <id>https://waylonwalker.com/updating-cloudflare-pages-using-the-wrangler-cli/</id>
    <updated>2024-04-09T17:03:51Z</updated>
    <published>2024-04-09T17:03:51Z</published>
    <link href="https://waylonwalker.com/updating-cloudflare-pages-using-the-wrangler-cli/" rel="alternate" type="text/html"></link>
    <summary type="text">Before deploying to cloudflare pages with wrangler you need a cloudflare api token. You can get one at dash.cloudflare.com/profile/api-tokens.</summary>
    <content type="html">&lt;p&gt;Before deploying to cloudflare pages with wrangler you need a cloudflare api&#xA;token.  You can get one at&#xA;&lt;a href=&#34;https://dash.cloudflare.com/profile/api-tokens&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/dash.cloudflare.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/dash.cloudflare.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dash.cloudflare.com/profile/api-tokens&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/7b566e55-98ff-4d96-b0bc-3c4e5b619d68.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/7b566e55-98ff-4d96-b0bc-3c4e5b619d68.png&#34; alt=&#34;cloudflare-pages-api-token.png&#34;/ data-glightbox=&#34;description: cloudflare-pages-api-token.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;install-wrangler&#34;&gt;Install Wrangler &lt;a href=&#34;#install-wrangler&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Next install wrangler using npm.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm i -g wrangler&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;create-a-project&#34;&gt;Create a Project &lt;a href=&#34;#create-a-project&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Before you deploy to cloudflare pages you need to create a project.  You might&#xA;already have one, or you might want to create one in the webui, but you have&#xA;the option to create it at the command line with wrangler.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npx wrangler pages deploy markout --project-name reader-waylonwalker-com --branch markout&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;deploy&#34;&gt;Deploy &lt;a href=&#34;#deploy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now you can deploy your static application using wrangler to cloudflare pages.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;In this example I have my application built into the markout directory, and&#xA;since the production branch is named &lt;code&gt;markout&lt;/code&gt; I need to pass that in here as&#xA;well.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wrangler pages deploy markout --project-name reader-waylonwalker-com --branch markout&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>scheduling cron jobs in kubernetes</title>
    <id>https://waylonwalker.com/scheduling-cron-jobs-in-kubernetes/</id>
    <updated>2024-04-08T16:56:46Z</updated>
    <published>2024-04-08T16:56:46Z</published>
    <link href="https://waylonwalker.com/scheduling-cron-jobs-in-kubernetes/" rel="alternate" type="text/html"></link>
    <summary type="text">For my reader app I am using cronjobs to schedule my a new build and upload to cloudflare pages every hour. In this example I have built a docker image and...</summary>
    <content type="html">&lt;p&gt;For my reader app I am using cronjobs to schedule my a new build and upload to&#xA;cloudflare pages every hour.  In this example I have built a docker image&#xA;&lt;code&gt;docker.io/waylonwalker/reader-waylonwalker-com&lt;/code&gt; and pushed it to dockerhub.&#xA;It uses a &lt;code&gt;CLOUDFLARE_API_TOKEN&lt;/code&gt; secret to access cloudflare, and the&#xA;entrypoint itself does the build and upload.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;apiVersion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;v1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;kind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Namespace&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;creationTimestamp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;reader&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;namespace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;reader&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;---&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;apiVersion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;batch/v1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;kind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;CronJob&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;reader-cronjob&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;namespace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;reader&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;schedule&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;0 * * * *&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;successfulJobsHistoryLimit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;failedJobsHistoryLimit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;jobTemplate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;containers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;reader-container&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;docker.io/waylonwalker/reader-waylonwalker-com:latest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;CLOUDFLARE_API_TOKEN&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;valueFrom&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;secretKeyRef&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;cloudflare-secret&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;cloudflare-secret&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;restartPolicy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;OnFailure&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ DigitalHarbor7 DigitalHarbor</title>
    <id>https://waylonwalker.com/digitalharbor7-digitalharbor/</id>
    <updated>2024-04-07T19:23:52Z</updated>
    <published>2024-04-07T19:23:52Z</published>
    <link href="https://waylonwalker.com/digitalharbor7-digitalharbor/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? DigitalHarbor by DigitalHarbor7.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/DigitalHarbor7/DigitalHarbor&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;DigitalHarbor&lt;/a&gt; by &lt;a href=&#34;https://github.com/DigitalHarbor7&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;DigitalHarbor7&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ blueswen fastapi-observability</title>
    <id>https://waylonwalker.com/blueswen-fastapi-observability/</id>
    <updated>2024-04-07T19:05:14Z</updated>
    <published>2024-04-07T19:05:14Z</published>
    <link href="https://waylonwalker.com/blueswen-fastapi-observability/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about fastapi-observability, an amazing project by blueswen. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/blueswen/fastapi-observability&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fastapi-observability&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/blueswen&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;blueswen&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Observe &lt;a href=&#34;/fastapi/&#34; class=&#34;glossary-term&#34; title=&#34;FastAPI is a modern and efficient web framework for Python, built on top of the Starlette web framework, and pydantic for data validation and serialization.&#34;&gt;FastAPI&lt;/a&gt; app with three pillars of observability: Traces (Tempo), Metrics (Prometheus), Logs (Loki) on Grafana through OpenTelemetry and OpenMetrics.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>jinja macros</title>
    <id>https://waylonwalker.com/jinja-macros/</id>
    <updated>2024-04-07T14:54:08Z</updated>
    <published>2024-04-07T14:54:08Z</published>
    <link href="https://waylonwalker.com/jinja-macros/" rel="alternate" type="text/html"></link>
    <summary type="text">I am working on a page for htmx-patterns and I ran into a situation with lots of duplication. Especially when i am using tailwind I run into situations where...</summary>
    <content type="html">&lt;p&gt;I am working on a page for&#xA;&lt;a href=&#34;https://htmx-patterns.waylonwalker.com&#34;&gt;htmx-patterns&lt;/a&gt; and I ran into a&#xA;situation with lots of duplication.  Especially when i am using tailwind I run&#xA;into situations where the duplication can get tedious to maintiain.  The&#xA;solution I found is macros.&lt;/p&gt;&#xA;&lt;p&gt;Now I can use the same code for all of my links, and call the macro to use it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{% macro link(id, text, boosted=false) -%}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    {% if id is none %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;      pointer-events-none bg-terminal-950 text-terminal-900 ring-terminal-900&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    {% else %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;      bg-terminal-950 hover:bg-terminal-900 hover:text-terminal-400 text-terminal-500 shadow-lg shadow-terminal-300/20 hover:shadow-terminal-300/30 ring-terminal-300&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    {% endif %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;      cursor-pointer block text-center font-bold py-2 px-4 rounded w-full ring-1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    &amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;err&#34;&gt;{%&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;none&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;%}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;{{ url_for(&amp;#39;boosted&amp;#39;, id=id) }}&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;err&#34;&gt;{%&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;endif&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;%}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;err&#34;&gt;{%&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;boosted&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;%}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;hx-boost&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;err&#34;&gt;{%&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;endif&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;%}&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    {{ text }}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{%- endmacro %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;h2&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;text-3xl font-light mt-0 max-w-xl text-center prose-xl mt-8 text-terminal-500&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Boosted Links&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;h2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;flex flex-row gap-4&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    {{ link(prev_id, &amp;#39;Previous&amp;#39;, boosted=True) }}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    {{ link(next_id, &amp;#39;Next&amp;#39;, boosted=True) }}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;h2&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;text-3xl font-light mt-0 max-w-xl text-center prose-xl mt-8 text-terminal-500&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Normal Links&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;h2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;flex flex-row gap-4&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    {{ link(prev_id, &amp;#39;Previous&amp;#39;, boosted=False) }}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    {{ link(next_id, &amp;#39;Next&amp;#39;, boosted=False) }}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Avaiga taipy</title>
    <id>https://waylonwalker.com/avaiga-taipy/</id>
    <updated>2024-04-07T00:34:46Z</updated>
    <published>2024-04-07T00:34:46Z</published>
    <link href="https://waylonwalker.com/avaiga-taipy/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on taipy, created by Avaiga.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/Avaiga/taipy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;taipy&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/Avaiga&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Avaiga&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Turns Data and AI algorithms into production-ready web applications in no time.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>jinja loop variable and htmx</title>
    <id>https://waylonwalker.com/jinja-loop-variable-and-htmx/</id>
    <updated>2024-04-06T20:47:13Z</updated>
    <published>2024-04-06T20:47:13Z</published>
    <link href="https://waylonwalker.com/jinja-loop-variable-and-htmx/" rel="alternate" type="text/html"></link>
    <summary type="text">jinja has a loop variable that is very handy to use with htmx. Whether you want to implement a click to load more or an infinite scroll this loop variable is...</summary>
    <content type="html">&lt;p&gt;jinja has a loop variable that is very handy to use with &lt;a href=&#34;/htmx/&#34; class=&#34;glossary-term&#34; title=&#34;htmx is a frontend javascript library for creating dynamic web applications.&#34;&gt;htmx&lt;/a&gt;.  Whether you&#xA;want to implement a click to load more or an infinite scroll this loop variable&#xA;is very handy.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{% for person in persons %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;li&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;{%&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;loop&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;last&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;%}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;hx-get&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;{{ url_for(&amp;#39;infinite&amp;#39;, page=next_page) }}&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;hx-trigger&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;intersect once&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;hx-target&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;#persons&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;hx-swap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;beforeend&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;hx-indicator&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;#persons-loading&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;{%&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;endif&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;%}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;err&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;person&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;upper&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;}}&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;-&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;err&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;person&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;phone_number&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;}}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;li&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{% endfor %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now for every chunk of contacts that we load we will trigger the infinite&#xA;scroll by loading more once the last one has intersected the screen.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>fastapi jinja url_for with query params</title>
    <id>https://waylonwalker.com/fastapi-jinja-url_for-with-query-params/</id>
    <updated>2024-04-05T20:43:32Z</updated>
    <published>2024-04-05T20:43:32Z</published>
    <link href="https://waylonwalker.com/fastapi-jinja-url_for-with-query-params/" rel="alternate" type="text/html"></link>
    <summary type="text">Out of the box Starlette does not support url_for with query params it throws the following error.</summary>
    <content type="html">&lt;p&gt;Out of the box &lt;a href=&#34;/starlette/&#34; class=&#34;glossary-term&#34; title=&#34;Starlette is a low level web framework for modern (as of 2025) async python development most famously used by &lt;a href=&#34;/fastapi/&#34; class=&#34;glossary-term&#34; title=&#34;FastAPI is a modern and efficient web framework for Python, built on top of the Starlette web framework, and pydantic for data validation and serialization.&#34;&gt;FastAPI&lt;/a&gt;.&#34;&gt;Starlette&lt;/a&gt; does not support url_for with query params.  When&#xA;trying to use url_for with query params it throws the following error.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;starlette&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;routing&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;NoMatchFound&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;No&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;route&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;exists&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;infinite&amp;#34;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;params&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;page&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In my searching for this I found &lt;a href=&#34;https://github.com/encode/starlette/issues/560&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;starlette issue #560&lt;/a&gt; quite helpful, but not complete, as it did not work for me.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;jinja2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;hasattr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;jinja2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pass_context&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;pass_context&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;jinja2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pass_context&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;pass_context&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;jinja2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;contextfunction&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@pass_context&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;url_for_query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;request&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;request&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;url&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url_for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;params&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;urllib.parse&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parse_qs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;urlencode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;urlparse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;urlunparse&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# Parse the URL&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;parsed_url&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;urlparse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# Parse the query parameters&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;query_params&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parse_qs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parsed_url&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# Update the query parameters with the new ones&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;query_params&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;update&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# Rebuild the query string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;updated_query_string&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;urlencode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query_params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;doseq&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# Rebuild the URL with the updated query string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;updated_url&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;urlunparse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;parsed_url&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;scheme&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;parsed_url&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;netloc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;parsed_url&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;parsed_url&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;updated_query_string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;parsed_url&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fragment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;environ&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;ENV&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;dev&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;qa&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;prod&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;updated_url&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;updated_url&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;replace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;http&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;https&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;updated_url&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_templates&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;templates&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Jinja2Templates&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;templates&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;templates&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;globals&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;url_for&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;url_for_query&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;templates&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;https&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; If you want url_for to work in production you need some way to convert http&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;to https.  Here is how I make it work, for local development I &lt;code&gt;export ENV=local&lt;/code&gt; then for each environment that I am running on a server I include&#xA;it in the list and update &lt;code&gt;ENV&lt;/code&gt; appropriately.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;environ&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;ENV&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;dev&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;qa&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;prod&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;updated_url&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;updated_url&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;replace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;http&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;https&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;The route might look something like this.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@infinite_router.get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;home&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;page&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To access the home route using url_for in a jinja template you can use the&#xA;following, once you have applied the &lt;code&gt;url_for_query&lt;/code&gt; function as your default&#xA;&lt;code&gt;url_for&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;{{ url_for(&amp;#39;home&amp;#39;, page=1) }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;Home&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>setting up a kind cluster with argocd installed</title>
    <id>https://waylonwalker.com/kind-cluster-with-argo/</id>
    <updated>2024-04-04T18:42:18Z</updated>
    <published>2024-04-04T18:42:18Z</published>
    <link href="https://waylonwalker.com/kind-cluster-with-argo/" rel="alternate" type="text/html"></link>
    <summary type="text">Kind (Kubernetes in Docker) is a tool that makes it easy to create and tear down local clusters quickly. I like to use it to test out new workflows.</summary>
    <content type="html">&lt;p&gt;Kind (Kubernetes in Docker) is a tool that makes it easy to create and tear&#xA;down local clusters quickly.  I like to use it to test out new workflows.&lt;/p&gt;&#xA;&lt;p&gt;Argocd is a continuous delivery tool that makes it easy to setup gitops&#xA;workflows in kubernetes.&lt;/p&gt;&#xA;&lt;p&gt;Here is how you can setup a new kind cluster and install argocd into it using&#xA;helm, the kubernetes package manager.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kind create cluster --name argocd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# your first time through you need to add the argocd repo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;helm repo add argo https://argoproj.github.io/argo-helm&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;helm repo update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# install argocd into the cluster&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;helm install argo argo/argo-cd --namespace argocd --create-namespace&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# deploy the app of apps&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl apply -f apps/apps.yaml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you want to add repos and apps to your cluster you can use the argo cli to&#xA;do that, but first you will need forward the argocd port and login.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Wait until Argo CD API server is available&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Waiting for Argo CD API server to be available...&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; ! kubectl &lt;span class=&#34;nb&#34;&gt;wait&lt;/span&gt; --for&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;condition&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;available --timeout&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;60s deployment/argo-argocd-server -n argocd&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Waiting for Argo CD API server to be ready...&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  sleep &lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl port-forward svc/argo-argocd-server -n argocd 8080:443 &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;argocd_admin_password&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;kubectl get secret argocd-initial-admin-secret -n argocd -o &lt;span class=&#34;nv&#34;&gt;jsonpath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{.data.password}&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; base64 -d&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;argocd login localhost:8080 --insecure --username admin --password &lt;span class=&#34;nv&#34;&gt;$argocd_admin_password&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;argocd repo add https://github.com/fokais-com/app.fokais.git --username waylonwalker --password &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;GH_ARGO_PAT&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;argocd app create app-fokais-local --repo https://github.com/fokais-com/app.fokais.git --path k8s/overlays/local --dest-server https://kubernetes.default.svc --sync-policy automated --sync-option &lt;span class=&#34;nv&#34;&gt;Prune&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>feeds</title>
    <id>https://waylonwalker.com/feeds/</id>
    <updated>2024-04-02T20:01:44Z</updated>
    <published>2024-04-02T20:01:44Z</published>
    <link href="https://waylonwalker.com/feeds/" rel="alternate" type="text/html"></link>
    <summary type="text">I have several feeds that you can consume my content with. Many posts will cross between them, so if you would like to follow a certain stream of content in...</summary>
    <content type="html">&lt;p&gt;I have several feeds that you can consume my content with.  Many posts will&#xA;cross between them, so if you would like to follow a certain stream of content&#xA;in your rss reader thats what this is for. This one might feel like it has some&#xA;extra noise with multiple posts per day, including starts, and instagram style&#xA;posts, for a bit less look at the [[ main ]] feed.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;TLDR&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;If you are looking for everything look here &amp;lt;https://waylonwalker.com/archive/rss.xml&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;all&#34;&gt;All &lt;a href=&#34;#all&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is a feed of everything that I have published on my site to date&#xA;including &lt;a href=&#34;/tags/blog/&#34; class=&#34;wikilink&#34; data-title=&#34;Posts tagged: blog&#34; data-description=&#34;All posts with the tag &amp;#34;blog&amp;#34;&#34; data-preview=&#34;All posts with the tag &amp;#34;blog&amp;#34;&#34;&gt;Posts tagged: blog&lt;/a&gt;, &lt;a href=&#34;/til/&#34; class=&#34;wikilink&#34; data-title=&#34;TIL&#34; data-description=&#34;Here are the latest snippets from the /til directory:&#34; data-date=&#34;2026-03-01&#34; data-preview=&#34;Here are the latest snippets from the /til directory:&#34;&gt;TIL&lt;/a&gt;, &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;Thoughts&lt;/a&gt;, [[ stars ]], &lt;a href=&#34;/tags/shots/&#34; class=&#34;wikilink&#34; data-title=&#34;Posts tagged: shots&#34; data-description=&#34;All posts with the tag &amp;#34;shots&amp;#34;&#34; data-preview=&#34;All posts with the tag &amp;#34;shots&amp;#34;&#34;&gt;Posts tagged: shots&lt;/a&gt;,&#xA;[[ pings ]].&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/published/&#34;&gt;web&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/published/rss.xml&#34;&gt;rss&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;main&#34;&gt;Main &lt;a href=&#34;#main&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Like the All feed, but drops the shots (instagram style posts) and stars&#xA;(github stars).&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/main/&#34;&gt;web&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/main/rss.xml&#34;&gt;rss&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;til---dailyish&#34;&gt;til - daily(ish) &lt;a href=&#34;#til---dailyish&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;think gist with a tweet&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a feed of all of my TIL’s (Today I Learned).  These are generally short&#xA;single topic posts that I write up quickly.  They are generally things that are&#xA;fairly new to me, often things that I struggled to find support for on the&#xA;internet, and felt that It needed yet one more article with my voice.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/til/&#34;&gt;web&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/til/rss.xml&#34;&gt;rss&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;shots---dailyish&#34;&gt;shots - daily(ish) &lt;a href=&#34;#shots---dailyish&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;think Instagram&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;This feed is a collection of images, sometimes I post a few a day, sometimes a&#xA;few weeks will go by, it really just depends on what I have going on.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/shots/&#34;&gt;web&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/shots/rss.xml&#34;&gt;rss&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;pings---dailyish&#34;&gt;pings - daily(ish) &lt;a href=&#34;#pings---dailyish&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;think tweet&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;These are ephemeral thoughts that pop in my head and I post as they occur.&#xA;Maybe inspired by something I see or hear, but typically no more context is&#xA;provided.  I hate how social media has become very much trigger engagement&#xA;bait… This is adjacent to that, but I try to be less hard on the bait.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/pings/&#34;&gt;web&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/pings/rss.xml&#34;&gt;rss&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;thoughts---daily&#34;&gt;Thoughts - daily+ &lt;a href=&#34;#thoughts---daily&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;These are generally my thoughts on a web page or some sort of url, except a&#xA;rare few don’t have a link.  These are dual published off of my&#xA;&lt;a href=&#34;https://thoughts.waylonwalker.com&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/thoughts.waylonwalker.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/thoughts.waylonwalker.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;thoughts.waylonwalker.com&lt;/a&gt; site.  It’s a&#xA;fully dynamically rendered site 2000’s style.  Posts are stored in a database&#xA;and instantly available.  Almost all of the posts were written in a small&#xA;&lt;code&gt;&amp;lt;textarea&amp;gt;&lt;/code&gt; field within a chrome extension that I built for it.&lt;/p&gt;&#xA;&lt;p&gt;These posts are intended to in two ways.  One, link building for the author.  I&#xA;hope that I give the people helping me out along the way just a little bit of a&#xA;boost.  Two, they serve as a permanant commented bookmark for me to search, and&#xA;come back to later when I have forgotten where I have seen something.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/thoughts/&#34;&gt;web&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/thoughts/rss.xml&#34;&gt;rss&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;stars&#34;&gt;stars &lt;a href=&#34;#stars&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I pull in all of my github stars into one feed &lt;a href=&#34;/pesos/&#34; class=&#34;wikilink&#34; data-title=&#34;pesos&#34; data-description=&#34;Pesos is the act of Publish Elsewhere Syncicate to Own Site. It is an indieweb concept that I recently started applying to my own site.&#34; data-date=&#34;2025-01-25&#34; data-preview=&#34;Pesos is the act of Publish Elsewhere Syncicate to Own Site. It is an indieweb concept that I recently started applying to my own site.&#34;&gt;pesos&lt;/a&gt; style.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/stars/&#34;&gt;web&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/stars/rss.xml&#34;&gt;rss&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;recent&#34;&gt;Recent &lt;a href=&#34;#recent&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is a shorter version of &lt;strong&gt;All&lt;/strong&gt;, as it is filtered down to only the posts&#xA;created within the last 30 days.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/recent/&#34;&gt;web&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/recent/rss.xml&#34;&gt;rss&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;blog---weeklymonthly&#34;&gt;Blog - weekly/monthly &lt;a href=&#34;#blog---weeklymonthly&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;These are my full big &lt;strong&gt;B&lt;/strong&gt; &lt;strong&gt;B&lt;/strong&gt;log posts.  They are what I started writing,&#xA;typically take a bit more time to put together.  I write fewer of them these&#xA;days than I used to.  I’d like to think that they are the more polished posts&#xA;of the bunch.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/blog/&#34;&gt;web&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/blog/rss.xml&#34;&gt;rss&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;today&#34;&gt;Today &lt;a href=&#34;#today&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;These are only the posts that went live the day that the site last built.  If&#xA;my scheduled builds keep working as intended they are today’s posts.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/today/&#34;&gt;web&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/today/rss.xml&#34;&gt;rss&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;python&#34;&gt;Python &lt;a href=&#34;#python&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;These are all the posts related to the python programming language.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/python/&#34;&gt;web&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/python/rss.xml&#34;&gt;rss&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;linux&#34;&gt;Linux &lt;a href=&#34;#linux&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;These are all the posts related to linux.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/linux/&#34;&gt;web&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/linux/rss.xml&#34;&gt;rss&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;vim&#34;&gt;vim &lt;a href=&#34;#vim&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;These are all the posts related to the greatest way to edit text, vim.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/vim/&#34;&gt;web&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/vim/rss.xml&#34;&gt;rss&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Careful, you might not make it out&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;kedro&#34;&gt;kedro &lt;a href=&#34;#kedro&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;These are all the posts related to the python data engineering framework kedro.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/kedro/&#34;&gt;web&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/kedro/rss.xml&#34;&gt;rss&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;gratitude&#34;&gt;gratitude &lt;a href=&#34;#gratitude&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I used to do daily gratitude posts, I might get back into it.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/gratitude/&#34;&gt;web&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/gratitude/rss.xml&#34;&gt;rss&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Thoughts</title>
    <id>https://waylonwalker.com/thoughts/</id>
    <updated>2024-04-01T16:14:47Z</updated>
    <published>2024-04-01T16:14:47Z</published>
    <link href="https://waylonwalker.com/thoughts/" rel="alternate" type="text/html"></link>
    <summary type="text">These are generally my thoughts on a web page or some sort of url, except a rare few don&#39;t have a link. These are dual published off of my...</summary>
    <content type="html">&lt;p&gt;These are generally my thoughts on a web page or some sort of url, except a&#xA;rare few don’t have a link.  These are dual published off of my&#xA;&lt;a href=&#34;https://thoughts.waylonwalker.com&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/thoughts.waylonwalker.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/thoughts.waylonwalker.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;thoughts.waylonwalker.com&lt;/a&gt; site.  It’s a&#xA;fully dynamically rendered site 2000’s style.  Posts are stored in a database&#xA;and instantly available.  Almost all of the posts were written in a small&#xA;&lt;code&gt;&amp;lt;textarea&amp;gt;&lt;/code&gt; field within a chrome extension that I built for it.&lt;/p&gt;&#xA;&lt;p&gt;These posts are intended to in two ways.  One, link building for the author.  I&#xA;hope that I give the people helping me out along the way just a little bit of a&#xA;boost.  Two, they serve as a permanant commented bookmark for me to search, and&#xA;come back to later when I have forgotten where I have seen something.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/thoughts&#34;&gt;web&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/thoughts/rss.xml&#34;&gt;rss&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;All thoughts posts cross posted to my site are prefixed with a thought balloon 💭.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;the-tech&#34;&gt;The tech &lt;a href=&#34;#the-tech&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Since this blog is mostly a tech blog about software development, and my&#xA;journey as I learn, lets talk tech.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;python&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/fastapi/&#34; class=&#34;glossary-term&#34; title=&#34;FastAPI is a modern and efficient web framework for Python, built on top of the Starlette web framework, and pydantic for data validation and serialization.&#34;&gt;fastapi&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/htmx/&#34; class=&#34;glossary-term&#34; title=&#34;htmx is a frontend javascript library for creating dynamic web applications.&#34;&gt;htmx&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;sqlite&lt;/li&gt;&#xA;&lt;li&gt;docker&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://fly.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/fly.io.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/fly.io.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://fly.io&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;fastapi&#34;&gt;fastapi &lt;a href=&#34;#fastapi&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;The core of the site is a python web server running fastapi.  Most of the&#xA;endpoints return &lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;html&lt;/a&gt; via jinja templates to the browser and json to anything&#xA;else.  So you go to the list of posts at&#xA;[https://thoughts.waylonwalker.com/posts/waylonwalker/?page_size=9999999999 in](&lt;a href=&#34;https://thoughts.waylonwalker.com/posts/waylonwalker/?page_size=9999999999&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/thoughts.waylonwalker.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/thoughts.waylonwalker.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://thoughts.waylonwalker.com/posts/waylonwalker/?page_size=9999999999&lt;/a&gt; in){.hoverlink}&#xA;a web browser it will be a rendered feed, but from curl you will get json.&lt;/p&gt;&#xA;&lt;h3 id=&#34;htmx&#34;&gt;htmx &lt;a href=&#34;#htmx&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;The main page is an infite scrolling feed of the posts.  All loaded in with&#xA;htmx.  Which just works so beautifully for this.  I really like python its my&#xA;jam, I can make endpoints that return things out of a database very effectively&#xA;with it, but it takes me some time to do the js side, htmx just makes these&#xA;common patterns available right in html.&lt;/p&gt;&#xA;&lt;h3 id=&#34;sqlite&#34;&gt;sqlite &lt;a href=&#34;#sqlite&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;The data storage is a sqlite database using the sqlmodel orm.  This was my very&#xA;first time using sqlmodel, which is an ORM built on top of pydantic.  It works&#xA;really well with fastapi.  The only thing that it lacks is the same history,&#xA;community, and stack overflow posts that sqlalchemy has.&lt;/p&gt;&#xA;&lt;h3 id=&#34;docker&#34;&gt;docker &lt;a href=&#34;#docker&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Docker is my go to way for containerizing web applications.  I know it really&#xA;well and makes it easy to build and deploy on a number of platforms.&lt;/p&gt;&#xA;&lt;h3 id=&#34;httpsflyio&#34;&gt;&lt;a href=&#34;https://fly.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/fly.io.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/fly.io.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://fly.io&lt;/a&gt; &lt;a href=&#34;#httpsflyio&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;I have this running on &lt;a href=&#34;https://fly.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/fly.io.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/fly.io.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://fly.io&lt;/a&gt;.  Its my first real production application&#xA;running on &lt;a href=&#34;https://fly.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/fly.io.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/fly.io.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://fly.io&lt;/a&gt;, and its been great for me.  It runs my container for me,&#xA;gives me tools to scale, and ssh right into the running container.  It’s still&#xA;free for the time being, but goes up quick for my cheap taste if I were to&#xA;scale it up much.&lt;/p&gt;&#xA;&lt;p&gt;Id highly recomend it if you have a server that you want to get running on the&#xA;public internet, and you don’t want to manage any of your own infrastructure.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ jbranchaud til</title>
    <id>https://waylonwalker.com/jbranchaud-til/</id>
    <updated>2024-04-01T03:22:57Z</updated>
    <published>2024-04-01T03:22:57Z</published>
    <link href="https://waylonwalker.com/jbranchaud-til/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by til from jbranchaud.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/jbranchaud/til&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;til&lt;/a&gt; from &lt;a href=&#34;https://github.com/jbranchaud&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jbranchaud&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;📝 Today I Learned&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ wyattbubbylee Hexa</title>
    <id>https://waylonwalker.com/wyattbubbylee-hexa/</id>
    <updated>2024-03-30T14:57:03Z</updated>
    <published>2024-03-30T14:57:03Z</published>
    <link href="https://waylonwalker.com/wyattbubbylee-hexa/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across Hexa from wyattbubbylee, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/wyattbubbylee/Hexa&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Hexa&lt;/a&gt; from &lt;a href=&#34;https://github.com/wyattbubbylee&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;wyattbubbylee&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;Hexa is a game engine&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>kubernetes kubeseal</title>
    <id>https://waylonwalker.com/kubernetes-kubeseal/</id>
    <updated>2024-03-27T20:02:57Z</updated>
    <published>2024-03-27T20:02:57Z</published>
    <link href="https://waylonwalker.com/kubernetes-kubeseal/" rel="alternate" type="text/html"></link>
    <summary type="text">In my homelab kubernetes cluster I am using kubeseal to encrypt secrets. I have been using it successfully for a few months now wtih great success. It allows...</summary>
    <content type="html">&lt;p&gt;In my &lt;a href=&#34;/homelab/&#34; class=&#34;glossary-term&#34; title=&#34;A place to self host applications. For me this is primarily self built web applications, and applications for sharing files with my family. Techno Tim has a...&#34;&gt;homelab&lt;/a&gt; kubernetes cluster I am using kubeseal to encrypt secrets.  I&#xA;have been using it successfully for a few months now wtih great success. It&#xA;allows me to commit all of my secrets manifests to &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; with out risk of leaking&#xA;secrets.&lt;/p&gt;&#xA;&lt;p&gt;You see kubeseal encrypts your secrets with a private key only stored in your&#xA;cluster, so only the cluster itself can decrypt them using the kubeseal&#xA;controller.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/833e8681-8220-4096-b211-80c33eb10c1c.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/833e8681-8220-4096-b211-80c33eb10c1c.png&#34; alt=&#34;kubeseal-post.png&#34;/ data-glightbox=&#34;description: kubeseal-post.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;kubeseal&#34;&gt;KubeSeal &lt;a href=&#34;#kubeseal&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://sealed-secrets.netlify.app/&#34; class=&#34;hoverlink&#34;&gt;https://sealed-secrets.netlify.app/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;a href=&#34;https://sealed-secrets.netlify.app/&#34;&gt;&#xA;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://sealed-secrets.netlify.app/&amp;amp;height=450&amp;amp;width=800&amp;amp;scaled_width=800&amp;amp;scaled_height=450&amp;amp;selectors=&#34; alt=&#34;screenshot of https://sealed-secrets.netlify.app/&#34; height=&#34;450&#34; width=&#34;800&#34;/ data-glightbox=&#34;description: screenshot of https://sealed-secrets.netlify.app/&#34;&gt;&#xA;&lt;/a&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;installation &lt;a href=&#34;#installation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Installation happens in two steps.  You need the kubernetes controller and the&#xA;client side cli to create a sealed secret.&lt;/p&gt;&#xA;&lt;p&gt;For a more complete instruction see the&#xA;[docs#installation](&lt;a href=&#34;https://github.com/bitnami-labs/sealed-secrets?tab=readme-ov-file#installation&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/bitnami-labs/sealed-secrets?tab=readme-ov-file#installation&lt;/a&gt;]&lt;/p&gt;&#xA;&lt;h2 id=&#34;installation---controller&#34;&gt;installation - controller &lt;a href=&#34;#installation---controller&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div class=&#34;admonition warning&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Warning&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; **context**&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Make sure that you are in the right context before running any kubectl commands.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl config current-context&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;sealed-secrets is installed using the helm package manager.  To install&#xA;sealed-secrets run the following command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;helm repo add sealed-secrets https://bitnami-labs.github.io/sealed-secrets&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;helm install sealed-secrets -n kube-system --set-string &lt;span class=&#34;nv&#34;&gt;fullnameOverride&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;sealed-secrets-controller sealed-secrets/sealed-secrets&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;installation---client&#34;&gt;installation - client &lt;a href=&#34;#installation---client&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;For the client you can check your OS package manager, brew, or the&#xA;&lt;a href=&#34;https://github.com/bitnami-labs/sealed-secrets/releases/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;github-releases&lt;/a&gt;.&#xA;For me I found it in the main arch repos.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;paru -S kubeseal&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# or&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pacman -S kubeseal&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# or&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install kubeseal&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; You will need to install kubeseal on every device that you will want to&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;create sealed secrets on.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;example&#34;&gt;Example &lt;a href=&#34;#example&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Most of these commands come straight from the docs.  From my experience I have&#xA;always specified the namespace, my projects go per namespace and I don’t have&#xA;any reason that other namepsaces should see the secret, and if they do I deploy&#xA;another secret in that namespace.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Create a json/yaml-encoded Secret somehow:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# (note use of `--dry-run` - this is just a local file!)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -n bar &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; kubectl create secret generic mysecret --dry-run&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;client --from-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/dev/stdin -o yaml -n thenamespace &amp;gt; mysecret.yaml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;note that the key of the secret is &lt;code&gt;foo&lt;/code&gt; and the value is &lt;code&gt;bar&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;results&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;apiVersion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;v1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;YmFy&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;kind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Secret&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;creationTimestamp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;mysecret&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;namespace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;thenamespace&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; The data is base64 encoded.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -n bar &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; base64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# YmFy&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# This is the important bit:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubeseal -f mysecret.yaml -w mysealedsecret.yaml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# At this point mysealedsecret.json is safe to upload to Github,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# post on Twitter, etc.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Eventually:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl create -f mysealedsecret.yaml -n thenamespace&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# sealedsecret.bitnami.com/mysecret created&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Profit!&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl get secret mysecret&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl get secret mysecret -n thenamespace&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# NAME       TYPE     DATA   AGE&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# mysecret   Opaque   1      27s&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat mysealedsecret.yaml &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; kubeseal --validate&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -n bar &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; kubectl create secret generic mysecret --dry-run&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;client --from-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/dev/stdin -o yaml &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; kubeseal -o yaml -n thenamespace &amp;gt; mysealedsecret.yaml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -n baz &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; kubectl create secret generic mysecret --dry-run&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;client --from-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;bar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/dev/stdin -o yaml &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; kubeseal -o yaml -n thenamespace --merge-into mysealedsecret.yaml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Results&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nn&#34;&gt;---&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;apiVersion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;bitnami.com/v1alpha1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;kind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;SealedSecret&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;creationTimestamp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;mysecret&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;namespace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;thenamespace&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;encryptedData&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;bar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;AgBLkamltcLfH1dC1JxQ3qd8lJ8aBZF2ARoq3uo055hnzXOy8g2T5liTx5UPvyPV8yyWqABU8eOnwjNhDtzSATvYeBB3fGkucdOZziWEoiNsWTR9ZtFEkod7Ya6uGkzZOJwi3IkrHFVIT9oWZQUxxJZ6vFhPiFcx9Dorr8TNSzG4KOug25+PhWPPiHDgSup5N3CkWCZaYOF7dbZRVSA4nGP1fZxjFByHP4AsdjLCHptyVbkpLRKeiXTkLxfLX4K+JLZGM41S1On5bSP56mCfv1daTJx619kDXkRLw9l21Ot283/L0NMNAiw781AefYMVoO3aHmYgcT6wAtsQAKje9fyL7DQRHt8a5NZOWukp/P6XjdXRz/nfQasQlbSTrRkDpplKIM5/WdPcBoKi+yyoOL0rZ8x1X7YzUI3BggZmzWyEPD01BK1YAHGZnYIZbbCy1JSm8JCBvP+xWMg+i0Z/DCD8nclAhH1GX2Q7/NrNHF//589AJfuriymd2+mk7uaLA4RRsY0l5QeZD6HVAqSv5jWsVQQtSftWmI9vn9oL/Pno7sEUjSDpXPfF4nnsULhxsPEe2DFAMm1kZAjdF06ueF4/x2Fdy80ZQNyycaDx2CWm4z3b14A75WGyOXl2wJZQqxrFCz8el4hD2nH3zQFEzd6AIh49myqVAGuu2qGlYP4p94LJghVa+mQjztLD/2ZUZjY+anQ=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;AgAducXW6iUCY900cPDdmRfuj7tKnh2hY4C1+2hFoAtjyvjepsKNWsiPJ81t8anaMfFPat4ta060l5VtTrceFE8oS/rViz1tvNWGPBjL+GwL/QjkGl6H8ju87vKERKQn5qw7B/V5j24VM8AxOd+/vJNt/IeRIHLubvFft4hyMq4b0xmIxaemBSTxchQX/5364T3VJH2kHaqpqd+JJgQnTbiTQe/XnyZokDX8GSxw4rAbJUJSRUtY9DB9ZDu2zC5VngX+GJjbwHGbv9EKs8LShJIPrD8xHqrDmlSXGkkP01D4A6268Qoi3x5S0H5aqDgtrgBiWsNkzdKwjfrTNx7pKecOi41lyFdffHOGUew4aPPMqjzWR2TEms9WNNQXwnBdDHKMkFsisocF52BolEkcjF8g/u5h2Af92abMu6k16VybJrB7TV1set5A9W7rqG1iXI4+1W6XQfFnpja8xL/zJBvZcyHgeYMNaxa3C3s6PANhPzAUVaXV9eedAkptGJLN13IZj4LujpoAxRKo6bEdydv/5P23R3fx5PgTOpVI7riECAOIg2PThFsEoVCUwStmKCvIx1I2+YixIlv/OiaUWo4lrI/3ve5WGp4ZnuiJPk34JoYAlRbR6+sX14d8Ek6viq/pJUUIfVpNIkNMboUL4u+KpT47eyQ/mWih/KFduQyX9II/vQ+/IJGzEEHIipxAhdmV+K4=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;creationTimestamp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;mysecret&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;namespace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;thenamespace&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;backing-up-your-sealing-key&#34;&gt;backing up your sealing key &lt;a href=&#34;#backing-up-your-sealing-key&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl get secret -n kube-system -l sealedsecrets.bitnami.com/sealed-secrets-key -o yaml &amp;gt;main.key&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;converting-env-files-to-a-secret&#34;&gt;converting .env files to a secret &lt;a href=&#34;#converting-env-files-to-a-secret&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Working with web applications .env is a common way to store credentials.  Let’s&#xA;look at how we can convert these to secrets.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl create secret generic mysecret --from-env-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;.env -n thenamespace --dry-run&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;client -o yaml &amp;gt; mysecret.yaml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now you have a secret that looks like this.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;apiVersion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;v1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;YmFy&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;kind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Secret&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;creationTimestamp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;mysecret&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;namespace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;thenamespace&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Seal it up just like before.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubeseal -f mysecret.yaml -w mysealedsecret.yaml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;using-the-secrets&#34;&gt;Using the secrets &lt;a href=&#34;#using-the-secrets&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I typically use the secrets in the container spec.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;containers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;myapp&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;envFrom&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;secretRef&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;mysecret&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# You can still have other env vars&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;bar&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Sometimes I want to mount the secret as a volume.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;containers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;myapp&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumeMounts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;mysecret&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;mountPath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;/mysecret&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;mysecret&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;secret&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;secretName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;mysecret&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;image-pull-secrets&#34;&gt;Image Pull Secrets &lt;a href=&#34;#image-pull-secrets&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I also need to use imagePullSecrets.  Let’s walk through the whole process.  Starting with the secret.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl create secret docker-registry regcred --docker-server&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;myprivateregistry.example.com --docker-username&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;foo --docker-password&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;bar --dry-run&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;client -o yaml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Generates the following secret.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;apiVersion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;v1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;.dockerconfigjson&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;eyJhdXRocyI6eyJteXByaXZhdGVyZWdpc3RyeS5leGFtcGxlLmNvbSI6eyJ1c2VybmFtZSI6ImZvbyIsInBhc3N3b3JkIjoiYmFyIiwiYXV0aCI6IlptOXZPbUpoY2c9PSJ9fX0=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;kind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Secret&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;creationTimestamp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;regcred&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;kubernetes.io/dockerconfigjson&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;---&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;the secret&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Now we we can seal that secret.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubeseal -f regcred.yaml -w regcred-sealed.yaml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And that gives us the following sealed secret that we can deploy into our cluster.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nn&#34;&gt;---&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;apiVersion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;bitnami.com/v1alpha1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;kind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;SealedSecret&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;creationTimestamp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;regcred&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;namespace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;encryptedData&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;.dockerconfigjson&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;AgATYVEywkyYEaoErQbJo6xEZfOnRn1ydNTLkO3Jt/NF/UH+0o9lHpDecRpN0XnVu8xJUcdjkgD9q2XkwP8e6qQDS2mMPTiTNIN+8gbJx97WrD1YQDT0lXBuoyi9I/iwlXxx6MgH/6GY6CeGTz5SRlvoU0Xhlt4d11s7/xapdE8QMLsAReqPEv8oZHEyAxDRrjXX0V+tO8dV+G+GXjUDMBBceLael9rvGzSKIwDVXACVqQhLkB6FoP98M+yyBE46RBNnSnS0ShQM5PprL24HKpRZ43x4RM53KBrQ7R/MxeshafY+B6vUvrolmVox4sud8xngMOcjTO28LLOrck5V8ZiDabhN7ajHEf03IESr1o/ADGf5k9988Vv1txJtsZW0K2mpRu0D7/BLVL9KzbZ5ywULqIoD/Ur2GIGnZqMAKOq4laGp/GJtMKLrhmEvekT397wC/Gf/xdDKVhHf2p4ocsPu7LKFuS5H/Auel/Q5grdn8L5wwrO4VWRv3eJroKh/Hux7Qd7f64O7qdi0XthDocf+gmtjys+Gy72M7tyf8f/O+3oKbS4CWQVTj4ZThMc9znrFnHqt2q/7pAyytTQCpk51wlzOsNvOhCueJM/jmeahaL0LuBrqngqISpnd65sgVzBcZpwK9i2Fckyt0DrZLH+NoIuvaqNhzlF+OMbAft/ylWWKCH4WUP+FKG+1LXM7ud7AA3MMbGSBxHL0/WK/INa7MB56xZKMqqyvvLLQHFTQUROJjkgkzsumdOgwZTRgIFnAZ4+vOX3/1Rtt3mAs3vdoJhL4GuKUYCnEHt908eKkWEVEs7eMk5SdSRtIsbaXO2s0dtADwg==&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;creationTimestamp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;regcred&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;namespace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;kubernetes.io/dockerconfigjson&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now that we have our sealed registry secret, we can deploy it into our cluster.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl apply -f regcred-sealed.yaml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now we can use it to pull images from our private registry.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;containers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;imagePullSecrets&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;regcred&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;full-example&#34;&gt;Full example &lt;a href=&#34;#full-example&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is a full deployment example using all the secrets we have created.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;regcred&lt;/li&gt;&#xA;&lt;li&gt;mounting a secret&lt;/li&gt;&#xA;&lt;li&gt;envFrom secret&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nn&#34;&gt;---&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;apiVersion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;apps/v1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;kind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Deployment&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;creationTimestamp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;labels&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;service&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;myservice&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;myservice&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;namespace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;mynamespace&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;replicas&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;selector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;matchLabels&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;service&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;myservice&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;strategy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Recreate&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;creationTimestamp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;labels&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;service&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;myservice&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;containers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;envFrom&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;secretRef&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;                &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;mysecret&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;bar&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;private-registry.io/myimage:1.0.0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;myimage&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;containerPort&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5000&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;protocol&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;TCP&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;resources&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;{}&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumeMounts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;mountPath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;/mysecret&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;              &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;mysecret&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;restartPolicy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Always&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;mysecret&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;secret&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;secretName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;mysecret&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;imagePullSecrets&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;regcred&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;downside&#34;&gt;Downside &lt;a href=&#34;#downside&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now the main downside I see with kubeseal is that it does not provide a way to&#xA;store your secrets in a way that you can access outside of your cluster.  So&#xA;you need to make sure that you have another solution in place to store your&#xA;secrets so that you still have them if you ever were to take the cluster down&#xA;or move from k8s to something else.&lt;/p&gt;&#xA;&lt;p&gt;Overall the likelyhood of you loosing a production cluster is pretty low, so&#xA;maybe it’s ok to just trust it depending on what the secrets are.  Especially&#xA;for things you control and can rotate anyways its fine.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ val-town codemirror-codeium</title>
    <id>https://waylonwalker.com/val-town-codemirror-codeium/</id>
    <updated>2024-03-27T01:14:22Z</updated>
    <published>2024-03-27T01:14:22Z</published>
    <link href="https://waylonwalker.com/val-town-codemirror-codeium/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred codemirror-codeium by val-town. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/val-town/codemirror-codeium&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;codemirror-codeium&lt;/a&gt; by &lt;a href=&#34;https://github.com/val-town&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;val-town&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;Codeium code completion integration for CodeMirror 6&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>kubernetes 6 months in</title>
    <id>https://waylonwalker.com/kubernetes-6-months-in/</id>
    <updated>2024-03-26T13:20:24Z</updated>
    <published>2024-03-26T13:20:24Z</published>
    <link href="https://waylonwalker.com/kubernetes-6-months-in/" rel="alternate" type="text/html"></link>
    <summary type="text">I stumbled into kubernetes December 2023 when I was looking for a better way to self host applications. I was looking for something that didn&#39;t require...</summary>
    <content type="html">&lt;p&gt;I stumbled into kubernetes December 2023 when I was looking for a better way&#xA;to &lt;a href=&#34;/self-host/&#34; class=&#34;glossary-term&#34; title=&#34;Self hosting is the act of hosting your own applications and services without using a SAS provider. This is typically done with your own hardware, but there...&#34;&gt;self host&lt;/a&gt; applications.  I was looking for something that didn’t require&#xA;logging into a server and building and deploying like a cave man.  I wanted a&#xA;smoother experience than docker compose was giving me.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/looking-for-a-heroku-replacement/&#34; class=&#34;hoverlink&#34;&gt;https://waylonwalker.com/looking-for-a-heroku-replacement/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This post turned into a list of tools that I have adopted into my k8s workflow,&#xA;and plan to keep. enjoy.&lt;/p&gt;&#xA;&lt;h2 id=&#34;kompose&#34;&gt;Kompose &lt;a href=&#34;#kompose&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;a href=&#34;https://kompose.io&#34;&gt;&#xA;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://kompose.io/&amp;amp;height=450&amp;amp;width=800&amp;amp;scaled_width=800&amp;amp;scaled_height=450&amp;amp;selectors=&#34; alt=&#34;screenshot of https://kompose.io/&#34; height=&#34;450&#34; width=&#34;800&#34;/ data-glightbox=&#34;description: screenshot of https://kompose.io/&#34;&gt;&#xA;&lt;/a&gt;&#xA;&lt;p&gt;Kompose is a great tool for gettting going and converting your docker-compose&#xA;to kubernetes manifests or helm templates.  It was a great tool for me to get&#xA;started with, but I was afraid that it was hindering me learning more and just&#xA;blindly using its output so I have tried to use it less and less.  I’m now not&#xA;solely leaning on it, but using it to get out quick POCs with low friction.&lt;/p&gt;&#xA;&lt;p&gt;Kompose really helped me go 0 to 60 and get right into kubernetes with my&#xA;existing docker compose files and very little change.  I found it a great way&#xA;to get my feet wet and learn.&lt;/p&gt;&#xA;&lt;h2 id=&#34;argocd&#34;&gt;Argocd &lt;a href=&#34;#argocd&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://argoproj.github.io/cd&#34; class=&#34;hoverlink  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/argoproj.github.io.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/argoproj.github.io.png&#34;&gt;https://argoproj.github.io/cd&lt;/a&gt;&lt;/p&gt;&#xA;&lt;a href=&#34;https://argoproj.github.io/cd/&#34;&gt;&#xA;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://argoproj.github.io/cd/&amp;amp;height=450&amp;amp;width=800&amp;amp;scaled_width=800&amp;amp;scaled_height=450&amp;amp;selectors=&#34; alt=&#34;screenshot of https://argoproj.github.io/cd/&#34; height=&#34;450&#34; width=&#34;800&#34;/ data-glightbox=&#34;description: screenshot of https://argoproj.github.io/cd/&#34;&gt;&#xA;&lt;/a&gt;&#xA;&lt;p&gt;Argocd is the first tool I am going to reach for in any kubernetes deployment&#xA;that I work on.  The number one reason is that it keeps track of all of&#xA;everything internally, and if you remove something it cleans it up.  Very&#xA;quickly if you are not diligent you will end up with stuff laying around not&#xA;sure if you need it, or where it came from.&lt;/p&gt;&#xA;&lt;p&gt;For instance if I create a new deployment and don’t include the namespace, If I&#xA;just change the yaml with the new namespace without taking it down first, that&#xA;original one will be left behind and I will be stuck manually cleaning it up.&lt;/p&gt;&#xA;&lt;h2 id=&#34;argo-rollouts&#34;&gt;Argo Rollouts &lt;a href=&#34;#argo-rollouts&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://argoproj.github.io/rollouts&#34; class=&#34;hoverlink  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/argoproj.github.io.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/argoproj.github.io.png&#34;&gt;https://argoproj.github.io/rollouts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;a href=&#34;https://argoproj.github.io/rollouts/&#34;&gt;&#xA;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://argoproj.github.io/rollouts/&amp;amp;height=450&amp;amp;width=800&amp;amp;scaled_width=800&amp;amp;scaled_height=450&amp;amp;selectors=&#34; alt=&#34;screenshot of https://argoproj.github.io/rollouts/&#34; height=&#34;450&#34; width=&#34;800&#34;/ data-glightbox=&#34;description: screenshot of https://argoproj.github.io/rollouts/&#34;&gt;&#xA;&lt;/a&gt;&#xA;&lt;p&gt;I’m looking into rollouts, and have played with it, but argocd really does most&#xA;of what I need with low friction.  I thought I needed rollouts to prevent&#xA;downtime, but argo tends to do a good job of cutting over to a new pod only&#xA;after its up and ready.  This solves most of my problems, and I can pretty&#xA;quickly roll back with low friction.  If I needed to manage a high availabilty&#xA;application Id look closer.&lt;/p&gt;&#xA;&lt;h2 id=&#34;kubeseal&#34;&gt;KubeSeal &lt;a href=&#34;#kubeseal&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://sealed-secrets.netlify.app/&#34; class=&#34;hoverlink&#34;&gt;https://sealed-secrets.netlify.app/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;a href=&#34;https://sealed-secrets.netlify.app/&#34;&gt;&#xA;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://sealed-secrets.netlify.app/&amp;amp;height=450&amp;amp;width=800&amp;amp;scaled_width=800&amp;amp;scaled_height=450&amp;amp;selectors=&#34; alt=&#34;screenshot of https://sealed-secrets.netlify.app/&#34; height=&#34;450&#34; width=&#34;800&#34;/ data-glightbox=&#34;description: screenshot of https://sealed-secrets.netlify.app/&#34;&gt;&#xA;&lt;/a&gt;&#xA;&lt;p&gt;KubeSeal is a fantastic low friction pair to argocd.  The biggest benefit to&#xA;kubeseal is that you can safely commit secrets straight to &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt;.  It uses a one&#xA;way encryption method that is very secure and you can only decode the secrets&#xA;if you gain access to the keys.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/kubernetes-kubeseal/&#34; class=&#34;wikilink&#34; data-title=&#34;kubernetes kubeseal&#34; data-description=&#34;In my homelab kubernetes cluster I am using kubeseal to encrypt secrets. I have been using it successfully for a few months now wtih great success. It allows...&#34; data-date=&#34;2024-03-27&#34; data-preview=&#34;In my homelab kubernetes cluster I am using kubeseal to encrypt secrets. I have been using it successfully for a few months now wtih great success. It allows...&#34;&gt;kubernetes kubeseal&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ strawberry-graphql strawberry-sqlalchemy</title>
    <id>https://waylonwalker.com/strawberry-graphql-strawberry-sqlalchemy/</id>
    <updated>2024-03-19T19:34:44Z</updated>
    <published>2024-03-19T19:34:44Z</published>
    <link href="https://waylonwalker.com/strawberry-graphql-strawberry-sqlalchemy/" rel="alternate" type="text/html"></link>
    <summary type="text">strawberry-sqlalchemy by strawberry-graphql is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/strawberry-graphql/strawberry-sqlalchemy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;strawberry-sqlalchemy&lt;/a&gt; by &lt;a href=&#34;https://github.com/strawberry-graphql&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;strawberry-graphql&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;A SQLAlchemy Integration for strawberry-graphql&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tyxsspa AnyText</title>
    <id>https://waylonwalker.com/tyxsspa-anytext/</id>
    <updated>2024-03-19T19:34:37Z</updated>
    <published>2024-03-19T19:34:37Z</published>
    <link href="https://waylonwalker.com/tyxsspa-anytext/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered AnyText by tyxsspa, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/tyxsspa/AnyText&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;AnyText&lt;/a&gt; by &lt;a href=&#34;https://github.com/tyxsspa&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tyxsspa&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;Official implementation code of the paper &amp;lt;AnyText: Multilingual Visual Text Generation And Editing&amp;gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ fastapi full-stack-fastapi-template</title>
    <id>https://waylonwalker.com/fastapi-full-stack-fastapi-template/</id>
    <updated>2024-03-16T17:08:34Z</updated>
    <published>2024-03-16T17:08:34Z</published>
    <link href="https://waylonwalker.com/fastapi-full-stack-fastapi-template/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about full-stack-fastapi-template, an amazing project by fastapi. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/fastapi/full-stack-fastapi-template&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;full-stack-fastapi-template&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/fastapi&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fastapi&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Full stack, modern web application template. Using &lt;a href=&#34;/fastapi/&#34; class=&#34;glossary-term&#34; title=&#34;FastAPI is a modern and efficient web framework for Python, built on top of the Starlette web framework, and pydantic for data validation and serialization.&#34;&gt;FastAPI&lt;/a&gt;, React, SQLModel, PostgreSQL, Docker, GitHub Actions, automatic HTTPS and more.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ HeyPuter puter</title>
    <id>https://waylonwalker.com/heyputer-puter/</id>
    <updated>2024-03-16T16:12:38Z</updated>
    <published>2024-03-16T16:12:38Z</published>
    <link href="https://waylonwalker.com/heyputer-puter/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across puter from HeyPuter, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/HeyPuter/puter&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;puter&lt;/a&gt; from &lt;a href=&#34;https://github.com/HeyPuter&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;HeyPuter&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;🌐 The Internet OS! Free, Open-Source, and Self-Hostable.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Doomlab7 homelab-argocd</title>
    <id>https://waylonwalker.com/doomlab7-homelab-argocd/</id>
    <updated>2024-03-15T12:32:42Z</updated>
    <published>2024-03-15T12:32:42Z</published>
    <link href="https://waylonwalker.com/doomlab7-homelab-argocd/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered homelab-argocd by Doomlab7, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/Doomlab7/homelab-argocd&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;homelab-argocd&lt;/a&gt; by &lt;a href=&#34;https://github.com/Doomlab7&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Doomlab7&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;My ArgoCD app of apps repository&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ jesseduffield lazydocker</title>
    <id>https://waylonwalker.com/jesseduffield-lazydocker/</id>
    <updated>2024-03-07T14:10:17Z</updated>
    <published>2024-03-07T14:10:17Z</published>
    <link href="https://waylonwalker.com/jesseduffield-lazydocker/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across lazydocker from jesseduffield, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/jesseduffield/lazydocker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lazydocker&lt;/a&gt; from &lt;a href=&#34;https://github.com/jesseduffield&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jesseduffield&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;The lazier way to manage everything docker&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ datasette datasette-litestream</title>
    <id>https://waylonwalker.com/datasette-datasette-litestream/</id>
    <updated>2024-03-04T15:54:20Z</updated>
    <published>2024-03-04T15:54:20Z</published>
    <link href="https://waylonwalker.com/datasette-datasette-litestream/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on datasette-litestream, created by datasette.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/datasette/datasette-litestream&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;datasette-litestream&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/datasette&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;datasette&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Datasette plugin for streaming SQLite database backups to S3, using Litestream!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pydantic FastUI</title>
    <id>https://waylonwalker.com/pydantic-fastui/</id>
    <updated>2024-03-04T15:54:02Z</updated>
    <published>2024-03-04T15:54:02Z</published>
    <link href="https://waylonwalker.com/pydantic-fastui/" rel="alternate" type="text/html"></link>
    <summary type="text">FastUI by pydantic is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/pydantic/FastUI&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;FastUI&lt;/a&gt; by &lt;a href=&#34;https://github.com/pydantic&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pydantic&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;Build better UIs faster.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ minio minio</title>
    <id>https://waylonwalker.com/minio-minio/</id>
    <updated>2024-03-04T15:53:36Z</updated>
    <published>2024-03-04T15:53:36Z</published>
    <link href="https://waylonwalker.com/minio-minio/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across minio from minio, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/minio/minio&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;minio&lt;/a&gt; from &lt;a href=&#34;https://github.com/minio&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;minio&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;MinIO is a high-performance, S3 compatible object store, open sourced under GNU AGPLv3 license.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ amir20 dozzle</title>
    <id>https://waylonwalker.com/amir20-dozzle/</id>
    <updated>2024-03-01T23:30:44Z</updated>
    <published>2024-03-01T23:30:44Z</published>
    <link href="https://waylonwalker.com/amir20-dozzle/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by dozzle from amir20.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/amir20/dozzle&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dozzle&lt;/a&gt; from &lt;a href=&#34;https://github.com/amir20&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;amir20&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Realtime log viewer for docker containers.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ astral-sh uv</title>
    <id>https://waylonwalker.com/astral-sh-uv/</id>
    <updated>2024-03-01T23:28:37Z</updated>
    <published>2024-03-01T23:28:37Z</published>
    <link href="https://waylonwalker.com/astral-sh-uv/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across uv from astral-sh, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/astral-sh/uv&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;uv&lt;/a&gt; from &lt;a href=&#34;https://github.com/astral-sh&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;astral-sh&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;An extremely fast Python package and project manager, written in Rust.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Stability-AI StableCascade</title>
    <id>https://waylonwalker.com/stability-ai-stablecascade/</id>
    <updated>2024-03-01T15:58:17Z</updated>
    <published>2024-03-01T15:58:17Z</published>
    <link href="https://waylonwalker.com/stability-ai-stablecascade/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across StableCascade from Stability-AI, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/Stability-AI/StableCascade&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;StableCascade&lt;/a&gt; from &lt;a href=&#34;https://github.com/Stability-AI&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Stability-AI&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;Official Code for Stable Cascade&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ stevearc aerial.nvim</title>
    <id>https://waylonwalker.com/stevearc-aerial-nvim/</id>
    <updated>2024-02-27T01:17:36Z</updated>
    <published>2024-02-27T01:17:36Z</published>
    <link href="https://waylonwalker.com/stevearc-aerial-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across aerial.nvim from stevearc, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/stevearc/aerial.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;aerial.nvim&lt;/a&gt; from &lt;a href=&#34;https://github.com/stevearc&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;stevearc&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;Neovim plugin for a code outline window&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ zmievsa cadwyn</title>
    <id>https://waylonwalker.com/zmievsa-cadwyn/</id>
    <updated>2024-02-27T00:23:36Z</updated>
    <published>2024-02-27T00:23:36Z</published>
    <link href="https://waylonwalker.com/zmievsa-cadwyn/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about cadwyn, an amazing project by zmievsa. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/zmievsa/cadwyn&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cadwyn&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/zmievsa&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;zmievsa&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Production-ready community-driven modern Stripe-like API versioning in &lt;a href=&#34;/fastapi/&#34; class=&#34;glossary-term&#34; title=&#34;FastAPI is a modern and efficient web framework for Python, built on top of the Starlette web framework, and pydantic for data validation and serialization.&#34;&gt;FastAPI&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ kedro-org kedro-academy</title>
    <id>https://waylonwalker.com/kedro-org-kedro-academy/</id>
    <updated>2024-02-16T18:04:21Z</updated>
    <published>2024-02-16T18:04:21Z</published>
    <link href="https://waylonwalker.com/kedro-org-kedro-academy/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred kedro-academy by kedro-org. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/kedro-org/kedro-academy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-academy&lt;/a&gt; by &lt;a href=&#34;https://github.com/kedro-org&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-org&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;Repo for Kedro Academy&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Textualize toolong</title>
    <id>https://waylonwalker.com/textualize-toolong/</id>
    <updated>2024-02-11T15:13:32Z</updated>
    <published>2024-02-11T15:13:32Z</published>
    <link href="https://waylonwalker.com/textualize-toolong/" rel="alternate" type="text/html"></link>
    <summary type="text">Textualize has done a fantastic job with toolong. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/Textualize&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Textualize&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/Textualize/toolong&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;toolong&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;A terminal application to view, tail, merge, and search log files (plus JSONL).&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ bufferhead-code htmx-ai</title>
    <id>https://waylonwalker.com/bufferhead-code-htmx-ai/</id>
    <updated>2024-02-09T01:13:11Z</updated>
    <published>2024-02-09T01:13:11Z</published>
    <link href="https://waylonwalker.com/bufferhead-code-htmx-ai/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about htmx-ai, an amazing project by bufferhead-code. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/bufferhead-code/htmx-ai&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;htmx-ai&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/bufferhead-code&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;bufferhead-code&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Add AI support to &lt;a href=&#34;/htmx/&#34; class=&#34;glossary-term&#34; title=&#34;htmx is a frontend javascript library for creating dynamic web applications.&#34;&gt;HTMX&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>poc is not product</title>
    <id>https://waylonwalker.com/poc-is-not-product/</id>
    <updated>2024-01-28T09:49:57Z</updated>
    <published>2024-01-28T09:49:57Z</published>
    <link href="https://waylonwalker.com/poc-is-not-product/" rel="alternate" type="text/html"></link>
    <summary type="text">A poc is ** a product. I started focais, not in a rush, but as something that I already had a POC for and thought it would be easy. I wanted to build tools...</summary>
    <content type="html">&lt;p&gt;A poc is &lt;strong&gt;not&lt;/strong&gt; a product.  I started focais, not in a rush, but as something&#xA;that I already had a POC for and thought it would be easy.  I wanted to build&#xA;tools to make creating blog posts like this one easier.  I stared with &lt;code&gt;shots&lt;/code&gt;&#xA;a tool that takes screenshots of websites.&lt;/p&gt;&#xA;&lt;h2 id=&#34;poc-proof-of-concept&#34;&gt;POC (proof of concept) &lt;a href=&#34;#poc-proof-of-concept&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;For the poc, I made a single &lt;a href=&#34;/fastapi/&#34; class=&#34;glossary-term&#34; title=&#34;FastAPI is a modern and efficient web framework for Python, built on top of the Starlette web framework, and pydantic for data validation and serialization.&#34;&gt;fastapi&lt;/a&gt; endpoint that takes a url and returns a&#xA;screenshot of the page.  It converts the url into a key that I can lookup to&#xA;see if I have the shot, if I don’t I go get it.  With the open source libraries&#xA;out there, this is not too hard of a task.&lt;/p&gt;&#xA;&lt;h3 id=&#34;progress-thus-far&#34;&gt;Progress Thus Far &lt;a href=&#34;#progress-thus-far&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;/shot&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But this wasn’t enough&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;All it does so far for this first tool is take screenshots of websites, and&#xA;give you a hosted image.&lt;/p&gt;&#xA;&lt;h2 id=&#34;users&#34;&gt;Users &lt;a href=&#34;#users&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;To bring in users, I need to create a signup flow, with a database to store&#xA;users, login, logout, and email recovery.  I’ve never had to use an email&#xA;service before that wasn’t already mandated by a company or an iternal smtp&#xA;server.  After some searching I chose resend for email.&lt;/p&gt;&#xA;&lt;h3 id=&#34;progress-thus-far-1&#34;&gt;Progress thus far &lt;a href=&#34;#progress-thus-far-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li class=&#34;text-gray-500&#34;&gt;/shot&lt;/li&gt;&#xA;&lt;li&gt;email service for account recovery&lt;/li&gt;&#xA;&lt;li&gt;database to store users&lt;/li&gt;&#xA;&lt;li&gt;/login&lt;/li&gt;&#xA;&lt;li&gt;/forgot-password&lt;/li&gt;&#xA;&lt;li&gt;/recover-account&lt;/li&gt;&#xA;&lt;li&gt;/logout&lt;/li&gt;&#xA;&lt;li&gt;/signup&lt;/li&gt;&#xA;&lt;li&gt;/access-token&lt;/li&gt;&#xA;&lt;li&gt;/account&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;user-management&#34;&gt;User Management &lt;a href=&#34;#user-management&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Eventually I am going to need some user management for site admins (me), but&#xA;for now I just need to see users and some of their attributes such as&#xA;subscription level, number of shots, and such.  If I’m ever contacted for&#xA;support this will give me some first insight into what happened.&lt;/p&gt;&#xA;&lt;h2 id=&#34;subscription-levels&#34;&gt;Subscription Levels &lt;a href=&#34;#subscription-levels&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;For payment I chose stripe.  I was able to setup subscription levels with&#xA;config inside of stripe.  I setup a pricing page with jinja based on the data&#xA;right out of stripe, a way to create checkout sessions, a page to come back to&#xA;once you have executed a checkout, and a way to cancel your subscription.&lt;/p&gt;&#xA;&lt;h3 id=&#34;progress-thus-far-2&#34;&gt;Progress thus far &lt;a href=&#34;#progress-thus-far-2&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li class=&#34;text-gray-500&#34;&gt;/shot&lt;/li&gt;&#xA;&lt;li class=&#34;text-gray-500&#34;&gt;email service for account recovery&lt;/li&gt;&#xA;&lt;li class=&#34;text-gray-500&#34;&gt;database to store users&lt;/li&gt;&#xA;&lt;li class=&#34;text-gray-500&#34;&gt;/login&lt;/li&gt;&#xA;&lt;li class=&#34;text-gray-500&#34;&gt;/forgot-password&lt;/li&gt;&#xA;&lt;li class=&#34;text-gray-500&#34;&gt;/recover-account&lt;/li&gt;&#xA;&lt;li class=&#34;text-gray-500&#34;&gt;/logout&lt;/li&gt;&#xA;&lt;li class=&#34;text-gray-500&#34;&gt;/signup&lt;/li&gt;&#xA;&lt;li class=&#34;text-gray-500&#34;&gt;/access-token&lt;/li&gt;&#xA;&lt;li class=&#34;text-gray-500&#34;&gt;/account&lt;/li&gt;&#xA;&lt;li&gt;stripe account&lt;/li&gt;&#xA;&lt;li&gt;stripe api integration&lt;/li&gt;&#xA;&lt;li&gt;/pricing&lt;/li&gt;&#xA;&lt;li&gt;/create-checkout-session&lt;/li&gt;&#xA;&lt;li&gt;/checkout-success&lt;/li&gt;&#xA;&lt;li&gt;/cancel-subscription&lt;/li&gt;&#xA;&lt;li&gt;/reactivate-subscription&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;back-to-the-product&#34;&gt;Back to the Product &lt;a href=&#34;#back-to-the-product&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now that I have users, with subscriptions, and different subscription levels. A&#xA;shot might not be the same per url.  For instance a shot from a low tier&#xA;subscription might have a watermark, while a higher tier will remove the&#xA;watermark.  Now I need a way to track shots per user, and keep them up to date&#xA;with subscriptions.&lt;/p&gt;&#xA;&lt;h3 id=&#34;progress-thus-far-3&#34;&gt;Progress thus far &lt;a href=&#34;#progress-thus-far-3&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li class=&#34;text-gray-500&#34;&gt;/shot&lt;/li&gt;&#xA;&lt;li class=&#34;text-gray-500&#34;&gt;email service for account recovery&lt;/li&gt;&#xA;&lt;li class=&#34;text-gray-500&#34;&gt;database to store users&lt;/li&gt;&#xA;&lt;li class=&#34;text-gray-500&#34;&gt;/login&lt;/li&gt;&#xA;&lt;li class=&#34;text-gray-500&#34;&gt;/forgot-password&lt;/li&gt;&#xA;&lt;li class=&#34;text-gray-500&#34;&gt;/recover-account&lt;/li&gt;&#xA;&lt;li class=&#34;text-gray-500&#34;&gt;/logout&lt;/li&gt;&#xA;&lt;li class=&#34;text-gray-500&#34;&gt;/signup&lt;/li&gt;&#xA;&lt;li class=&#34;text-gray-500&#34;&gt;/access-token&lt;/li&gt;&#xA;&lt;li class=&#34;text-gray-500&#34;&gt;/account&lt;/li&gt;&#xA;&lt;li class=&#34;text-gray-500&#34;&gt;stripe account&lt;/li&gt;&#xA;&lt;li class=&#34;text-gray-500&#34;&gt;stripe api integration&lt;/li&gt;&#xA;&lt;li class=&#34;text-gray-500&#34;&gt;/pricing&lt;/li&gt;&#xA;&lt;li class=&#34;text-gray-500&#34;&gt;/create-checkout-session&lt;/li&gt;&#xA;&lt;li class=&#34;text-gray-500&#34;&gt;/checkout-success&lt;/li&gt;&#xA;&lt;li class=&#34;text-gray-500&#34;&gt;/cancel-subscription&lt;/li&gt;&#xA;&lt;li class=&#34;text-gray-500&#34;&gt;/reactivate-subscription&lt;/li&gt;&#xA;&lt;li&gt;POST /shot&lt;/li&gt;&#xA;&lt;li&gt;GET /shot/{id}&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;keeping-the-internet-working&#34;&gt;Keeping the internet working &lt;a href=&#34;#keeping-the-internet-working&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;At the end of all of this once a shot is created I want to keep it working for&#xA;users regarless of subscription.  It really bothers me when part of the&#xA;internet just stops working.  I hope to keep running costs low and enough&#xA;monthly subscribers to cover those costs.  And if you decide that fokais is not&#xA;a product giving you any more value your shots will still be here with us.  At&#xA;the moment the biggest cost is compute running headless chrome to take the&#xA;shots anyways, continuing to host them over time is must less of an issue.&lt;/p&gt;&#xA;&lt;h2 id=&#34;its-a-lot-but-not-near-enough&#34;&gt;It’s a Lot, but not near enough &lt;a href=&#34;#its-a-lot-but-not-near-enough&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’m a couple of months in on building this for a few days at a time here an&#xA;there. I am in no rush for it to start gaining revenue.  I am learning a ton so&#xA;far.  Whether fokais becomes a big thing or not, I will be able to bring these&#xA;skills to a new startup or to my professional career.&lt;/p&gt;&#xA;&lt;p&gt;It already feels 1000% more complicated than it was just to get the thing to&#xA;work for just me, but in the end it will be worth it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;its-still-not-complete&#34;&gt;It’s still not complete &lt;a href=&#34;#its-still-not-complete&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There’s feels like quite a bit to do before getting launched, testing out the&#xA;checkout workflow is HUGE thing.  I’ve never made a product for sale by myself&#xA;before, so I am definitly feeling some pressure when taking money to have a&#xA;product that works, and importantly not loosing the subscription or account.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ charmbracelet mods</title>
    <id>https://waylonwalker.com/charmbracelet-mods/</id>
    <updated>2024-01-25T03:25:43Z</updated>
    <published>2024-01-25T03:25:43Z</published>
    <link href="https://waylonwalker.com/charmbracelet-mods/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on mods by charmbracelet.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/charmbracelet/mods&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mods&lt;/a&gt; by &lt;a href=&#34;https://github.com/charmbracelet&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;charmbracelet&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;AI on the command line&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>nvim stupid gf bind</title>
    <id>https://waylonwalker.com/nvim-stupid-gf-bind/</id>
    <updated>2023-12-28T10:04:57Z</updated>
    <published>2023-12-28T10:04:57Z</published>
    <link href="https://waylonwalker.com/nvim-stupid-gf-bind/" rel="alternate" type="text/html"></link>
    <summary type="text">So after months of fighting with gf not going to template files, I finally decided to put in some effort to make it work.</summary>
    <content type="html">&lt;p&gt;So after months of fighting with gf not going to template files, I finally&#xA;decided to put in some effort to make it work.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This was the dumbest keybind in my config, that I copied from someone else&#xA;without understanding it.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;what-i-am-trying-to-do&#34;&gt;What I am trying to do &lt;a href=&#34;#what-i-am-trying-to-do&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have jinja templates in a directory called &lt;code&gt;templates&lt;/code&gt;.  I want to bind gf to&#xA;open a template file, but it is trying to open a new file &lt;code&gt;./base.html&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{% extends &amp;#34;base.html&amp;#34; %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{% if request.state.user %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    {% block title %}Fokais - {{ request.state.user.full_name }} {% endblock %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{% else %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    {% block title %}Fokais {% endblock %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{% endif %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{% block content %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    {% if request.state.user %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;h1&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;title&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;inline-block mx-auto text-5xl font-black leading-loose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;            text-transparent bg-clip-text bg-gradient-to-r from-red-600&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;            via-pink-500 to-yellow-400 ring-red-500 text-shadow-xl&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;            text-shadow-zinc-950 ring-5&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            {{ request.state.user.full_name }}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;h1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    {% endif %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    {% include &amp;#34;me_partial.html&amp;#34; %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{% endblock %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;what-did-not-work&#34;&gt;What did not work &lt;a href=&#34;#what-did-not-work&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I tried all sorts of changes to my path, but it still didn’t work.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;vim.api&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nvim_command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;set path+=templates/**&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;what-i-found&#34;&gt;What I found &lt;a href=&#34;#what-i-found&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;after digging into my keymap I found that I had remaped &lt;code&gt;gf&lt;/code&gt; to &lt;code&gt;edit&lt;/code&gt; years&#xA;ago.  This works great if the file is in your current directory, and if it’s not&#xA;it makes the file.  This bind completely breaks vim’s ability to &lt;code&gt;:find&lt;/code&gt; files&#xA;and was a terrible keybind that I added probably from someone else years ago&#xA;and have literally never used this feature.  If &lt;code&gt;gf&lt;/code&gt; opens an empty file I&#xA;always close it and assume that vim failed to &lt;code&gt;:find&lt;/code&gt; the file.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;-- Allow gf to open non-existent files&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gf&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;:edit &amp;lt;cfile&amp;gt;&amp;lt;CR&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;yes-after-that-fix-i-still-needed-to-adjust-my-path&#34;&gt;Yes, after that fix I still needed to adjust my path &lt;a href=&#34;#yes-after-that-fix-i-still-needed-to-adjust-my-path&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I ended up with the following in my options.lua.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;-- look for jinja templates in the templates directory&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;vim.opt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;templates/**&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>thoughts on unit tests</title>
    <id>https://waylonwalker.com/thoughts-on-unit-tests/</id>
    <updated>2023-12-22T08:49:07Z</updated>
    <published>2023-12-22T08:49:07Z</published>
    <link href="https://waylonwalker.com/thoughts-on-unit-tests/" rel="alternate" type="text/html"></link>
    <summary type="text">Your browser does not support the audio element.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/thought-on-unit-tests.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/thought-on-unit-tests.png&#34; alt=&#34;thoughts on unit tests cover image&#34;/ data-glightbox=&#34;description: thoughts on unit tests cover image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;audio controls=&#34;controls&#34;&gt;&#xA;  &lt;source type=&#34;audio/mp3&#34; src=&#34;https://dev-app.fokais.com/voice?url=https://waylonwalker.com/thoughts-on-unit-tests/&#34;/&gt;&#xA;  &lt;p&gt;Your browser does not support the audio element.&lt;/p&gt;&#xA;&lt;/audio&gt;&#xA;&lt;p&gt;Theo’s response puts a lot of my feelings about unit testing into words.  Many&#xA;of us have grown up in this world preaching unit testing.  We often hear these&#xA;statements “Everything must be unit tested, tests make code more maintainable.”&#xA;In reality when we are not writing complex low level code unit tests are&#xA;probably the wrong approach.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://thoughts.waylonwalker.com/post/192&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https%3A%2F%2Fthoughts.waylonwalker.com%2Fpost-og%2F192&amp;amp;height=640&amp;amp;width=1280&amp;amp;scaled_width=1280&amp;amp;scaled_height=640&amp;amp;selectors=&#34; alt=&#34;thought 192, a thought about theo’s reaction to prime’s unit testing&#34;/ data-glightbox=&#34;description: thought 192, a thought about theo’s reaction to prime’s unit testing&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;most-of-us-are-assemblers&#34;&gt;Most of us are assemblers &lt;a href=&#34;#most-of-us-are-assemblers&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;So much of software engineering is assembling existing well tested code. Crud&#xA;applications, UI, Data Pipelines, building on top of battle tested code.&lt;/p&gt;&#xA;&lt;h2 id=&#34;manufacturing-analogy---unit-testing&#34;&gt;Manufacturing Analogy - Unit Testing &lt;a href=&#34;#manufacturing-analogy---unit-testing&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This kind of reminds me of Manufacturing.  Individual components are QA tested&#xA;with tests that look more like unit test.  Parts like bearings, pistons,&#xA;shafts, valves, they are all tested against sophisticated statistics of sample&#xA;measurements.  This is quite similar to unit testing.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/gaugelab.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/gaugelab.png&#34; alt=&#34;a qa engineer meticulously checking the size of a bearing&#34;/ data-glightbox=&#34;description: a qa engineer meticulously checking the size of a bearing&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;You see measuring the individual sizes of these components does not guarantee&#xA;the actual function of the component.  Before the Henry Ford assembly line&#xA;parts like this were all different sizes, and they were all custom matched to&#xA;each other. The one industry that I can thing of that still exists today like&#xA;this is gunsmithing.  parts are made very close to size, but they need some&#xA;lapping and final finishing for high quality function.&lt;/p&gt;&#xA;&lt;h3 id=&#34;integration-testing&#34;&gt;Integration Testing &lt;a href=&#34;#integration-testing&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;So how are pumps, engines, valve assemblies, and so on tested?  They are&#xA;integration testsed based on their function.  They are not generally unit&#xA;tested to measurements of thier size.  A pump is tested on a test bench and&#xA;will be required to output a spec flow, a valve will have air or fluid applied&#xA;and tested for leaks.  An engine is a more complicated case where it will be&#xA;ran on a suite of cycles and should output a spec level of power, while&#xA;emissions, temperature, fuel consumption and hundreds of other measurements&#xA;stay within their specs.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/engine-testing.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/engine-testing.png&#34; alt=&#34;A large engine sitting on a test bench&#34;/ data-glightbox=&#34;description: A large engine sitting on a test bench&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;as-assemblers-we-should-be-thinking-of-integration-testing&#34;&gt;As assemblers we should be thinking of integration testing &lt;a href=&#34;#as-assemblers-we-should-be-thinking-of-integration-testing&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There is 100% a place for unit testing in the software engineering industry,&#xA;just like manufacturing, but I don’t think it makes sense everywhere.  Library&#xA;development and lower level algorithms look a lot more like parts that can be&#xA;physically measured. But that’s probably not the code most of us are writing&#xA;most of the time.&lt;/p&gt;&#xA;&lt;p&gt;We are likely assembling a lot of code to build a product such as a data&#xA;pipeline, or a web application for instance.  For these cases we should be&#xA;thinking about the final function of the product.  Like Prime says in the&#xA;video, think of the product as a black box, as if you have no idea how anything&#xA;works in the box, but you know how it should function.&lt;/p&gt;&#xA;&lt;p&gt;I’m starting to lean more into simple tools for this qa work on we applications&#xA;that I build.  They are easy to build and maintain, and do not get in the way&#xA;when the direction of the project changes.  If I rip out half my code it would&#xA;be likely to see 3/4’s of my unit tests failing.  Not a fun thing to maintain.&lt;/p&gt;&#xA;&lt;h2 id=&#34;uptime&#34;&gt;Uptime &lt;a href=&#34;#uptime&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is the simplest form of integration testing that I am pulling into fokais,&#xA;and it’s nearly fully automatable without much thought on my behalf.  I am&#xA;building web applications in &lt;a href=&#34;/fastapi/&#34; class=&#34;glossary-term&#34; title=&#34;FastAPI is a modern and efficient web framework for Python, built on top of the Starlette web framework, and pydantic for data validation and serialization.&#34;&gt;fastapi&lt;/a&gt;, these api’s have endpoints that should be&#xA;reachable.  Tools like Uptime Kuma make it trivial to pull in all of my&#xA;endpoints and simply ask if they are reachable once per minute.&lt;/p&gt;&#xA;&lt;p&gt;With uptime tests I can more confidently move through dev to prod.  If dev has&#xA;been running for a number of minutes and alarms are not going off, it’s probably&#xA;functioning.&lt;/p&gt;&#xA;&lt;h2 id=&#34;functionality-testing&#34;&gt;Functionality Testing &lt;a href=&#34;#functionality-testing&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’ve used tools built upon selenium in the past, such as testproject.io.  It is&#xA;a pretty great experience, and makes it pretty easy to define, when a user logs&#xA;into the dev app, and clicks the dashboard, can they see their name and account&#xA;information.&lt;/p&gt;&#xA;&lt;p&gt;These tests are likely to remain true for the life of the project.  No matter&#xA;what changes inside the black box, when a user goes to their account they&#xA;should see their account information.  It might be server rendered with jinja,&#xA;fetch with &lt;a href=&#34;/htmx/&#34; class=&#34;glossary-term&#34; title=&#34;htmx is a frontend javascript library for creating dynamic web applications.&#34;&gt;htmx&lt;/a&gt;, or client side rendered with reactjs, it does not matter.&lt;/p&gt;&#xA;&lt;h2 id=&#34;load-testing&#34;&gt;Load Testing &lt;a href=&#34;#load-testing&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The last thing I want to really put as a tool in my toolbelt is load testing.&#xA;It’s pretty easy to degrade the experience of a webpage with a bad database&#xA;query or api call.  Load testing can ensure that your application can handle&#xA;the load that you want it to in dev before you release to prod.  I am looking&#xA;into bringing in &lt;a href=&#34;https://locust.io/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/locust.io.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/locust.io.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Locust.io&lt;/a&gt; for load testing fokais.com.&lt;/p&gt;&#xA;&lt;h2 id=&#34;logging-and-monitoring&#34;&gt;Logging and Monitoring &lt;a href=&#34;#logging-and-monitoring&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Inevitably users will use your product in ways that were never intended. It&#xA;will be nearly impossible to cover everything with any sort of test.  This is&#xA;where logging and monitoring come in.  If you can set up error monitoring and&#xA;alerts, then you can check production logs to see what the heck happend and&#xA;potentially resolve the issue.  Without monitoring, you will have wild bugs&#xA;that you never thought could exist.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/engine-failure.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/engine-failure.png&#34; alt=&#34;An engine being used in ways unimaginable by the manufacturer being pushed to it’s breaking point.&#34;/ data-glightbox=&#34;description: An engine being used in ways unimaginable by the manufacturer being pushed to it’s breaking point.&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;unit-tests-are-not-a-golden-fix-all&#34;&gt;Unit Tests are not a Golden fix all &lt;a href=&#34;#unit-tests-are-not-a-golden-fix-all&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;No tests will never be perfect, they will not catch everything.  The point that&#xA;I was inspired to make after watching&#xA;&lt;a href=&#34;https://www.youtube.com/watch?v=MbU-PKukdMw&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Theo’s video&lt;/a&gt;&#xA;is that unit tests may not the right thing for your product, and then requiring&#xA;coverage metrics on PR may be more of a detriment to the product than help.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ jesseleite nvim-macroni</title>
    <id>https://waylonwalker.com/jesseleite-nvim-macroni/</id>
    <updated>2023-12-20T13:40:27Z</updated>
    <published>2023-12-20T13:40:27Z</published>
    <link href="https://waylonwalker.com/jesseleite-nvim-macroni/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across nvim-macroni from jesseleite, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/jesseleite/nvim-macroni&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-macroni&lt;/a&gt; from &lt;a href=&#34;https://github.com/jesseleite&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jesseleite&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;🤌 Save your macros for future use&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ jesseleite macroni.nvim</title>
    <id>https://waylonwalker.com/jesseleite-macroni-nvim/</id>
    <updated>2023-12-20T13:40:27Z</updated>
    <published>2023-12-20T13:40:27Z</published>
    <link href="https://waylonwalker.com/jesseleite-macroni-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">jesseleite has done a fantastic job with macroni.nvim. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/jesseleite&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jesseleite&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/jesseleite/macroni.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;macroni.nvim&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Save your macros for future use 🤌&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ikalnytskyi httpie-auth-store</title>
    <id>https://waylonwalker.com/ikalnytskyi-httpie-auth-store/</id>
    <updated>2023-12-17T20:46:59Z</updated>
    <published>2023-12-17T20:46:59Z</published>
    <link href="https://waylonwalker.com/ikalnytskyi-httpie-auth-store/" rel="alternate" type="text/html"></link>
    <summary type="text">ikalnytskyi has done a fantastic job with httpie-auth-store. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/ikalnytskyi&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ikalnytskyi&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/ikalnytskyi/httpie-auth-store&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;httpie-auth-store&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Credential store plugin for HTTPie, attaches auth to ongoing request.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>cli auth</title>
    <id>https://waylonwalker.com/cli-auth/</id>
    <updated>2023-12-17T20:09:03Z</updated>
    <published>2023-12-17T20:09:03Z</published>
    <link href="https://waylonwalker.com/cli-auth/" rel="alternate" type="text/html"></link>
    <summary type="text">Authentication from cli tools can be a bit of a bear, and I have to look it up every time. This is my reference guide for future me to remember how to easily...</summary>
    <content type="html">&lt;p&gt;Authentication from cli tools can be a bit of a bear, and I have to look it up&#xA;every time. This is my reference guide for future me to remember how to easily&#xA;do it.&lt;/p&gt;&#xA;&lt;p&gt;I set up a &lt;a href=&#34;/fastapi/&#34; class=&#34;glossary-term&#34; title=&#34;FastAPI is a modern and efficient web framework for Python, built on top of the Starlette web framework, and pydantic for data validation and serialization.&#34;&gt;fastapi&lt;/a&gt; server running on port 8000, it uses a basic auth with&#xA;&lt;code&gt;waylonwalker&lt;/code&gt; as the username and &lt;code&gt;asdf&lt;/code&gt; as the password. The server follows&#xA;along with what comes out of the docs. I have it setup to take basic auth,&#xA;form username and password, or a bearer token for authentication.&lt;/p&gt;&#xA;&lt;h2 id=&#34;curl&#34;&gt;curl &lt;a href=&#34;#curl&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;/og/&#34; class=&#34;glossary-term&#34; title=&#34;OG is short for open graph, a set of standard meta tags that are used for social media sharing. This is what tells other websites how to describe and display...&#34;&gt;og&lt;/a&gt; of command line url tools.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# basic auth&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -u &lt;span class=&#34;s1&#34;&gt;&amp;#39;waylonwalker:asdf&amp;#39;&lt;/span&gt; -X POST localhost:8000/token&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# basic auth with password prompt&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -u &lt;span class=&#34;s1&#34;&gt;&amp;#39;waylonwalker&amp;#39;&lt;/span&gt; -X POST localhost:8000/token&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# token&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -H &lt;span class=&#34;s1&#34;&gt;&amp;#39;Authorization: bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ3YXlsb253YWxrZXIiLCJleHAiOjE3MDI5NTI2MDJ9.GeYNt7DNal6LTiPoavJnqypaMt4vYeriXdq5lqu1ILg&amp;#39;&lt;/span&gt; -X POST localhost:8000/token&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;wget&#34;&gt;wget &lt;a href=&#34;#wget&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;My go to if I want the result to go into a file.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# basic auth&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget -q -O - --auth-no-challenge --http-user&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;waylonwalker --http-password&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;asdf --post-data &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt; localhost:8000/token&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# token&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget -q -O - --header&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Authorization: bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ3YXlsb253YWxrZXIiLCJleHAiOjE3MDI5NTI2MDJ9.GeYNt7DNal6LTiPoavJnqypaMt4vYeriXdq5lqu1ILg&amp;#34;&lt;/span&gt; -O - --post-data &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt; localhost:8000/token&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;httpx&#34;&gt;httpx &lt;a href=&#34;#httpx&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;An http client written in python, primarilty used with the python api, but has a nice cli.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# install&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python3 -m pip install httpx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# basic auth&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;httpx -m POST --auth waylonwalker asdf http://localhost:8000/token&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# basic auth with password prompt&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;httpx -m POST --auth waylonwalker - http://localhost:8000/token&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# token&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;httpx -m POST --headers&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Authorization&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ3YXlsb253YWxrZXIiLCJleHAiOjE3MDI5NTI2MDJ9.GeYNt7DNal6LTiPoavJnqypaMt4vYeriXdq5lqu1ILg&amp;#34;&lt;/span&gt; http://localhost:8000/token&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;httpie&#34;&gt;httpie &lt;a href=&#34;#httpie&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;A modern http client written in python.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# install&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python3 -m pip install httpie&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# basic auth&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;http POST localhost:8000/token -a waylonwalker:asdf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# basic auth with password prompt&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;http POST localhost:8000/token -a waylonwalker&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# token&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;http POST localhost:8000/token -A bearer -a eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ3YXlsb253YWxrZXIiLCJleHAiOjE3MDI5NTI2MDJ9.GeYNt7DNal6LTiPoavJnqypaMt4vYeriXdq5lqu1ILg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;httpie-with-plugin&#34;&gt;httpie with plugin &lt;a href=&#34;#httpie-with-plugin&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# install&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python3 -m pip install httpie-credential-store&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# usage&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;http POST localhost:8000/token -A creds&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;httpie-prompt&#34;&gt;httpie prompt &lt;a href=&#34;#httpie-prompt&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;http-prompt&lt;/code&gt; comes from the httpie org, and has an interactive cli interface&#xA;into apis. You can even specify a spec file to autocomplete on api methods.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;http-prompt localhost:8000 --auth waylonwalker:asdf --spec openapi.json&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Hiding Form input During htmx Request</title>
    <id>https://waylonwalker.com/htmx-request-hide-input/</id>
    <updated>2023-12-14T07:56:27Z</updated>
    <published>2023-12-14T07:56:27Z</published>
    <link href="https://waylonwalker.com/htmx-request-hide-input/" rel="alternate" type="text/html"></link>
    <summary type="text">I am working on fokais.com&#39;s signup page, and I want to hide the form input during an htmx request. I was seeing some issues where I was able to prevent...</summary>
    <content type="html">&lt;p&gt;I am working on fokais.com’s signup page, and I want to hide the form input during&#xA;an &lt;a href=&#34;/htmx/&#34; class=&#34;glossary-term&#34; title=&#34;htmx is a frontend javascript library for creating dynamic web applications.&#34;&gt;htmx&lt;/a&gt; request. I was seeing some issues where I was able to prevent spamming&#xA;the submit button, but was still able to get one extra hit on it.&lt;/p&gt;&#xA;&lt;p&gt;It also felt like nothing was happening while sending the email to the user for&#xA;verification. Now I get the form to disappear and a spinner to show during the&#xA;request.&lt;/p&gt;&#xA;&lt;h2 id=&#34;&lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;html&lt;/a&gt;&#34;&gt;HTML &lt;a href=&#34;#html&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let’s start off with the form. It uses htmx to submit a post request to the&#xA;&lt;code&gt;post_request&lt;/code&gt; route. Note that there is a spinner in the &lt;code&gt;post_request&lt;/code&gt; with the&#xA;&lt;code&gt;htmx-indicator&lt;/code&gt; class.&lt;/p&gt;&#xA;&lt;p&gt;The intent is to hide the spinner until the request is running, and hide all of&#xA;the form input during the request.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;form&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;signup-form&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;na&#34;&gt;hx-swap-oob&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;outerHTML&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;m-4 mx-auto mb-6 flex w-80 flex-col rounded-lg b p-4 shadow-xlc shadow-cyan-500/10&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;na&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;POST&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;na&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;{{ url_for(&amp;#39;post_signup&amp;#39;) }}&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;na&#34;&gt;hx-post&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;{{ url_for(&amp;#39;post_signup&amp;#39;) }}&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;input&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;mx-8 mt-6 mb-4 border border-black bg-zinc-900 p-1 text-center focus:bg-zinc-800&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;{{ full_name }}&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;full_name&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;placeholder&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Full Name&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  {% if full_name_error %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;-mt-6 mb-6 mx-8 text-red-500 p-1 text-center&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    {{ full_name_error }}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  {% endif %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;input&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;mx-8 mb-4 border border-black bg-zinc-900 p-1 text-center focus:bg-zinc-800&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;{{ username }}&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;username&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;placeholder&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;username&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  {% if username_error %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;-mt-6 mb-6 mx-8 text-red-500 p-1 text-center&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    {{ username_error }}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  {% endif %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;input&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;mx-8 mb-4 border border-black bg-zinc-900 p-1 text-center focus:bg-zinc-800&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;email&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;email&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;{{ email }}&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;placeholder&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;email&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  {% if email_error %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;-mt-6 mb-6 mx-8 text-red-500 p-1 text-center&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    {{ email_error }}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  {% endif %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;input&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;mx-auto w-32 mb-4 border border-black bg-purple-900 p-1 text-center focus:bg-zinc-800&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;submit&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;sign up&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;role&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;mx-auto htmx-indicator&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;svg&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;mx-auto animate-spin h-5 w-5 text-white&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;na&#34;&gt;xmlns&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;https://www.w3.org/2000/svg&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;na&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;none&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;na&#34;&gt;viewBox&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;0 0 24 24&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;circle&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;opacity-25&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;na&#34;&gt;cx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;12&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;na&#34;&gt;cy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;12&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;na&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;10&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;na&#34;&gt;stroke&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;currentColor&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;na&#34;&gt;stroke-width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;4&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;circle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;path&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;opacity-75&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;na&#34;&gt;fill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;currentColor&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;na&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;svg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;Signing up...&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;form&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Yes this is styled using tailwindcss.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/still-loving-tailwind/&#34; class=&#34;hoverlink&#34;&gt;https://waylonwalker.com/still-loving-tailwind/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;css&#34;&gt;CSS &lt;a href=&#34;#css&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let’s take a look at how we achieve switching between only spinner an only form&#xA;inputs using css.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;htmx-indicator&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;err&#34;&gt;@apply&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;hidden&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;opacity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;transition&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;opacity&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;500&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;ms&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;ease-in&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;htmx-request&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;htmx-request&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;submit&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;htmx-request&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;htmx-request&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;err&#34;&gt;@apply&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;hidden&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;htmx-request&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;htmx-indicator&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;opacity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;err&#34;&gt;@apply&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;block&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;htmx-request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;htmx-indicator&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;opacity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;err&#34;&gt;@apply&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;block&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;final-result&#34;&gt;Final Result &lt;a href=&#34;#final-result&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is the final result of me signing up for a new account in fokais.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/fokais-signup.mp4&#34; class=&#34;glightbox-link&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34;&gt;&lt;source src=&#34;https://images.waylonwalker.com/fokais-signup.mp4&#34; type=&#34;video/mp4&#34;&gt;Final Result&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ DataDog ddqa</title>
    <id>https://waylonwalker.com/datadog-ddqa/</id>
    <updated>2023-12-13T22:06:26Z</updated>
    <published>2023-12-13T22:06:26Z</published>
    <link href="https://waylonwalker.com/datadog-ddqa/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out ddqa by DataDog. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/DataDog/ddqa&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ddqa&lt;/a&gt; by &lt;a href=&#34;https://github.com/DataDog&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;DataDog&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;Datadog’s QA manager for releases of GitHub repositories&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ cross-rs cross</title>
    <id>https://waylonwalker.com/cross-rs-cross/</id>
    <updated>2023-12-13T21:59:00Z</updated>
    <published>2023-12-13T21:59:00Z</published>
    <link href="https://waylonwalker.com/cross-rs-cross/" rel="alternate" type="text/html"></link>
    <summary type="text">I like cross-rs&#39;s project cross.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/cross-rs&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cross-rs’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/cross-rs/cross&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cross&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;“Zero setup” cross compilation and “cross testing” of Rust crates&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ofek pyapp</title>
    <id>https://waylonwalker.com/ofek-pyapp/</id>
    <updated>2023-12-13T18:07:49Z</updated>
    <published>2023-12-13T18:07:49Z</published>
    <link href="https://waylonwalker.com/ofek-pyapp/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on pyapp, created by ofek.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/ofek/pyapp&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pyapp&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/ofek&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ofek&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Runtime installer for Python applications&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ llmware-ai llmware</title>
    <id>https://waylonwalker.com/llmware-ai-llmware/</id>
    <updated>2023-12-11T15:51:29Z</updated>
    <published>2023-12-11T15:51:29Z</published>
    <link href="https://waylonwalker.com/llmware-ai-llmware/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? llmware by llmware-ai.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/llmware-ai/llmware&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;llmware&lt;/a&gt; by &lt;a href=&#34;https://github.com/llmware-ai&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;llmware-ai&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Unified framework for building enterprise RAG pipelines with small, specialized models&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Stripe Cancellations in FastAPI and SQLModel</title>
    <id>https://waylonwalker.com/stripe-cancellations/</id>
    <updated>2023-12-09T22:29:15Z</updated>
    <published>2023-12-09T22:29:15Z</published>
    <link href="https://waylonwalker.com/stripe-cancellations/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I am working on fokais.com, trying to get to a point where I can launch by workig through stripe integrations. This is my first time using stripe, so...</summary>
    <content type="html">&lt;p&gt;Today I am working on fokais.com, trying to get to a point where I can launch&#xA;by workig through stripe integrations. This is my first time using stripe, so&#xA;there has been quite a bit to learn, and I am probably building in more than I&#xA;need to before launching, but I am learning, and not in a rush to launch.&lt;/p&gt;&#xA;&lt;p&gt;I am building the fokais backent in python primarilyt with &lt;a href=&#34;/fastapi/&#34; class=&#34;glossary-term&#34; title=&#34;FastAPI is a modern and efficient web framework for Python, built on top of the Starlette web framework, and pydantic for data validation and serialization.&#34;&gt;fastapi&lt;/a&gt; and sqlmodel&#xA;on sqlite. My billing integration is going to be all Stripe.&lt;/p&gt;&#xA;&lt;h2 id=&#34;stripe-subscription-cancellations-docs&#34;&gt;Stripe Subscription Cancellations Docs &lt;a href=&#34;#stripe-subscription-cancellations-docs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is a link to the stripe docs for your refrence, especially if you want to&#xA;see how to cancel subscriptions in other languages. They include code samples&#xA;for many popular languages.&lt;/p&gt;&#xA;&lt;a href=&#34;https://stripe.com/docs/billing/subscriptions/cancel#canceling&#34; title=&#34;Cancel subscriptions | Stripe Documentation&#34;&gt;&#xA;    &lt;img class=&#34;object-fit aspect-[800/450] w-full rounded-lg border border-black bg-neutral-900 shadow-lg shadow-neutral-900 glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https%3A%2F%2Fstripe.com%2Fdocs%2Fbilling%2Fsubscriptions%2Fcancel%23canceling&amp;amp;height=450&amp;amp;width=800&amp;amp;scaled_width=800&amp;amp;scaled_height=450&amp;amp;selectors=&#34; alt=&#34;Cancel subscriptions | Stripe Documentation&#34; title=&#34;Cancel subscriptions | Stripe Documentation&#34;/ data-glightbox=&#34;description: Cancel subscriptions | Stripe Documentation&#34;&gt;&#xA;&lt;/a&gt;&#xA;&lt;h2 id=&#34;user-model&#34;&gt;User Model &lt;a href=&#34;#user-model&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is the part of the user model that includes the cancel and reactivate&#xA;methods. It pretty much follows the stripe guide.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;UserBase&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SQLModel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# type: ignore[call-arg]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;username&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Field&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unique&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;full_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;email&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;email_verified&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;disabled&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;signup_date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Optional&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Field&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;default_factory&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;utcnow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;stripe_customer_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Optional&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;cancel_subscription&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;subscription&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;active_subscriptions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;stripe&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Subscription&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;modify&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;subscription&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;cancel_at_period_end&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;refresh&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;reactivate_subscription&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;subscription&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;active_subscriptions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;stripe&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Subscription&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;modify&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;subscription&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;cancel_at_period_end&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;refresh&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;cancellations-api&#34;&gt;Cancellations api &lt;a href=&#34;#cancellations-api&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is the cancellations api. I created an are you sure form that I can link&#xA;to from the accounts page with a normal anchor tag. Note that I am doing a&#xA;&lt;code&gt;POST&lt;/code&gt; request to do the cancellation from a form. I want this to work for any&#xA;user whether there is js or not. This is an operation that will change the&#xA;users data, and I want to make sure that it avoids all browser and cdn caching.&#xA;As a scrappy startup we are running light on infrastructure and are caching&#xA;hard at the CDN to avoid excessive server hits.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; I am doing a `POST` request to do the cancellation from a form.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/div&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@pricing_router.get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/cancel&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@pricing_router.get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/cancel/&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_cancel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;current_user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Annotated&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;User&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Depends&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_current_user_if_logged_in&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;templates&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TemplateResponse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;cancel.html&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s2&#34;&gt;&amp;#34;request&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s2&#34;&gt;&amp;#34;prices&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;products&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;prices&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s2&#34;&gt;&amp;#34;products&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;products&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;products&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s2&#34;&gt;&amp;#34;current_user&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;current_user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@pricing_router.post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/cancel&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@pricing_router.post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/cancel/&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;post_cancel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;current_user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Annotated&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;User&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Depends&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_current_user_if_logged_in&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;current_user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cancel_subscription&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HTMLResponse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;p id=&amp;#34;cancel&amp;#34; hx-swap-oob=&amp;#34;outerHTML&amp;#34;&amp;gt;Your Subscription has been Cancelled&amp;lt;/p&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;reactivations&#34;&gt;Reactivations &lt;a href=&#34;#reactivations&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Reactivating accounts looks just about the same as cancelling, only flippng &lt;code&gt;True&lt;/code&gt; to &lt;code&gt;False&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@pricing_router.get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/reactivate&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@pricing_router.get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/reactivate/&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_reactivate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;current_user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Annotated&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;User&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Depends&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_current_user_if_logged_in&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;templates&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TemplateResponse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;reactivate.html&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s2&#34;&gt;&amp;#34;request&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s2&#34;&gt;&amp;#34;prices&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;products&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;prices&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s2&#34;&gt;&amp;#34;products&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;products&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;products&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s2&#34;&gt;&amp;#34;current_user&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;current_user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@pricing_router.post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/reactivate&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@pricing_router.post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/reactivate/&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;post_reactivate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;current_user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Annotated&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;User&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Depends&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_current_user_if_logged_in&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;current_user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;reactivate_subscription&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HTMLResponse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;p id=&amp;#34;reactivate&amp;#34; hx-swap-oob=&amp;#34;outerHTML&amp;#34;&amp;gt;Your Subscription has been reactivated&amp;lt;/p&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;full-user-model&#34;&gt;Full User Model &lt;a href=&#34;#full-user-model&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is the full user model, completely subject to change in the future, but it&#xA;includes the cancel and reactivate methods.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;UserBase&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SQLModel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# type: ignore[call-arg]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;username&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Field&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unique&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;full_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;email&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;email_verified&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;disabled&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;signup_date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Optional&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Field&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;default_factory&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;utcnow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;stripe_customer_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Optional&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@property&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;session&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;next&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_session&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@classmethod&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_by_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;cls&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;next&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_session&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;cls&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;refresh&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;cache&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;active_subscriptions_&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3600&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;cache&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;active_products_&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3600&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_checkout_sessions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;stripe&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;checkout&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Session&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;retrieve&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stripe_checkout_session_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;session&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CheckoutSession&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CheckoutSession&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;user_id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;all&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stripe_checkout_session_id&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_active_subscriptions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;subscriptions&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;subscription&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;stripe&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;checkout&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Session&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;retrieve&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stripe_checkout_session_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;session&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CheckoutSession&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CheckoutSession&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;user_id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;all&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stripe_checkout_session_id&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;status&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;complete&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;active_subscriptions&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stripe&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Subscription&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;retrieve&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;subscription&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;subscription&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;subscriptions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;active_subscriptions&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;has_active_subscription&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;active_subscriptions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@property&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;active_subscriptions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;active_subscriptions&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cache&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;active_subscriptions_&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;active_subscriptions&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;active_subscriptions&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;active_subscriptions&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_active_subscriptions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;cache&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;active_subscriptions_&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;active_subscriptions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3600&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;active_subscriptions&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@property&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;active_plans&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;subscriptions&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;active_subscriptions&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;plans&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;subscription&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;plan&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;subscription&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;subscriptions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;plans&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@property&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;subscription_to_plan&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;subscriptions&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;active_subscriptions&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;plans&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;subscription&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;subscription&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;plan&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;subscription&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;subscriptions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;plans&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@property&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;plan_to_subscription&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;plans&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;k&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;subscription_to_plan&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;plans&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_active_products&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;plans&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;active_plans&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;products&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stripe&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Product&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;retrieve&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;plan&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;product&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;plan&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;plans&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;products&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@property&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;plan_to_product&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;plans&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;active_plans&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;products&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;plan&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;stripe&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Product&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;retrieve&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;plan&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;product&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;plan&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;plans&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;products&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@property&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;prodct_to_plan&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;plans&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;active_plans&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;products&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stripe&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Product&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;retrieve&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;plan&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;product&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;plan&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;plan&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;plans&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;products&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@property&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;active_products&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;products&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cache&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;active_products_&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;products&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;products&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;products&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_active_products&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;cache&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;active_products_&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;products&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3600&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;products&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@property&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;best_active_subscription&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;subscriptions&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;active_subscriptions&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;subscriptions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@property&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;best_active_product&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;products&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;active_products&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;products&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sort&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;lambda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;level&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;products&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@property&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;best_active_subscription&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;subscription_id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;plan_to_subscription&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;prodct_to_plan&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;best_active_product&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;stripe&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Subscription&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;retrieve&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;subscription_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@property&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;product&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;best_active_product&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;product&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;metadata&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;subscription_status&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;subscriptions&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;active_subscriptions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;cancel_subscription&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;subscription&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;active_subscriptions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;stripe&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Subscription&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;modify&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;subscription&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;cancel_at_period_end&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;refresh&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;reactivate_subscription&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;subscription&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;active_subscriptions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;stripe&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Subscription&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;modify&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;subscription&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;cancel_at_period_end&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;refresh&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Looking for a Heroku replacement, What I found was shocking!</title>
    <id>https://waylonwalker.com/looking-for-a-heroku-replacement/</id>
    <updated>2023-12-04T20:29:46Z</updated>
    <published>2023-12-04T20:29:46Z</published>
    <link href="https://waylonwalker.com/looking-for-a-heroku-replacement/" rel="alternate" type="text/html"></link>
    <summary type="text">Your browser does not support the audio element.</summary>
    <content type="html">&lt;audio controls=&#34;controls&#34;&gt;&#xA;  &lt;source type=&#34;audio/mp3&#34; src=&#34;https://dev-app.fokais.com/voice?url=https://waylonwalker.com/looking-for-a-heroku-replacement/&#34;/&gt;&#xA;  &lt;p&gt;Your browser does not support the audio element.&lt;/p&gt;&#xA;&lt;/audio&gt;&#xA;&lt;p&gt;I’ve long hosted my personal blog as a static site on waylonwalker.com. It’s&#xA;all markdown, converted to &lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;html&lt;/a&gt;, and shipped as is. It’s been great, I’ve&#xA;moved it from GitHub Pages, to Netlify, tried Vercel for a minute, and have&#xA;landed on Cloudflare Pages. Each migration has not really been that&#xA;hard, it’s just pointing ci to a different host after the site has built.&lt;/p&gt;&#xA;&lt;a href=&#34;https://pages.cloudflare.com/&#34;&gt;&#xA;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://pages.cloudflare.com/&amp;amp;height=450&amp;amp;width=800&amp;amp;scaled_width=800&amp;amp;scaled_height=450&amp;amp;selectors=&#34; alt=&#34;screenshot of https://pages.cloudflare.com/&#34; height=&#34;450&#34; width=&#34;800&#34;/ data-glightbox=&#34;description: screenshot of https://pages.cloudflare.com/&#34;&gt;&#xA;&lt;/a&gt;&#xA;&lt;h2 id=&#34;what-about-server-side&#34;&gt;What about server side &lt;a href=&#34;#what-about-server-side&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now the part that I have struggled with is how to cheaply host a server&#xA;rendered application that can just live on forever without me paying for it.&#xA;This is a harder problem as it costs more to keep servers spinning, memory, and&#xA;disk all ready for you to use at a moments notice.&lt;/p&gt;&#xA;&lt;h2 id=&#34;honestly&#34;&gt;Honestly &lt;a href=&#34;#honestly&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;a href=&#34;https://heroku.com&#34;&gt;&#xA;&lt;img class=&#34;glightbox&#34; alt=&#34;screenshot of https://heroku.com&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://heroku.com&amp;amp;height=450&amp;amp;width=800&amp;amp;scaled_width=800&amp;amp;scaled_height=450&amp;amp;selectors=&#34; height=&#34;450&#34; width=&#34;800&#34; &lt;=&#34;&#34; a=&#34;&#34;/ data-glightbox=&#34;description: screenshot of https://heroku.com&#34;&gt;&#xA;&lt;p&gt;I never really deployed anything that useful on heroku, but it seems like the&#xA;klenex of the bunch that’s why they are in the title. I’ve moved between&#xA;digital ocean and fly.io, and have had some great experiences with both. I&#xA;just don’t want to build something that is going perpetually cost money, I’m&#xA;cheap and dont want to feel the burden of paying for something that I might not&#xA;be using all the time.&lt;/p&gt;&#xA;&lt;h2 id=&#34;flyio&#34;&gt;fly.io &lt;a href=&#34;#flyio&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;/a&gt;&lt;a href=&#34;https://fly.io&#34;&gt;&#xA;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://fly.io&amp;amp;height=450&amp;amp;width=800&amp;amp;scaled_width=800&amp;amp;scaled_height=450&amp;amp;selectors=&#34; alt=&#34;screenshot of https://fly.io&#34; height=&#34;450&#34; width=&#34;800&#34; &lt;=&#34;&#34; a=&#34;&#34;/ data-glightbox=&#34;description: screenshot of https://fly.io&#34;&gt;&#xA;&lt;p&gt;fly is absolutely amazing to get off the ground. Their cli is top notch. They&#xA;have servers all over the place and have a great interface to get your&#xA;application deployed close to your users. You just can’t run all that much on&#xA;it before you end up off the free tier.&lt;/p&gt;&#xA;&lt;h2 id=&#34;serverless&#34;&gt;serverless &lt;a href=&#34;#serverless&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;These platforms so far have just not felt right for me, again, I have to pay&#xA;for them, many of them I have to worry about how hard they would get hit, and&#xA;often they are focused on javascript.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-i-am-looking-for&#34;&gt;What I am looking for &lt;a href=&#34;#what-i-am-looking-for&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;easy to deploy&lt;/li&gt;&#xA;&lt;li&gt;cheap to host&lt;/li&gt;&#xA;&lt;li&gt;free to use&lt;/li&gt;&#xA;&lt;li&gt;generous free tier&lt;/li&gt;&#xA;&lt;li&gt;no chance of big bills&lt;/li&gt;&#xA;&lt;li&gt;reliable, not 9 9’s, but mostly up.&lt;/li&gt;&#xA;&lt;li&gt;allows me to run a bunch of stuff that I lightly use&lt;/li&gt;&#xA;&lt;li&gt;that buttery smooth cli that I get out of fly.io&lt;/li&gt;&#xA;&lt;li&gt;runs containers&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The last one is probably the most important. I don’t get tons of time to work&#xA;on side projects, and they are mostly ideas I just want to get out there and&#xA;play with, the idea may flop quickly, but I want that DX to be easy to go from&#xA;nothing to publically deployed.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-about-going-back-to-self-hosting&#34;&gt;What about going back to self hosting?? &lt;a href=&#34;#what-about-going-back-to-self-hosting&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have a Gateway FX6860 built in 2011, and was gifted to me around 2016. She&#xA;doesn’t have much power to her, but she does have more than free tier power. I&#xA;have 8 dedicated cpu, 16GB RAM, 500GB boot disk, and a 4TB hard disk.&lt;/p&gt;&#xA;&lt;h2 id=&#34;cloudflare-tunnels&#34;&gt;Cloudflare tunnels &lt;a href=&#34;#cloudflare-tunnels&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;/a&gt;&lt;a href=&#34;https://www.cloudflare.com/products/tunnel/&#34;&gt;&#xA;&lt;img class=&#34;glightbox&#34; alt=&#34;screenshot of https://www.cloudflare.com/products/tunnel/&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://www.cloudflare.com/products/tunnel/&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=1200&amp;amp;scaled_height=600&amp;amp;selectors=&#34; height=&#34;600&#34; width=&#34;1200&#34;/ data-glightbox=&#34;description: screenshot of https://www.cloudflare.com/products/tunnel/&#34;&gt;&#xA;&lt;/a&gt;&#xA;&lt;p&gt;Cloudflare Tunnels allow me to route traffic to my own server sitting right&#xA;next to me and have it publically accessible. They take care of ssl certs,&#xA;they support wildcard routes, and configuration is pretty easy. I can map&#xA;addresses to a port on the machine, wildcard to a reverse_proxy, and end with a 404.&lt;/p&gt;&#xA;&lt;h2 id=&#34;im-missing-that-buttery-smooth-cli&#34;&gt;I’m missing that buttery smooth cli &lt;a href=&#34;#im-missing-that-buttery-smooth-cli&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;At this point I’m hosting a few things that I use frequently, but I don’t have&#xA;that buttery smooth deploy experience that I get from fly.io. I have to log&#xA;into the machine, edit some files, and docker compose up every time I want to&#xA;deploy.&lt;/p&gt;&#xA;&lt;h2 id=&#34;i-was-certain-there-was-a-better-way&#34;&gt;I was certain there was a better way &lt;a href=&#34;#i-was-certain-there-was-a-better-way&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I knew there was something better out there that was not a complex pain in the&#xA;ass to setup. I know small companies run their own infra with a small team.&#xA;There has to be tools that don’t take an enterprise to manage.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-about-kubernetes&#34;&gt;What about kubernetes &lt;a href=&#34;#what-about-kubernetes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;a href=&#34;https://kubernetes.io/&#34;&gt;&#xA;&lt;img class=&#34;glightbox&#34; alt=&#34;screenshot of https://kubernetes.io/&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://kubernetes.io/&amp;amp;height=450&amp;amp;width=800&amp;amp;scaled_width=800&amp;amp;scaled_height=450&amp;amp;selectors=&#34; height=&#34;450&#34; width=&#34;800&#34;/ data-glightbox=&#34;description: screenshot of https://kubernetes.io/&#34;&gt;&#xA;&lt;/a&gt;&#xA;&lt;p&gt;In my search I keep seeing kubernetes as the solution, just run k8s, k3s, k0s,&#xA;minikube, or kind. But EVERYTHING I have heard about kubernetes is that its a&#xA;pain in the ass to deploy, takes a team to manage, and if you don’t have a $1M&#xA;problem to solve don’t bother cause k8s will create a $1M problem for you. For&#xA;this reason alone I turned my nose up to k8’s and nearly didn’t even give it a&#xA;chance. Everyone jokes about blogs and simple sites running on k8s, and how&#xA;rediculous that must be.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If you don’t have a $1M problem to solve don’t bother cause k8s will create a $1M problem for you.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;lets-jump-on-k3s&#34;&gt;Let’s jump on k3s &lt;a href=&#34;#lets-jump-on-k3s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;a href=&#34;https://k3s.io/&#34;&gt;&#xA;&lt;img class=&#34;glightbox&#34; alt=&#34;screenshot of https://k3s.io/&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://k3s.io/&amp;amp;height=450&amp;amp;width=800&amp;amp;scaled_width=800&amp;amp;scaled_height=450&amp;amp;selectors=&#34; height=&#34;450&#34; width=&#34;800&#34;/ data-glightbox=&#34;description: screenshot of https://k3s.io/&#34;&gt;&#xA;&lt;/a&gt;&#xA;&lt;p&gt;I’ve never ran kubernetes myself, but after seeing it so many times in my&#xA;searches for a fly.io replacement, I decided to give it a shot. I chose k3s as&#xA;it seems like a nice balance of easy to setup, maintain, and feature complete&#xA;kubernetes service.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# install and start k3s&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -sfL https://get.k3s.io &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sh -&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# check to see if your nodes are started&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo kubectl get nodes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;My main hiccup so far was the machine I am running on runs a fairly new ubuntu&#xA;install with zfs on root, and it would not start the master node. Rather than&#xA;figuring out how to make zfs play nice I just pointed k3s to a drive that is&#xA;not zfs.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# manuallly&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo k3s server -d /mnt/vault/.rancher/k3s&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# without editing systemd service&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ln -s /mnt/vault/.rancher/k3s /var/lib/rancher/k3s&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Next I needed to be able to completely manage my k3s cluster form my main machine while this one sits far away in a closet.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# from the server&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo cp /etc/rancher/k3s/k3s.yaml ~/.config/kube&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# from my local machine&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;scp falcon@falcon:~/.config/kube/k3s.yaml ~/.config/kube/falcon-k3s.yaml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo cp /etc/rancher/k3s/k3s.yaml /home/waylon/.config/kube&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chown -R waylon:waylon ~/.config/kube&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;KUBECONFIG&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;~/.config/kube/k3s.yaml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;kompose&#34;&gt;kompose &lt;a href=&#34;#kompose&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Since everything I was running prior was in docker compose, I found kompose.io&#xA;to be a fantastic tool to help me start converting my docker deployments into&#xA;kubernetes.&lt;/p&gt;&#xA;&lt;a href=&#34;https://kompose.io/&#34;&gt;&#xA;&lt;img class=&#34;glightbox&#34; alt=&#34;screenshot of https://kompose.io&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://kompose.io/&amp;amp;height=450&amp;amp;width=800&amp;amp;scaled_width=800&amp;amp;scaled_height=450&amp;amp;selectors=&#34; height=&#34;450&#34; width=&#34;800&#34;/ data-glightbox=&#34;description: screenshot of https://kompose.io&#34;&gt;&#xA;&lt;/a&gt;&#xA;&lt;h2 id=&#34;a-month-later&#34;&gt;A Month Later &lt;a href=&#34;#a-month-later&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I started this post a month ago, and I am still enjoying k3s. For clarity, I&#xA;did have a bit of k8’s experience going in, but zero experience running it by&#xA;myself. k3’s seems to have made it pretty straightforward so far. My worst&#xA;issues have been with ingress. Docker registries were a bit of a pain due to&#xA;their large blob sizes, and a service I wanted to try to &lt;a href=&#34;/self-host/&#34; class=&#34;glossary-term&#34; title=&#34;Self hosting is the act of hosting your own applications and services without using a SAS provider. This is typically done with your own hardware, but there...&#34;&gt;self host&lt;/a&gt; (sshx)&#xA;required grpc, which is not supported by cloudflare tunnels.&lt;/p&gt;&#xA;&lt;h2 id=&#34;tldr&#34;&gt;TLDR &lt;a href=&#34;#tldr&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Don’t believe everyone’s pre-conceived notions about tech you have never tried.&#xA;Most of these things come from the echo chamber that is twitter anyways.&#xA;Create your own opinions by trying new things, learning for yourself, and&#xA;forming your own opnions.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Still Loving Tailwind</title>
    <id>https://waylonwalker.com/still-loving-tailwind/</id>
    <updated>2023-11-30T11:54:52Z</updated>
    <published>2023-11-30T11:54:52Z</published>
    <link href="https://waylonwalker.com/still-loving-tailwind/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been using tailwind for a few months now and I can still say I&#39;m loving it. I&#39;ve been using it to create some rapid prototypes that may or may not ever...</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/img-c8Fom5UqPWT6IzLefZ3YKU68.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/img-c8Fom5UqPWT6IzLefZ3YKU68.png&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;I’ve been using tailwind for a few months now and I can still say I’m loving&#xA;it. I’ve been using it to create some rapid prototypes that may or may not&#xA;ever become something, a document that is likely to go to print (a resume), and some quick&#xA;dashboards.&lt;/p&gt;&#xA;&lt;h2 id=&#34;i-started-using-tailwind-a-few-month-back&#34;&gt;I started using Tailwind a few month back &lt;a href=&#34;#i-started-using-tailwind-a-few-month-back&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;A few months back in september of 2023 I made &lt;a href=&#34;https://waylonwalker.com/a-case-for-tailwindcss/&#34;&gt;a case for&#xA;tailwindcss&lt;/a&gt;. And have been&#xA;using it on quite a few projects since.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;values are well thought out&lt;/li&gt;&#xA;&lt;li&gt;it’s really easy to use&lt;/li&gt;&#xA;&lt;li&gt;classes that make sense&lt;/li&gt;&#xA;&lt;li&gt;tree shakable&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;fokaiscom&#34;&gt;fokais.com &lt;a href=&#34;#fokaiscom&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I started working on fokais.com only a few weeks ago, It’s going to be a SAS to&#xA;make blogging easier. I’ve started hosting some tools for this blog that I&#xA;really like that I think I can turn into a service. It’s been fantastic to&#xA;quickly pump out new pages with tailwind.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://fokais.com&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://shots.waylonwalker.com/shot/?url=https://fokais.com&amp;amp;height=600&amp;amp;width=1200&amp;amp;scaled_width=600&amp;amp;scaled_height=300&amp;amp;selectors=&#34; alt=&#34;screenshot of https://fokais.com&#34;/ data-glightbox=&#34;description: screenshot of https://fokais.com&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;&lt;a href=&#34;/htmx/&#34; class=&#34;glossary-term&#34; title=&#34;htmx is a frontend javascript library for creating dynamic web applications.&#34;&gt;htmx&lt;/a&gt;&#34;&gt;HTMX &lt;a href=&#34;#htmx&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;tailwind and htmx are a match made in heaven. They both really lean on&#xA;Location of Behavior over Separation of concerns. They do really well at&#xA;making small components that you can throw on and endpoint and stack into any&#xA;page. With tailwind I just configure it to look at all my templates, and I can&#xA;guarantee that the styles will be in app.css, and all I need to do is add&#xA;classes to my component.&lt;/p&gt;&#xA;&lt;p&gt;Heres a sample component for a user widget that will go on every page. It has&#xA;everything it needs right in the template.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;na&#34;&gt;hx-swap-oob&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;outerHTML&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;user-header&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;absolute top-0 right-0 mt-8 mr-4&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  {% if current_user %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;details&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;user-header-details&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;open&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;group list-none px-4 py-2 self-center justify-self-center bg-neutral-600/10 shadow-lg shadow-zinc-950/20 ring-2 ring-zinc-950/5 rounded-xl flex justify-center align-center flex-col&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;summary&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;list-style-type: none&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;{{ current_user.username }}&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;summary&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;hidden group-hover:block my-4&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;mt-6 px-4 py-2 rounded bg-purple-950/5 ring-2 ring-cyan-500/30 text-cyan-500 font-bold&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;{{ url_for(&amp;#39;get_logout&amp;#39;) }}&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        Logout&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;details&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  {% else %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;{{ url_for(&amp;#39;post_login&amp;#39;) }}&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;mt-5 text-xl text-white font-bold text-shadow-xl text-shadow-zinc-950&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    login&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  {% endif %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;internal-apps&#34;&gt;internal apps &lt;a href=&#34;#internal-apps&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’ve built several interal apps, and tailwind has been really great for this.&#xA;Its super quick to pop classes on components and get things to look decent&#xA;quickly, or put some real polish into making them look nice.&lt;/p&gt;&#xA;&lt;h2 id=&#34;my-website-waylonwalkercom&#34;&gt;My Website waylonwalker.com &lt;a href=&#34;#my-website-waylonwalkercom&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’ve dropped my old decrepid css for some tailwind on my main site. My css was&#xA;much smaller, but did not work quite as well on all devices, and most&#xA;importantly was becoming a house of cards. Every time I fixed one thing several&#xA;other things would fail. Colors were a bit muddy, and not as nicely configured&#xA;as tailwind.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Most importantly was becoming a house of cards. Every time I fixed one thing&#xA;several other things would fail.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;One rough side of styling a blog in tailwind is that you don’t necessarily have&#xA;control over granular details of how your pages get rendered without getting&#xA;really deep into the markdown renderer, or writing your posts in &lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;html&lt;/a&gt;. It ends&#xA;up looking a bit ugly, and is against the tailwind best practices, but it seems&#xA;like the best way for a site like this.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;tailwind&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;base&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;tailwind&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;components&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;tailwind&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;utilities&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;./highlight.css&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;social&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;err&#34;&gt;@apply&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;font-bold&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;err&#34;&gt;@apply&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;flex&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;flex-row&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;err&#34;&gt;@apply&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;gap-4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;err&#34;&gt;@apply&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;justify-center&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;err&#34;&gt;@apply&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;py-8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;posts&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;ul&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;ul&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;err&#34;&gt;@apply&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;backdrop-blur-sm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;err&#34;&gt;@apply&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;flex&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;flex-col&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;grid&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;grid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;flow&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;row&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dense&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;err&#34;&gt;@apply&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;gap-4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;grid-template-columns&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;repeat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;auto&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;minmax&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;300&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;err&#34;&gt;@apply&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;p-4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;grid&#34;&gt;grid &lt;a href=&#34;#grid&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’ve struggled to use grid on my projects, and I’ve tried a few different times&#xA;with no real success or adoption, but started using it on my resume, to have a&#xA;main middle column, with two outer full bleed columns where I can make some&#xA;elements full bleed to the edge. tailwind made this easy, once done, I had an&#xA;admonition that was beautiful full bleed with a touch of color.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ fastapi sqlmodel</title>
    <id>https://waylonwalker.com/fastapi-sqlmodel/</id>
    <updated>2023-11-18T15:42:30Z</updated>
    <published>2023-11-18T15:42:30Z</published>
    <link href="https://waylonwalker.com/fastapi-sqlmodel/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about sqlmodel, an amazing project by fastapi. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/fastapi/sqlmodel&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sqlmodel&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/fastapi&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fastapi&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;SQL databases in Python, designed for simplicity, compatibility, and robustness.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ SawyerHood draw-a-ui</title>
    <id>https://waylonwalker.com/sawyerhood-draw-a-ui/</id>
    <updated>2023-11-14T19:02:43Z</updated>
    <published>2023-11-14T19:02:43Z</published>
    <link href="https://waylonwalker.com/sawyerhood-draw-a-ui/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on draw-a-ui, created by SawyerHood.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/SawyerHood/draw-a-ui&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;draw-a-ui&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/SawyerHood&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;SawyerHood&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Draw a mockup and generate &lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;html&lt;/a&gt; for it&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ louislam uptime-kuma</title>
    <id>https://waylonwalker.com/louislam-uptime-kuma/</id>
    <updated>2023-11-11T01:21:48Z</updated>
    <published>2023-11-11T01:21:48Z</published>
    <link href="https://waylonwalker.com/louislam-uptime-kuma/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across uptime-kuma from louislam, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/louislam/uptime-kuma&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;uptime-kuma&lt;/a&gt; from &lt;a href=&#34;https://github.com/louislam&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;louislam&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;A fancy &lt;a href=&#34;/self-host/&#34; class=&#34;glossary-term&#34; title=&#34;Self hosting is the act of hosting your own applications and services without using a SAS provider. This is typically done with your own hardware, but there...&#34;&gt;self-hosted&lt;/a&gt; monitoring tool&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ cloudflare cloudflared</title>
    <id>https://waylonwalker.com/cloudflare-cloudflared/</id>
    <updated>2023-11-04T00:23:59Z</updated>
    <published>2023-11-04T00:23:59Z</published>
    <link href="https://waylonwalker.com/cloudflare-cloudflared/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? cloudflared by cloudflare.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/cloudflare/cloudflared&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cloudflared&lt;/a&gt; by &lt;a href=&#34;https://github.com/cloudflare&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cloudflare&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Cloudflare Tunnel client (formerly Argo Tunnel)&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ charmbracelet vhs</title>
    <id>https://waylonwalker.com/charmbracelet-vhs/</id>
    <updated>2023-11-03T11:45:12Z</updated>
    <published>2023-11-03T11:45:12Z</published>
    <link href="https://waylonwalker.com/charmbracelet-vhs/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on vhs by charmbracelet.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/charmbracelet/vhs&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vhs&lt;/a&gt; by &lt;a href=&#34;https://github.com/charmbracelet&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;charmbracelet&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Your CLI home video recorder 📼&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Kanaries Rath</title>
    <id>https://waylonwalker.com/kanaries-rath/</id>
    <updated>2023-11-01T15:31:43Z</updated>
    <published>2023-11-01T15:31:43Z</published>
    <link href="https://waylonwalker.com/kanaries-rath/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out Kanaries and their project Rath.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/Kanaries&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Kanaries&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/Kanaries/Rath&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Rath&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Next generation of automated data exploratory analysis and visualization platform.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ykhli local-ai-stack</title>
    <id>https://waylonwalker.com/ykhli-local-ai-stack/</id>
    <updated>2023-11-01T11:40:40Z</updated>
    <published>2023-11-01T11:40:40Z</published>
    <link href="https://waylonwalker.com/ykhli-local-ai-stack/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on local-ai-stack by ykhli.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/ykhli/local-ai-stack&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;local-ai-stack&lt;/a&gt; by &lt;a href=&#34;https://github.com/ykhli&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ykhli&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A starter kit to build &lt;em&gt;local-only&lt;/em&gt; AI apps that cost $0 to run – starting with document Q&amp;amp;A. Written in Javascript&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ rajatomar788 pywebcopy</title>
    <id>https://waylonwalker.com/rajatomar788-pywebcopy/</id>
    <updated>2023-11-01T02:35:26Z</updated>
    <published>2023-11-01T02:35:26Z</published>
    <link href="https://waylonwalker.com/rajatomar788-pywebcopy/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by pywebcopy from rajatomar788.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/rajatomar788/pywebcopy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pywebcopy&lt;/a&gt; from &lt;a href=&#34;https://github.com/rajatomar788&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rajatomar788&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Locally saves webpages to your hard disk with images, css, js &amp;amp; links as is.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ThePrimeagen fem-htmx</title>
    <id>https://waylonwalker.com/theprimeagen-fem-htmx/</id>
    <updated>2023-10-31T16:43:42Z</updated>
    <published>2023-10-31T16:43:42Z</published>
    <link href="https://waylonwalker.com/theprimeagen-fem-htmx/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by fem-htmx from ThePrimeagen.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/ThePrimeagen/fem-htmx&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fem-htmx&lt;/a&gt; from &lt;a href=&#34;https://github.com/ThePrimeagen&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ThePrimeagen&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ThePrimeagen fem-htmx-proj</title>
    <id>https://waylonwalker.com/theprimeagen-fem-htmx-proj/</id>
    <updated>2023-10-31T16:43:29Z</updated>
    <published>2023-10-31T16:43:29Z</published>
    <link href="https://waylonwalker.com/theprimeagen-fem-htmx-proj/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred fem-htmx-proj by ThePrimeagen. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/ThePrimeagen/fem-htmx-proj&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fem-htmx-proj&lt;/a&gt; by &lt;a href=&#34;https://github.com/ThePrimeagen&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ThePrimeagen&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ hynek stamina</title>
    <id>https://waylonwalker.com/hynek-stamina/</id>
    <updated>2023-10-31T16:43:09Z</updated>
    <published>2023-10-31T16:43:09Z</published>
    <link href="https://waylonwalker.com/hynek-stamina/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by stamina from hynek.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/hynek/stamina&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;stamina&lt;/a&gt; from &lt;a href=&#34;https://github.com/hynek&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;hynek&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Production-grade retries for Python&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ johanhaleby kubetail</title>
    <id>https://waylonwalker.com/johanhaleby-kubetail/</id>
    <updated>2023-10-31T00:49:57Z</updated>
    <published>2023-10-31T00:49:57Z</published>
    <link href="https://waylonwalker.com/johanhaleby-kubetail/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by kubetail from johanhaleby.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/johanhaleby/kubetail&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kubetail&lt;/a&gt; from &lt;a href=&#34;https://github.com/johanhaleby&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;johanhaleby&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Bash script to tail Kubernetes logs from multiple pods at the same time&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ecthelionvi NeoComposer.nvim</title>
    <id>https://waylonwalker.com/ecthelionvi-neocomposer-nvim/</id>
    <updated>2023-10-28T04:41:41Z</updated>
    <published>2023-10-28T04:41:41Z</published>
    <link href="https://waylonwalker.com/ecthelionvi-neocomposer-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? NeoComposer.nvim by ecthelionvi.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/ecthelionvi/NeoComposer.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;NeoComposer.nvim&lt;/a&gt; by &lt;a href=&#34;https://github.com/ecthelionvi&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ecthelionvi&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Neovim plugin that simplifies macros, enhancing productivity with harmony.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ kevinhwang91 nvim-ufo</title>
    <id>https://waylonwalker.com/kevinhwang91-nvim-ufo/</id>
    <updated>2023-10-25T21:24:01Z</updated>
    <published>2023-10-25T21:24:01Z</published>
    <link href="https://waylonwalker.com/kevinhwang91-nvim-ufo/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out kevinhwang91 and their project nvim-ufo.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/kevinhwang91&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kevinhwang91&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/kevinhwang91/nvim-ufo&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-ufo&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Not UFO in the sky, but an ultra fold in Neovim.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ casey just</title>
    <id>https://waylonwalker.com/casey-just/</id>
    <updated>2023-10-22T16:07:03Z</updated>
    <published>2023-10-22T16:07:03Z</published>
    <link href="https://waylonwalker.com/casey-just/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred just by casey. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/casey/just&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;just&lt;/a&gt; by &lt;a href=&#34;https://github.com/casey&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;casey&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;🤖 Just a command runner&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ djmaze docker-caching-proxy</title>
    <id>https://waylonwalker.com/djmaze-docker-caching-proxy/</id>
    <updated>2023-10-20T03:47:56Z</updated>
    <published>2023-10-20T03:47:56Z</published>
    <link href="https://waylonwalker.com/djmaze-docker-caching-proxy/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out djmaze and their project docker-caching-proxy.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/djmaze&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;djmaze&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/djmaze/docker-caching-proxy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;docker-caching-proxy&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Caching proxy docker image&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ggozad oterm</title>
    <id>https://waylonwalker.com/ggozad-oterm/</id>
    <updated>2023-10-18T15:31:57Z</updated>
    <published>2023-10-18T15:31:57Z</published>
    <link href="https://waylonwalker.com/ggozad-oterm/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? oterm by ggozad.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/ggozad/oterm&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;oterm&lt;/a&gt; by &lt;a href=&#34;https://github.com/ggozad&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ggozad&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;a text-based terminal client for Ollama&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ David-Kunz gen.nvim</title>
    <id>https://waylonwalker.com/david-kunz-gen-nvim/</id>
    <updated>2023-10-14T02:31:34Z</updated>
    <published>2023-10-14T02:31:34Z</published>
    <link href="https://waylonwalker.com/david-kunz-gen-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">gen.nvim by David-Kunz is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/David-Kunz/gen.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gen.nvim&lt;/a&gt; by &lt;a href=&#34;https://github.com/David-Kunz&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;David-Kunz&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;Neovim plugin to generate text using LLMs with customizable prompts&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Boeing config-file-validator</title>
    <id>https://waylonwalker.com/boeing-config-file-validator/</id>
    <updated>2023-10-13T23:41:40Z</updated>
    <published>2023-10-13T23:41:40Z</published>
    <link href="https://waylonwalker.com/boeing-config-file-validator/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out Boeing and their project config-file-validator.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/Boeing&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Boeing&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/Boeing/config-file-validator&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;config-file-validator&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Cross Platform tool to validate configuration files&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ChristianChiarulli NeoTweet</title>
    <id>https://waylonwalker.com/christianchiarulli-neotweet/</id>
    <updated>2023-10-13T23:41:24Z</updated>
    <published>2023-10-13T23:41:24Z</published>
    <link href="https://waylonwalker.com/christianchiarulli-neotweet/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on NeoTweet, created by ChristianChiarulli.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/ChristianChiarulli/NeoTweet&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;NeoTweet&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/ChristianChiarulli&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ChristianChiarulli&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>jpillora-installer</title>
    <id>https://waylonwalker.com/jpillora-installer-til/</id>
    <updated>2023-10-04T19:28:33Z</updated>
    <published>2023-10-04T19:28:33Z</published>
    <link href="https://waylonwalker.com/jpillora-installer-til/" rel="alternate" type="text/html"></link>
    <summary type="text">jpillora/installer is the install script generator I have been looking for. It downloads binaries for your machine from GitHub releases and unzips them for...</summary>
    <content type="html">&lt;p&gt;jpillora/installer is the install script generator I have been looking for. It&#xA;downloads binaries for your machine from GitHub releases and unzips them for&#xA;you. It grabs the latest release, so you can easily update them. I have&#xA;tried scripting these installs in the past and struggled to consistently get&#xA;the latest version for every package and unpack it correctly.&lt;/p&gt;&#xA;&lt;p&gt;Also these pre-compiled binaries install rediculously fast compared to building&#xA;them from source.&lt;/p&gt;&#xA;&lt;p&gt;Check out some example links.&lt;/p&gt;&#xA;&lt;p&gt;opening in a browser will show metadata&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://i.jpillora.com/serve&#34; class=&#34;hoverlink  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/i.jpillora.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/i.jpillora.com.ico&#34;&gt;https://i.jpillora.com/serve&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you pass in script=true it will instead return the install script as it&#xA;would by default through curl.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://i.jpillora.com/serve?script=true&#34; class=&#34;hoverlink  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/i.jpillora.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/i.jpillora.com.ico&#34;&gt;https://i.jpillora.com/serve?script=true&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;use-it-to-install-neovim&#34;&gt;Use it to install neovim &lt;a href=&#34;#use-it-to-install-neovim&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;All you need to do to generate an install script is to pass in the GitHub repo&#xA;slug with the org.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl https://i.jpillora.com/neovim/neovim &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The shell script that it generates for neovim looks like this.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$DEBUG&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -x&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;TMP_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;mktemp -d -t jpillora-installer-XXXXXXXXXX&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; cleanup &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    rm -rf &lt;span class=&#34;nv&#34;&gt;$TMP_DIR&lt;/span&gt; &amp;gt; /dev/null&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; fail &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    cleanup&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;msg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;============&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Error: &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$msg&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; 1&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; install &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#settings&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;USER&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;neovim&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;PROG&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;neovim&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;ASPROG&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;MOVE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;false&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;RELEASE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;stable&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;INSECURE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;false&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;OUT_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;pwd&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;GH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://github.com&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#bash check&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; ! &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$BASH_VERSION&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;Please use bash instead&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; ! -d &lt;span class=&#34;nv&#34;&gt;$OUT_DIR&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;output directory missing: &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$OUT_DIR&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#dependency check, assume we are a standard POISX machine&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    which find &amp;gt; /dev/null &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;find not installed&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    which xargs &amp;gt; /dev/null &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;xargs not installed&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    which sort &amp;gt; /dev/null &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;sort not installed&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    which tail &amp;gt; /dev/null &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;tail not installed&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    which cut &amp;gt; /dev/null &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;cut not installed&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    which du &amp;gt; /dev/null &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;du not installed&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#choose an HTTP client&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;GET&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; which curl &amp;gt; /dev/null&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;GET&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;curl&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$INSECURE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;GET&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$GET&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; --insecure&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;GET&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$GET&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; --fail -# -L&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt; which wget &amp;gt; /dev/null&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;GET&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;wget&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$INSECURE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;GET&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$GET&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; --no-check-certificate&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;GET&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$GET&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; -qO-&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;neither wget/curl are installed&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#debug HTTP&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$DEBUG&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;GET&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$GET&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; -v&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#optional auth to install from private repos&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#NOTE: this also needs to be set on your instance of installer&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;AUTH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;GITHUB_TOKEN&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; ! -z &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$AUTH&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;GET&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$GET&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; -H &amp;#39;Authorization: &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$AUTH&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#39;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#find OS #TODO BSDs and other posixs&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;uname -s&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt; in&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Darwin&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;OS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;darwin&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Linux&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;OS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;linux&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    *&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;unknown os: &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;uname -s&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;esac&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#find ARCH&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; uname -m &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -E &lt;span class=&#34;s1&#34;&gt;&amp;#39;(arm|arch)64&amp;#39;&lt;/span&gt; &amp;gt; /dev/null&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;ARCH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;arm64&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# no m1 assets. if on mac arm64, rosetta allows fallback to amd64&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$OS&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;darwin&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;ARCH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;amd64&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt; uname -m &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;m&#34;&gt;64&lt;/span&gt; &amp;gt; /dev/null&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;ARCH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;amd64&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt; uname -m &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep arm &amp;gt; /dev/null&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;ARCH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;arm&amp;#34;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#TODO armv6/v7&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt; uname -m &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;m&#34;&gt;386&lt;/span&gt; &amp;gt; /dev/null&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;ARCH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;386&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;unknown arch: &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;uname -m&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#choose from asset list&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;URL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;FTYPE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;OS&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;_&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ARCH&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; in&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;linux_amd64&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;URL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://github.com/neovim/neovim/releases/download/stable/nvim-linux64.tar.gz&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;FTYPE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;.tar.gz&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;darwin_amd64&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;URL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://github.com/neovim/neovim/releases/download/stable/nvim-macos.tar.gz&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;FTYPE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;.tar.gz&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    *&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;No asset for platform &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;OS&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ARCH&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;esac&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#got URL! download it...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;Downloading&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$USER&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PROG&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; ! -z &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$RELEASE&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$RELEASE&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; ! -z &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$ASPROG&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34; as &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$ASPROG&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34; (&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;OS&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ARCH&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;)&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.....&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#enter tempdir&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    mkdir -p &lt;span class=&#34;nv&#34;&gt;$TMP_DIR&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$TMP_DIR&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$FTYPE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.gz&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        which gzip &amp;gt; /dev/null &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;gzip is not installed&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        bash -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$GET&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$URL&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; gzip -d - &amp;gt; &lt;span class=&#34;nv&#34;&gt;$PROG&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;download failed&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$FTYPE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.tar.bz&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$FTYPE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.tar.bz2&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        which tar &amp;gt; /dev/null &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;tar is not installed&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        which bzip2 &amp;gt; /dev/null &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;bzip2 is not installed&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        bash -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$GET&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$URL&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tar jxf - &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;download failed&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$FTYPE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.tar.gz&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$FTYPE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.tgz&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        which tar &amp;gt; /dev/null &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;tar is not installed&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        which gzip &amp;gt; /dev/null &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;gzip is not installed&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        bash -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$GET&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$URL&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tar zxf - &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;download failed&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$FTYPE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.zip&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        which unzip &amp;gt; /dev/null &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;unzip is not installed&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        bash -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$GET&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$URL&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt; tmp.zip &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;download failed&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        unzip -o -qq tmp.zip &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;unzip failed&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        rm tmp.zip &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;cleanup failed&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$FTYPE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.bin&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        bash -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$GET&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$URL&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;neovim_&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;OS&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;_&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ARCH&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;download failed&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;unknown file type: &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$FTYPE&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#search subtree largest file (bin)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;TMP_BIN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;find . -type f &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs du &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sort -n &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tail -n &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; cut -f 2&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; ! -f &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$TMP_BIN&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;could not find find binary (largest file)&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#ensure its larger than 1MB&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#TODO linux=elf/darwin=macho file detection?&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;du -m &lt;span class=&#34;nv&#34;&gt;$TMP_BIN&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; cut -f1&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt; -lt &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;no binary found (&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$TMP_BIN&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; is not larger than 1MB)&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#move into PATH or cwd&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    chmod +x &lt;span class=&#34;nv&#34;&gt;$TMP_BIN&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;chmod +x failed&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;DEST&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$OUT_DIR&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PROG&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; ! -z &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$ASPROG&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;DEST&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$OUT_DIR&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$ASPROG&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#move without sudo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;OUT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;mv &lt;span class=&#34;nv&#34;&gt;$TMP_BIN&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$DEST&lt;/span&gt; 2&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;1&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;STATUS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$?&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# failed and string contains &amp;#34;Permission denied&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$STATUS&lt;/span&gt; -ne &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$OUT&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;~ &lt;span class=&#34;s2&#34;&gt;&amp;#34;Permission denied&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;mv with sudo...&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            sudo mv &lt;span class=&#34;nv&#34;&gt;$TMP_BIN&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$DEST&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;sudo mv failed&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;mv failed (&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$OUT&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;)&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Downloaded to &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$DEST&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#done&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    cleanup&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;&lt;a href=&#34;/self-host/&#34; class=&#34;glossary-term&#34; title=&#34;Self hosting is the act of hosting your own applications and services without using a SAS provider. This is typically done with your own hardware, but there...&#34;&gt;self-host&lt;/a&gt;-your-own&#34;&gt;Self Host Your Own &lt;a href=&#34;#self-host-your-own&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’d reccomend self hosting your own. This way you know that it’s consistent&#xA;and unlikely to change in a way that breaks your use.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;curl -s https://i.jpillora.com/installer | bash&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;repos-i-am-using-installer-for&#34;&gt;Repos I am using installer for &lt;a href=&#34;#repos-i-am-using-installer-for&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here are the repos I am using installer for.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;atuinsh/atuin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;benbjohnson/litestream&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bootandy/dust&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;BurntSushi/ripgrep&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmln/sd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cjbassi/ytop&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dalance/procs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dbrgn/tealdeer&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ducaale/xh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;go-task/task&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;imsnif/bandwhich&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;imsnif/diskonaut&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kovidgoyal/kitty&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mgdm/htmlq&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;neovim/neovim&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ogham/dog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ogham/exa&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pemistahl/grex&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sharkdp/bat&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sharkdp/fd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sharkdp/pastel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sirwart/ripsecrets&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;starship/starship&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;topgrade-rs/topgrade&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;zellij-org/zellij&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>how to host static content with fastapi</title>
    <id>https://waylonwalker.com/fastapi-static-content/</id>
    <updated>2023-10-04T08:32:58Z</updated>
    <published>2023-10-04T08:32:58Z</published>
    <link href="https://waylonwalker.com/fastapi-static-content/" rel="alternate" type="text/html"></link>
    <summary type="text">I wanted to host some static files through fastapi. Typical use cases for this might be some static web content like html/css/js. It could also be images or...</summary>
    <content type="html">&lt;p&gt;I wanted to host some static files through &lt;a href=&#34;/fastapi/&#34; class=&#34;glossary-term&#34; title=&#34;FastAPI is a modern and efficient web framework for Python, built on top of the Starlette web framework, and pydantic for data validation and serialization.&#34;&gt;fastapi&lt;/a&gt;. Typical use cases for this&#xA;might be some static web content like &lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;html&lt;/a&gt;/css/js. It could also be images or&#xA;some data that doesn’t need dynamically rendered.&lt;/p&gt;&#xA;&lt;h2 id=&#34;from-the-docs&#34;&gt;From the Docs &lt;a href=&#34;#from-the-docs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The docs cover how to host static files, and give this solution that is built&#xA;into fastapi.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://fastapi.tiangolo.com/tutorial/static-files/&#34; class=&#34;hoverlink  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/fastapi.tiangolo.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/fastapi.tiangolo.com.png&#34;&gt;https://fastapi.tiangolo.com/tutorial/static-files/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;fastapi&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;FastAPI&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;fastapi.staticfiles&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;StaticFiles&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;app&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;FastAPI&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mount&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/static&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;StaticFiles&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;static&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;static&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;authenticated-static-files&#34;&gt;Authenticated Static Files &lt;a href=&#34;#authenticated-static-files&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thanks to &lt;a href=&#34;https://github.com/tiangolo/fastapi/issues/858&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;#858&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/OscartGiles&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;OscartGiles&lt;/a&gt; posted this solution to add&#xA;authentication to static files. I tried this out on my&#xA;&lt;a href=&#34;https://thoughts.waylonwalker.com&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/thoughts.waylonwalker.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/thoughts.waylonwalker.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;thoughts&lt;/a&gt; and it worked flawlessly.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;typing&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pathlib&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;secrets&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;fastapi&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;FastAPI&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HTTPException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;status&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;fastapi.staticfiles&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;StaticFiles&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;fastapi.security&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HTTPBasic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HTTPBasicCredentials&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;PathLike&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;typing&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Union&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;os.PathLike[str]&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;app&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;FastAPI&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;security&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HTTPBasic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;verify_username&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HTTPBasicCredentials&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;credentials&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;correct_username&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;secrets&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;compare_digest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;credentials&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;username&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;user&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;correct_password&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;secrets&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;compare_digest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;credentials&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;password&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;correct_username&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;correct_password&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;raise&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HTTPException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;status_code&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;HTTP_401_UNAUTHORIZED&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;detail&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Incorrect email or password&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;WWW-Authenticate&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Basic&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;credentials&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;username&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;AuthStaticFiles&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;StaticFiles&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__init__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kwargs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;super&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;__init__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kwargs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__call__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;scope&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;receive&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;send&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;assert&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;scope&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;http&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;request&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;scope&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;receive&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;verify_username&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;super&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;__call__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;scope&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;receive&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;send&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mount&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;/static&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;AuthStaticFiles&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;vm&#34;&gt;__file__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parent&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;static&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;static&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you want both then, all you have to do is mount &lt;code&gt;AuthStaticFiles&lt;/code&gt; to a&#xA;different route. Now you can have private, or paid content behind&#xA;&lt;code&gt;/restricted&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mount&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/static&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;StaticFiles&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;static&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;static&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mount&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;/restricted&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;AuthStaticFiles&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;vm&#34;&gt;__file__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parent&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;restricted&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;restricted&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Set up minio bucket entrypoint</title>
    <id>https://waylonwalker.com/set-up-minio-bucket-entrypoint/</id>
    <updated>2023-10-01T20:11:51Z</updated>
    <published>2023-10-01T20:11:51Z</published>
    <link href="https://waylonwalker.com/set-up-minio-bucket-entrypoint/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently se tup minio object storage in my homelab for litestream sqlite backups. The litestream quickstart made it easy to get everything up and running...</summary>
    <content type="html">&lt;p&gt;I recently se tup minio object storage in my &lt;a href=&#34;/homelab/&#34; class=&#34;glossary-term&#34; title=&#34;A place to self host applications. For me this is primarily self built web applications, and applications for sharing files with my family. Techno Tim has a...&#34;&gt;homelab&lt;/a&gt; for litestream sqlite&#xA;backups. The litestream quickstart made it easy to get everything up and&#xA;running on localhost, but I hit a wall when dns was involved to pull it from a&#xA;different machine.&lt;/p&gt;&#xA;&lt;h2 id=&#34;here-is-what-i-got-to-work&#34;&gt;Here is what I got to work &lt;a href=&#34;#here-is-what-i-got-to-work&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;First I had to configure the Key ID and Secret Access Key generated in the&#xA;minio ui.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ aws configure&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AWS Access Key ID &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;****************VZnD&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AWS Secret Access Key &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;****************xAm8&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Default region name &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;us-east-1&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Default output format &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;None&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then set the the s3 signature_version to s3v4.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aws configure &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; default.s3.signature_version s3v4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now when I have minio running on &lt;a href=&#34;https://my-minio-endpoint.com&#34;&gt;https://my-minio-endpoint.com&lt;/a&gt; I can use the&#xA;aws cli to access the bucket.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Note that &lt;code&gt;https://my-minio-endpoint.com&lt;/code&gt; resolves to the bucket endpoint&#xA;(default 9000) not the ui (default 9001).&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aws --endpoint-url https://my-minio-endpoint.com s3 ls my_bucket&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;now-configuring-litestream&#34;&gt;Now Configuring Litestream &lt;a href=&#34;#now-configuring-litestream&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Litestream also accepts the &lt;code&gt;endpoint&lt;/code&gt; argument via config. I could not get it&#xA;to work just with the ui.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Note the &lt;code&gt;aws configure&lt;/code&gt; step above is not required for litestream, only the&#xA;aws cli.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;dbs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;/path/to/database.db&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;replicas&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;s3://my_bucket/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;endpoint&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://my-minio-endpoint.com&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;region&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;us-east-1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;access-key-id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;****************VZnD&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;secret-access-key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;************************************xAm8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now run a litestream replication.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;litestream replicate -config litestream.yml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# or put the config in /etc/litestream.yml and just run replicate&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;litestream replicate&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>why-is-postgres-default</title>
    <id>https://waylonwalker.com/why-is-postgres-default/</id>
    <updated>2023-09-30T21:26:36Z</updated>
    <published>2023-09-30T21:26:36Z</published>
    <link href="https://waylonwalker.com/why-is-postgres-default/" rel="alternate" type="text/html"></link>
    <summary type="text">Serious question.</summary>
    <content type="html">&lt;p&gt;Serious question.&lt;/p&gt;&#xA;&lt;h2 id=&#34;no-one-ever-got-fired-for-choosing-postgresql&#34;&gt;No one ever got fired for choosing PostgreSQL &lt;a href=&#34;#no-one-ever-got-fired-for-choosing-postgresql&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;But, why. It’s the most loved db, right? Right? Maybe it’s time to rethink&#xA;it.&lt;/p&gt;&#xA;&lt;p&gt;Don’t get me wrong, if I need a relational db as a service, PostgreSQL is going&#xA;to be my first choice, but why do I need to run a separate application for it?&lt;/p&gt;&#xA;&lt;h2 id=&#34;tutorials-use-sqlite&#34;&gt;Tutorials use sqlite &lt;a href=&#34;#tutorials-use-sqlite&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Why is that? Because there is nothing else to stand up. Nothing else to&#xA;maintain. And you probably already have it installed on just about anything&#xA;that has a battery.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sqlite-runs-in-memory&#34;&gt;SQLite runs in memory &lt;a href=&#34;#sqlite-runs-in-memory&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Don’t need, or maybe don’t want to persist state. Run it in memory. This is a&#xA;nice feature for running tests.&lt;/p&gt;&#xA;&lt;h2 id=&#34;less-exposure&#34;&gt;Less exposure &lt;a href=&#34;#less-exposure&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;SQLite is a file on your filesystem. It’s not a web service. It’s not a cloud&#xA;service. Not that postgres is insecure, but it is one more endpoint that you&#xA;have to think about securing.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;this means that is probably also cheaper 🤑&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;sqlite-is-easy-to-replicate&#34;&gt;SQLite is easy to replicate &lt;a href=&#34;#sqlite-is-easy-to-replicate&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Want to run your new feature with prod data? Pull a replica or backup. It’s a&#xA;file, you can cp, scp, rsync it whatever you have available.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sqlite-does-everything-of-what-i-need-in-an-application-db&#34;&gt;SQLite Does everything of what I need in an application db &lt;a href=&#34;#sqlite-does-everything-of-what-i-need-in-an-application-db&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;SQLite has a rock solid set of features that covers everything that I need, and&#xA;when it’s not I am probably thinking about pulling data into my application code&#xA;and running something custom anyways.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sqlite-runs-on-the-edge&#34;&gt;SQLite runs on the edge &lt;a href=&#34;#sqlite-runs-on-the-edge&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Most applications are read heavy and light on writes. Services like turso have&#xA;recognized this and built a business around it. They give you a master db that&#xA;all writes go to, and read replicas that can run on the edge with your&#xA;application code. You have a lot of users in different regions you can run&#xA;your application close to them without suffering from query latency or&#xA;replication complexity.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sqlite-probably-does-what-you-need-it-to&#34;&gt;SQLite probably does what you need it to &lt;a href=&#34;#sqlite-probably-does-what-you-need-it-to&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;For a large number of use cases SQLite is probably the best thing to get you&#xA;off the ground quick, and likely all that you will need. Consider using it&#xA;before defaulting to postgres.&lt;/p&gt;&#xA;&lt;h2 id=&#34;you-probably-already-know-how-to-maintain-it&#34;&gt;You probably already know how to maintain it &lt;a href=&#34;#you-probably-already-know-how-to-maintain-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you know a bit of cli commands and remember that your database is just a&#xA;file, this will feel very intuitive. If not you can probably poke around a&#xA;file system gui and still make most of it work.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;## create a database&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;touch database.db&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;## back it up&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp database.db database.db.bak&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;## drop the database&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm database.db&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;## restore the backup&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp database.db.bak database.db&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;## drop the backup&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm database.db.bak&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;## create an offsite backup&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aws s3 cp database.db s3://my-backup-bucket/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;scp database.db username@to_host:/remote/directory/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rsync -a database.db username@to_host:/remote/directory/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;need-high-concurrent-writes&#34;&gt;Need High Concurrent writes &lt;a href=&#34;#need-high-concurrent-writes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You might consider postgres.&lt;/p&gt;&#xA;&lt;h2 id=&#34;need-remote-connection-string&#34;&gt;Need Remote connection string &lt;a href=&#34;#need-remote-connection-string&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You might consider postgres.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ benbjohnson litestream</title>
    <id>https://waylonwalker.com/benbjohnson-litestream/</id>
    <updated>2023-09-29T02:48:37Z</updated>
    <published>2023-09-29T02:48:37Z</published>
    <link href="https://waylonwalker.com/benbjohnson-litestream/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on litestream, created by benbjohnson.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/benbjohnson/litestream&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;litestream&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/benbjohnson&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;benbjohnson&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Streaming replication for SQLite.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ laixintao flameshow</title>
    <id>https://waylonwalker.com/laixintao-flameshow/</id>
    <updated>2023-09-25T17:49:49Z</updated>
    <published>2023-09-25T17:49:49Z</published>
    <link href="https://waylonwalker.com/laixintao-flameshow/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by flameshow from laixintao.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/laixintao/flameshow&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;flameshow&lt;/a&gt; from &lt;a href=&#34;https://github.com/laixintao&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;laixintao&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A terminal Flamegraph viewer.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ jpillora installer</title>
    <id>https://waylonwalker.com/jpillora-installer/</id>
    <updated>2023-09-23T15:30:56Z</updated>
    <published>2023-09-23T15:30:56Z</published>
    <link href="https://waylonwalker.com/jpillora-installer/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? installer by jpillora.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/jpillora/installer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;installer&lt;/a&gt; by &lt;a href=&#34;https://github.com/jpillora&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jpillora&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;One-liner for installing binaries from Github releases&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ MordechaiHadad bob</title>
    <id>https://waylonwalker.com/mordechaihadad-bob/</id>
    <updated>2023-09-20T17:41:09Z</updated>
    <published>2023-09-20T17:41:09Z</published>
    <link href="https://waylonwalker.com/mordechaihadad-bob/" rel="alternate" type="text/html"></link>
    <summary type="text">I like MordechaiHadad&#39;s project bob.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/MordechaiHadad&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;MordechaiHadad’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/MordechaiHadad/bob&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;bob&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A version manager for neovim&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ makeplane plane</title>
    <id>https://waylonwalker.com/makeplane-plane/</id>
    <updated>2023-09-20T01:32:34Z</updated>
    <published>2023-09-20T01:32:34Z</published>
    <link href="https://waylonwalker.com/makeplane-plane/" rel="alternate" type="text/html"></link>
    <summary type="text">makeplane has done a fantastic job with plane. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/makeplane&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;makeplane&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/makeplane/plane&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;plane&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;🔥 🔥 🔥 Open Source JIRA, Linear, Monday, and Asana Alternative. Plane helps you track your issues, epics, and product roadmaps in the simplest way possible.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ahmedkhalf project.nvim</title>
    <id>https://waylonwalker.com/ahmedkhalf-project-nvim/</id>
    <updated>2023-09-19T11:46:17Z</updated>
    <published>2023-09-19T11:46:17Z</published>
    <link href="https://waylonwalker.com/ahmedkhalf-project-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on project.nvim, created by ahmedkhalf.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/ahmedkhalf/project.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;project.nvim&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/ahmedkhalf&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ahmedkhalf&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The superior project management solution for neovim.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Setup Tailwind for Jinja</title>
    <id>https://waylonwalker.com/tailwind-and-jinja/</id>
    <updated>2023-09-17T17:10:32Z</updated>
    <published>2023-09-17T17:10:32Z</published>
    <link href="https://waylonwalker.com/tailwind-and-jinja/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve recently given tailwindcss a second chance and am really liking it. Here is how I set it up for my python based projects.</summary>
    <content type="html">&lt;p&gt;I’ve recently given tailwindcss a second chance and am really liking it. Here&#xA;is how I set it up for my python based projects.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/a-case-for-tailwindcss&#34; class=&#34;hoverlink&#34;&gt;https://waylonwalker.com/a-case-for-tailwindcss&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation &lt;a href=&#34;#installation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;npm&lt;/code&gt; is used to install the cli that you will need to configure and compile tailwindcss.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install -g tailwindcss-cli&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;setup&#34;&gt;Setup &lt;a href=&#34;#setup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You will need to create a tailwind.config.js file, to get this you can use the cli.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npx tailwindcss init&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;using-tailwind-with-jinja-templates&#34;&gt;Using tailwind with jinja templates &lt;a href=&#34;#using-tailwind-with-jinja-templates&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;To set up tailwind to work with jinja templates you will need to point the&#xA;tailwind config content to your jinja templates directory.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;module&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;exports&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;templates/**/*.html&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;setting-up-the-base-styles&#34;&gt;Setting up the base styles &lt;a href=&#34;#setting-up-the-base-styles&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I like to use the &lt;code&gt;@tailwind base;&lt;/code&gt;, to do this I set up an input.css file.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;tailwind&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;base&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;tailwind&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;components&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;tailwind&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;utilities&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;compiling&#34;&gt;Compiling &lt;a href=&#34;#compiling&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now that it’s all setup you can run the tailwindcss command. You will get an&#xA;output.css with base tailwind plus any of the classes that you used.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tailwindcss -i ./input.css -o ./output.css --watch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>A Case For Tailwindcss</title>
    <id>https://waylonwalker.com/a-case-for-tailwindcss/</id>
    <updated>2023-09-10T19:46:19Z</updated>
    <published>2023-09-10T19:46:19Z</published>
    <link href="https://waylonwalker.com/a-case-for-tailwindcss/" rel="alternate" type="text/html"></link>
    <summary type="text">I was watching @theprimeagen recently and I think he sold me on using tailwindcss. The thing about tailwind is that it is not a big component library, it&#39;s a...</summary>
    <content type="html">&lt;p&gt;I was watching @theprimeagen recently and I think he sold me on using&#xA;tailwindcss. The thing about tailwind is that it is not a big component&#xA;library, it’s a set of css classes mapped to a few (usually one) style.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;All css classes are shitty, so you might as well use someone else’s shitty&#xA;css classes on all your projects rather than thinking you’re being smart with a&#xA;new set of classes that you will hate in 6 months when you come back to the&#xA;project. &lt;em&gt;roughly quoted from memory of @theprimeagen&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;its-tiny&#34;&gt;It’s tiny &lt;a href=&#34;#its-tiny&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;So unlike big component libraries like tailwind, it comes with a cli that that&#xA;it uses to create the final css file. It is able to treeshake out all the&#xA;tailwind classes that you are not using and only ship the ones that you are&#xA;using.&lt;/p&gt;&#xA;&lt;h2 id=&#34;its-hard-to-clash&#34;&gt;It’s hard to clash &lt;a href=&#34;#its-hard-to-clash&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Since the classes are so small and single purpose it’s hard to end up with&#xA;something like &lt;code&gt;.card&lt;/code&gt; in two places that mean different things causing you to&#xA;duplicate most of that css anyways so that the whole design doesn’t break when&#xA;you change one or the other.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-classes-make-sense&#34;&gt;the classes make sense &lt;a href=&#34;#the-classes-make-sense&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The classes are really clear and easy to understand, they mentally map over&#xA;directly to the css that they implement.&lt;/p&gt;&#xA;&lt;p&gt;Things like margin are easy to grab once you get the grasp of it. &lt;code&gt;m&lt;/code&gt; for&#xA;margin, and a number for how much, and it’s really easy to bump just a bit&#xA;more.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;m-6&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;margin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.5&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;m-5&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;margin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.25&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;m-4&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;margin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;m-3&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;margin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.75&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;m-2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;margin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.5&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;m-1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;margin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.25&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;m-0&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;margin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;font-sizes-are-well-thought-out&#34;&gt;Font Sizes are well thought out &lt;a href=&#34;#font-sizes-are-well-thought-out&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Rather than having a bunch of random sizes, tailwind has a really well thought&#xA;out design system that does not grow linearly, but with what makes sense. Not&#xA;only the font size, but they have given you the appropriate line-height to go&#xA;with it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;text-2xl&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;font-size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.5&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;line-height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;text-xl&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;font-size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.25&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;line-height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.75&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;text-lg&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;font-size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.125&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;line-height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.75&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;text-sm&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;font-size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.875&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;line-height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.25&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;text-xs&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;font-size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.75&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;line-height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;colors&#34;&gt;Colors &lt;a href=&#34;#colors&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This goes for colors too. When I want to do things like make a button look&#xA;clickable, all I need to do is bump the color up or down by 100, I don’t need&#xA;to know deep color theory to understand if it will be noticable, the team has&#xA;designed it to work better than I can come up with.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;bg-stone-100&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;--tw-bg-opacity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;245&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;245&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;244&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tw&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;opacity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;bg-stone-200&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;--tw-bg-opacity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;231&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;229&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;228&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tw&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;opacity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;bg-stone-300&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;--tw-bg-opacity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;214&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;211&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;209&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tw&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;opacity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;bg-stone-400&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;--tw-bg-opacity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;168&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;162&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;158&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tw&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;opacity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;bg-stone-50&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;--tw-bg-opacity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;250&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;250&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;249&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tw&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;opacity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;bg-stone-500&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;--tw-bg-opacity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;120&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;113&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;108&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tw&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;opacity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;bg-stone-600&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;--tw-bg-opacity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;87&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;83&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;78&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tw&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;opacity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;bg-stone-700&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;--tw-bg-opacity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;68&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;64&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;60&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tw&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;opacity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;bg-stone-900&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;--tw-bg-opacity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;28&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;25&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;23&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tw&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;opacity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;am-i-going-to-start-using-tailwind&#34;&gt;Am I going to start using tailwind? &lt;a href=&#34;#am-i-going-to-start-using-tailwind&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Right now I am working on some projects that I am going to use tailwind on. I&#xA;really see myself liking it. I don’t like that I need to install it with&#xA;&lt;code&gt;npm&lt;/code&gt;, but I can get past that. Cli tools seem to work out pretty well, but&#xA;anytime I have a project that installs a bagillion node modules they all come&#xA;crashing down in 6 month or a year when the project has not been touched and I&#xA;just need one small change.&lt;/p&gt;&#xA;&lt;p&gt;I really like the idea of all these classes being consistent across all my&#xA;projects and really being a short hop away from hand writing css vs a heavy&#xA;component library. Most of all I like their well thought out design system&#xA;that I definitly could not get right myself.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Textualize textual-web</title>
    <id>https://waylonwalker.com/textualize-textual-web/</id>
    <updated>2023-09-08T19:26:42Z</updated>
    <published>2023-09-08T19:26:42Z</published>
    <link href="https://waylonwalker.com/textualize-textual-web/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across textual-web from Textualize, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/Textualize/textual-web&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;textual-web&lt;/a&gt; from &lt;a href=&#34;https://github.com/Textualize&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Textualize&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;Run TUIs and terminals in your browser&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Make the easy things easy</title>
    <id>https://waylonwalker.com/make-the-easy-things-easy/</id>
    <updated>2023-09-06T19:46:19Z</updated>
    <published>2023-09-06T19:46:19Z</published>
    <link href="https://waylonwalker.com/make-the-easy-things-easy/" rel="alternate" type="text/html"></link>
    <summary type="text">It&#39;s so easy to get out of rhythm, get busy, and drop the ball on some things that you really want to do or should do. This blog is a good example. I took...</summary>
    <content type="html">&lt;p&gt;It’s so easy to get out of rhythm, get busy, and drop the ball on some things&#xA;that you really want to do or should do. This blog is a good example. I took&#xA;some time off for some family reasons, but have taken a long time to get back&#xA;to it simply because I am out of rhythm. As I am trying to get back into the&#xA;rhythm there is some tooling that I have set up for it that I completely forgot&#xA;about that feel good to use again.&lt;/p&gt;&#xA;&lt;h2 id=&#34;repetitive-tasks&#34;&gt;Repetitive Tasks &lt;a href=&#34;#repetitive-tasks&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Simple Repetitive Tasks that I have to do often can just feel soul crushing,&#xA;and one main thing that got me interested in programming.&lt;/p&gt;&#xA;&lt;p&gt;AI tools are becoming more and more useful at solving these problems. For&#xA;instance code generation tools like co-pilot or codeium are really good at&#xA;boilerplate and pattern repetition. Things that used to be a few vim macros is&#xA;now just banging on tab.&lt;/p&gt;&#xA;&lt;p&gt;I often look for setting up templates or some sort of snippet to replace a big&#xA;chunk of boilerplate that I know I will need over and over.&lt;/p&gt;&#xA;&lt;h2 id=&#34;timebox&#34;&gt;timebox &lt;a href=&#34;#timebox&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Don’t be afraid to give up on making a better workflow for something that just&#xA;might not be worth it. Give yourself a session or two to show some progress,&#xA;if you don’t get it, don’t be afraid to put it on pause, let it stew, or just&#xA;forget about it. Often times I will come back later with new knowledge and&#xA;knock out an thorn in my setup with new skill much easier the next time around.&lt;/p&gt;&#xA;&lt;h2 id=&#34;low-hanging-fruit&#34;&gt;Low Hanging Fruit &lt;a href=&#34;#low-hanging-fruit&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Often things like having a quick template to get a blog post up and running are&#xA;worth it. It might not take that long to setup a new post, set the date,&#xA;title, tags, and create the file, but sometimes that is enough of a barrier to&#xA;stop me from even making a post. Making a template and a script that I can&#xA;call in a few keystrokes makes me much more likely to make a post.&lt;/p&gt;&#xA;&lt;h2 id=&#34;learning&#34;&gt;Learning &lt;a href=&#34;#learning&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I am often reminded of this xkcd comic about automation, and how easy it is to&#xA;overdo it. Spending far more time automating things than it would have to do&#xA;the original task is a very easy pit to fall into. I’ve been guilty of it many&#xA;times. I’m sure most people who have written any automation code is as well.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://imgs.xkcd.com/comics/automation.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://imgs.xkcd.com/comics/automation.png&#34; alt=&#34;https://xkcd.com/1319/&#34;/ data-glightbox=&#34;description: https://xkcd.com/1319/&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;What this comit misses is learning. If you never take the time to learn any&#xA;automation you will not be any good at it and it &lt;strong&gt;will always&lt;/strong&gt; take longer to&#xA;automate than to just do the thing. You have to tackle some things that you&#xA;think are achievable with skills you think are transferable to other tasks.&#xA;Scraping that one weird endpoint out of the Microsoft Graph API that is not in&#xA;the cli is a prime example. Often there is a series of undocumented n+1&#xA;queries that you have to execute and each leave you feeling like you are almost&#xA;at the data that you can see in the ui, but want in the terminal. Learning&#xA;this api will leave you with nothing but potentially one task automated.&lt;/p&gt;&#xA;&lt;p&gt;Learning how to leverage cli tools like curl, grep, xargs are great examples of&#xA;skills that can solve many automation problems quickly, but the first time you&#xA;will end up spending hours looking for the right thing before you realize what&#xA;you need.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ genmon aboutfeeds</title>
    <id>https://waylonwalker.com/genmon-aboutfeeds/</id>
    <updated>2023-09-02T17:49:43Z</updated>
    <published>2023-09-02T17:49:43Z</published>
    <link href="https://waylonwalker.com/genmon-aboutfeeds/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out aboutfeeds by genmon. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/genmon/aboutfeeds&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;aboutfeeds&lt;/a&gt; by &lt;a href=&#34;https://github.com/genmon&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;genmon&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;Web feeds/RSS “getting started” guide for new users.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ hedgedoc hedgedoc</title>
    <id>https://waylonwalker.com/hedgedoc-hedgedoc/</id>
    <updated>2023-08-23T00:41:40Z</updated>
    <published>2023-08-23T00:41:40Z</published>
    <link href="https://waylonwalker.com/hedgedoc-hedgedoc/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out hedgedoc by hedgedoc. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/hedgedoc/hedgedoc&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;hedgedoc&lt;/a&gt; by &lt;a href=&#34;https://github.com/hedgedoc&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;hedgedoc&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;HedgeDoc - Ideas grow better together&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ThePrimeagen htmx-lsp</title>
    <id>https://waylonwalker.com/theprimeagen-htmx-lsp/</id>
    <updated>2023-08-22T22:12:18Z</updated>
    <published>2023-08-22T22:12:18Z</published>
    <link href="https://waylonwalker.com/theprimeagen-htmx-lsp/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred htmx-lsp by ThePrimeagen. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/ThePrimeagen/htmx-lsp&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;htmx-lsp&lt;/a&gt; by &lt;a href=&#34;https://github.com/ThePrimeagen&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ThePrimeagen&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;its so over&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ mikeckennedy server-hot-reload</title>
    <id>https://waylonwalker.com/mikeckennedy-server-hot-reload/</id>
    <updated>2023-08-21T00:39:50Z</updated>
    <published>2023-08-21T00:39:50Z</published>
    <link href="https://waylonwalker.com/mikeckennedy-server-hot-reload/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out server-hot-reload by mikeckennedy. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/mikeckennedy/server-hot-reload&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;server-hot-reload&lt;/a&gt; by &lt;a href=&#34;https://github.com/mikeckennedy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mikeckennedy&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;Include in your web projects for dev-time auto reloading of web browser when any change is detected in content.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nod-ai SHARK-Studio</title>
    <id>https://waylonwalker.com/nod-ai-shark-studio/</id>
    <updated>2023-08-10T02:50:36Z</updated>
    <published>2023-08-10T02:50:36Z</published>
    <link href="https://waylonwalker.com/nod-ai-shark-studio/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about SHARK-Studio, an amazing project by nod-ai. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/nod-ai/SHARK-Studio&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;SHARK-Studio&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/nod-ai&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nod-ai&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;SHARK Studio – Web UI for SHARK+IREE High Performance Machine Learning Distribution&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nod-ai AMD-SHARK-Studio</title>
    <id>https://waylonwalker.com/nod-ai-amd-shark-studio/</id>
    <updated>2023-08-10T02:50:36Z</updated>
    <published>2023-08-10T02:50:36Z</published>
    <link href="https://waylonwalker.com/nod-ai-amd-shark-studio/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on AMD-SHARK-Studio by nod-ai.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/nod-ai/AMD-SHARK-Studio&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;AMD-SHARK-Studio&lt;/a&gt; by &lt;a href=&#34;https://github.com/nod-ai&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nod-ai&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;AMD-SHARK Studio – Web UI for SHARK+IREE High Performance Machine Learning Distribution&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ kndndrj nvim-dbee</title>
    <id>https://waylonwalker.com/kndndrj-nvim-dbee/</id>
    <updated>2023-07-28T20:39:24Z</updated>
    <published>2023-07-28T20:39:24Z</published>
    <link href="https://waylonwalker.com/kndndrj-nvim-dbee/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred nvim-dbee by kndndrj. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/kndndrj/nvim-dbee&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-dbee&lt;/a&gt; by &lt;a href=&#34;https://github.com/kndndrj&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kndndrj&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;Interactive database client for neovim&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ simonw sqlite-migrate</title>
    <id>https://waylonwalker.com/simonw-sqlite-migrate/</id>
    <updated>2023-07-25T14:31:30Z</updated>
    <published>2023-07-25T14:31:30Z</published>
    <link href="https://waylonwalker.com/simonw-sqlite-migrate/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? sqlite-migrate by simonw.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/simonw/sqlite-migrate&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sqlite-migrate&lt;/a&gt; by &lt;a href=&#34;https://github.com/simonw&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;simonw&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A simple database migration system for SQLite, based on sqlite-utils&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ 1j01 textual-paint</title>
    <id>https://waylonwalker.com/1j01-textual-paint/</id>
    <updated>2023-07-25T14:24:19Z</updated>
    <published>2023-07-25T14:24:19Z</published>
    <link href="https://waylonwalker.com/1j01-textual-paint/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on textual-paint by 1j01.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/1j01/textual-paint&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;textual-paint&lt;/a&gt; by &lt;a href=&#34;https://github.com/1j01&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;1j01&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;🎨 MS Paint in your terminal.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ doyensec wsrepl</title>
    <id>https://waylonwalker.com/doyensec-wsrepl/</id>
    <updated>2023-07-20T15:17:04Z</updated>
    <published>2023-07-20T15:17:04Z</published>
    <link href="https://waylonwalker.com/doyensec-wsrepl/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out wsrepl by doyensec. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/doyensec/wsrepl&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;wsrepl&lt;/a&gt; by &lt;a href=&#34;https://github.com/doyensec&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;doyensec&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;WebSocket REPL for pentesters&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ huggingface llm.nvim</title>
    <id>https://waylonwalker.com/huggingface-llm-nvim/</id>
    <updated>2023-07-11T12:26:53Z</updated>
    <published>2023-07-11T12:26:53Z</published>
    <link href="https://waylonwalker.com/huggingface-llm-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on llm.nvim, created by huggingface.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/huggingface/llm.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;llm.nvim&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/huggingface&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;huggingface&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;LLM powered development for Neovim&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Underground Bases with Wyatt</title>
    <id>https://waylonwalker.com/underground-bases-with-wyatt/</id>
    <updated>2023-07-09T10:41:29Z</updated>
    <published>2023-07-09T10:41:29Z</published>
    <link href="https://waylonwalker.com/underground-bases-with-wyatt/" rel="alternate" type="text/html"></link>
    <summary type="text">Playing minecraft with Wyatt today he started a server all on his own and had me join. All vanilla, only one rule, underground bases.</summary>
    <content type="html">&lt;p&gt;Playing minecraft with Wyatt today he started a server all on his own and had&#xA;me join. All vanilla, only one rule, underground bases.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/eb43e707-ae55-48f8-9916-86321b3b8754.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/eb43e707-ae55-48f8-9916-86321b3b8754.webp&#34; alt=&#34;underground-bases-1.webp&#34;/ data-glightbox=&#34;description: underground-bases-1.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;I spawned into the server and it was already night time. I gathered up some&#xA;wood on my way down a tree, and was attacked by zombies before I could get any&#xA;tools, so I ran up another tree and crafted a crafting table.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/25a3493a-f08b-4ea8-8535-b03cc7bcbf00.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/25a3493a-f08b-4ea8-8535-b03cc7bcbf00.webp&#34; alt=&#34;underground-bases-2.webp&#34;/ data-glightbox=&#34;description: underground-bases-2.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Now to follow the rules, it’s time to head underground to build my base.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/74fc59aa-f0da-4643-a67a-36dc65480760.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/74fc59aa-f0da-4643-a67a-36dc65480760.webp&#34; alt=&#34;underground-bases-3.webp&#34;/ data-glightbox=&#34;description: underground-bases-3.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;I made a mistake and died, but look at this view from my respawn point.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/7e852358-a680-460b-88c0-ed31b2a18501.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/7e852358-a680-460b-88c0-ed31b2a18501.webp&#34; alt=&#34;underground-bases-4.webp&#34;/ data-glightbox=&#34;description: underground-bases-4.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ maces fastapi-htmx</title>
    <id>https://waylonwalker.com/maces-fastapi-htmx/</id>
    <updated>2023-07-03T14:56:51Z</updated>
    <published>2023-07-03T14:56:51Z</published>
    <link href="https://waylonwalker.com/maces-fastapi-htmx/" rel="alternate" type="text/html"></link>
    <summary type="text">I like maces&#39;s project fastapi-htmx.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/maces&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;maces’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/maces/fastapi-htmx&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fastapi-htmx&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Extension for &lt;a href=&#34;/fastapi/&#34; class=&#34;glossary-term&#34; title=&#34;FastAPI is a modern and efficient web framework for Python, built on top of the Starlette web framework, and pydantic for data validation and serialization.&#34;&gt;FastAPI&lt;/a&gt; to make &lt;a href=&#34;/htmx/&#34; class=&#34;glossary-term&#34; title=&#34;htmx is a frontend javascript library for creating dynamic web applications.&#34;&gt;HTMX&lt;/a&gt; easier to use.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ericsnowcurrently interpreters</title>
    <id>https://waylonwalker.com/ericsnowcurrently-interpreters/</id>
    <updated>2023-06-27T16:07:38Z</updated>
    <published>2023-06-27T16:07:38Z</published>
    <link href="https://waylonwalker.com/ericsnowcurrently-interpreters/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on interpreters by ericsnowcurrently.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/ericsnowcurrently/interpreters&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;interpreters&lt;/a&gt; by &lt;a href=&#34;https://github.com/ericsnowcurrently&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ericsnowcurrently&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;a placeholder&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ coollabsio coolify</title>
    <id>https://waylonwalker.com/coollabsio-coolify/</id>
    <updated>2023-06-24T12:39:53Z</updated>
    <published>2023-06-24T12:39:53Z</published>
    <link href="https://waylonwalker.com/coollabsio-coolify/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out coolify by coollabsio. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/coollabsio/coolify&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;coolify&lt;/a&gt; by &lt;a href=&#34;https://github.com/coollabsio&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;coollabsio&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;An open-source &amp;amp; self-hostable Heroku / Netlify / Vercel alternative.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Python scandir ignores hidden directories</title>
    <id>https://waylonwalker.com/python-scandir-ignores-hidden-directories/</id>
    <updated>2023-06-17T20:19:59Z</updated>
    <published>2023-06-17T20:19:59Z</published>
    <link href="https://waylonwalker.com/python-scandir-ignores-hidden-directories/" rel="alternate" type="text/html"></link>
    <summary type="text">The next version of markata will be around a full second faster at building it&#39;s docs, that&#39;s a 30% bump in performance at the current state. This...</summary>
    <content type="html">&lt;p&gt;The next version of markata will be around a full second faster at building&#xA;it’s docs, that’s a 30% bump in performance at the current state. This&#xA;performance will come when virtual environments are stored in the same&#xA;directory as the source code.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000300.1657735302.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000300.1657735302.webp&#34; alt=&#34;“One lone jedi stands in Glowing chains of interconnected network of technological cubes, in the middle of a futuristic cyberpunk dubai city, in the art style of dan mumford and marc simonetti, atmospheric lighting, intricate, volumetric lighting, beautiful, sharp focus, ultra detailed” -s50 -W800 -H350 -C7.5 -Ak_lms -S1657735302&#34;/ data-glightbox=&#34;description: “One lone jedi stands in Glowing chains of interconnected network of technological cubes, in the middle of a futuristic cyberpunk dubai city, in the art style of dan mumford and marc simonetti, atmospheric lighting, intricate, volumetric lighting, beautiful, sharp focus, ultra detailed” -s50 -W800 -H350 -C7.5 -Ak_lms -S1657735302&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;what-happened&#34;&gt;What happened?? &lt;a href=&#34;#what-happened&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I was looking through my profiler for some unexpected performance hits, and&#xA;noticed that the &lt;code&gt;docs&lt;/code&gt; plugin was taking nearly a full second (sometimes&#xA;more), just to run glob.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;|-&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.068&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glob&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;markata&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;plugins&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;docs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;py&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;40&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;|-&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.838&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;listcomp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;markata&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;plugins&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;docs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;py&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;82&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.817&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PathSpec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;match_file&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;pathspec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pathspec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;py&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;165&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;frames&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hidden&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;pathspec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;built&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;python-scandir-ignores-hidden-directories&#34;&gt;Python scandir ignores hidden directories &lt;a href=&#34;#python-scandir-ignores-hidden-directories&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I started looking for different solutions and what I found was that I was&#xA;hitting pathspec with way more files than I needed to.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;glob&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;**/*.py&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 6444&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;glob&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;glob&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;**/*.py&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;recursive&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 110&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;After digging into the docs I found that &lt;code&gt;glob.glob&lt;/code&gt; uses &lt;code&gt;os.scandir&lt;/code&gt; which&#xA;ignores ‘.’ and ‘..’ directories while Path.glob does not.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://docs.python.org/3/library/os.html#os.scandir&#34; class=&#34;hoverlink  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/docs.python.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/docs.python.org.ico&#34;&gt;https://docs.python.org/3/library/os.html#os.scandir&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;results&#34;&gt;results? &lt;a href=&#34;#results&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now glob.py from the docs plugin does not even show up in the profiler.&lt;/p&gt;&#xA;&lt;p&gt;I opened up ipython and saw the following results. For some reason as I hit&#xA;docs.glob it was only hitting 488 ms from ipython, but it was still a massive&#xA;improvement over the original.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;timeit&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;docs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;glob&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 488 ms ± 3.05 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;timeit&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;docs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;glob&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 9.37 ms ± 90.9 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ mitsuhiko minijinja</title>
    <id>https://waylonwalker.com/mitsuhiko-minijinja/</id>
    <updated>2023-06-16T14:19:21Z</updated>
    <published>2023-06-16T14:19:21Z</published>
    <link href="https://waylonwalker.com/mitsuhiko-minijinja/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by minijinja from mitsuhiko.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/mitsuhiko/minijinja&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;minijinja&lt;/a&gt; from &lt;a href=&#34;https://github.com/mitsuhiko&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mitsuhiko&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;MiniJinja is a powerful but minimal dependency template engine for Rust compatible with Jinja/Jinja2&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ AntonOsika gpt-engineer</title>
    <id>https://waylonwalker.com/antonosika-gpt-engineer/</id>
    <updated>2023-06-15T02:24:17Z</updated>
    <published>2023-06-15T02:24:17Z</published>
    <link href="https://waylonwalker.com/antonosika-gpt-engineer/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about gpt-engineer, an amazing project by AntonOsika. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/AntonOsika/gpt-engineer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gpt-engineer&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/AntonOsika&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;AntonOsika&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Platform to experiment with the AI Software Engineer. Terminal based. NOTE: Very different from &lt;a href=&#34;https://gptengineer.app&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/gptengineer.app.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/gptengineer.app.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://gptengineer.app&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ s0md3v roop</title>
    <id>https://waylonwalker.com/s0md3v-roop/</id>
    <updated>2023-05-30T22:14:09Z</updated>
    <published>2023-05-30T22:14:09Z</published>
    <link href="https://waylonwalker.com/s0md3v-roop/" rel="alternate" type="text/html"></link>
    <summary type="text">I like s0md3v&#39;s project roop.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/s0md3v&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;s0md3v’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/s0md3v/roop&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;roop&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;one-click face swap&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tidwall jj</title>
    <id>https://waylonwalker.com/tidwall-jj/</id>
    <updated>2023-05-30T22:11:25Z</updated>
    <published>2023-05-30T22:11:25Z</published>
    <link href="https://waylonwalker.com/tidwall-jj/" rel="alternate" type="text/html"></link>
    <summary type="text">tidwall has done a fantastic job with jj. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/tidwall&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tidwall&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/tidwall/jj&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jj&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;JSON Stream Editor (command line utility)&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ darrenburns elia</title>
    <id>https://waylonwalker.com/darrenburns-elia/</id>
    <updated>2023-05-30T19:08:14Z</updated>
    <published>2023-05-30T19:08:14Z</published>
    <link href="https://waylonwalker.com/darrenburns-elia/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered elia by darrenburns, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/darrenburns/elia&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;elia&lt;/a&gt; by &lt;a href=&#34;https://github.com/darrenburns&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;darrenburns&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;A snappy, keyboard-centric terminal user interface for interacting with large language models. Chat with ChatGPT, Claude, Llama 3, Phi 3, Mistral, Gemma and more.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ calcom cal.com</title>
    <id>https://waylonwalker.com/calcom-cal-com/</id>
    <updated>2023-05-28T15:45:42Z</updated>
    <published>2023-05-28T15:45:42Z</published>
    <link href="https://waylonwalker.com/calcom-cal-com/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on cal.com by calcom.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/calcom/cal.com&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cal.com&lt;/a&gt; by &lt;a href=&#34;https://github.com/calcom&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;calcom&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Scheduling infrastructure for absolutely everyone.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>setting up paru | installing from the AUR for the first time</title>
    <id>https://waylonwalker.com/setting-up-paru/</id>
    <updated>2023-05-27T20:22:42Z</updated>
    <published>2023-05-27T20:22:42Z</published>
    <link href="https://waylonwalker.com/setting-up-paru/" rel="alternate" type="text/html"></link>
    <summary type="text">paru is an aur helper that allows you to use a package manager to install packages from the aur.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;/paru/&#34; class=&#34;glossary-term&#34; title=&#34;paru is a package manager for archlinux that installs packages from the &lt;a href=&#34;/aur/&#34; class=&#34;glossary-term&#34; title=&#34;Arch User Repository, a collection of community maintained packages for archlinux.&#34;&gt;AUR&lt;/a&gt;.&#34;&gt;paru&lt;/a&gt; is an aur helper that allows you to use a package manager to install&#xA;packages from the aur.&lt;/p&gt;&#xA;&lt;h2 id=&#34;whats-the-aur&#34;&gt;What’s the Aur &lt;a href=&#34;#whats-the-aur&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The Aur is a set of community managed packages that can be installed on arch based distros.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-a-helper&#34;&gt;Why a helper? &lt;a href=&#34;#why-a-helper&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;paru just makes it easy, no clone and run makepkg. You can do everything paru&#xA;can do using the built in pacman installer.&lt;/p&gt;&#xA;&lt;h2 id=&#34;manual-install-from-the-aur&#34;&gt;Manual Install from the Aur &lt;a href=&#34;#manual-install-from-the-aur&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You will need to manually instal pacman from the aur in order to get started.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pacman -S --needed base-devel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://aur.archlinux.org/paru.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; paru&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;makepkg -si&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;installing-packages-with-paru&#34;&gt;Installing packages with paru &lt;a href=&#34;#installing-packages-with-paru&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Once setup you are ready to install packages from the AUR just like the core repos.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;# you can update your system using paru&#xA;paru -Syu&#xA;&#xA;# you can install packages from the AUR&#xA;paru -S tailscale&#xA;paru -S prismlauncher&#xA;&#xA;# even core repo packages can be installed&#xA;paru -S docker&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;paru-in-docker&#34;&gt;Paru in Docker &lt;a href=&#34;#paru-in-docker&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is a snippet from my devtainer&#xA;&lt;a href=&#34;https://github.com/WaylonWalker/devtainer/blob/main/Dockerfile&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dockerfile&lt;/a&gt;.&#xA;Where I use paru to install packages from the AUR inside of a dockerfile.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;FROM archlinux&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;RUN &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;[multilib]&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; /etc/pacman.conf &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Include = /etc/pacman.d/mirrorlist&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; /etc/pacman.conf &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    pacman --noconfirm -Syyu &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    pacman --noconfirm -S base-devel git &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    groupadd --gid &lt;span class=&#34;m&#34;&gt;1000&lt;/span&gt; devtainer &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    useradd --uid &lt;span class=&#34;m&#34;&gt;1000&lt;/span&gt; --gid &lt;span class=&#34;m&#34;&gt;1000&lt;/span&gt; -m -r -s /bin/bash devtainer &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    passwd -d devtainer &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;devtainer ALL=(ALL) ALL&amp;#39;&lt;/span&gt; &amp;gt; /etc/sudoers.d/devtainer &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    mkdir -p /home/devtainer/.gnupg &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;standard-resolver&amp;#39;&lt;/span&gt; &amp;gt; /home/devtainer/.gnupg/dirmngr.conf &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    chown -R devtainer:devtainer /home/devtainer &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    mkdir /build &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    chown -R devtainer:devtainer /build &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /build &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    sudo -u devtainer git clone --depth &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; https://aur.archlinux.org/paru.git &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; paru &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    sudo -u devtainer makepkg --noconfirm -si &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    sed -i &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/#RemoveMake/RemoveMake/g&amp;#39;&lt;/span&gt; /etc/paru.conf &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    pacman -Qtdq &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -r pacman --noconfirm -Rcns &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    rm -rf /home/devtainer/.cache &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    rm -rf /build&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;USER devtainer&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;RUN sudo -u devtainer paru --noconfirm --skipreview --useask -S &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    bat &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    cargo &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    direnv &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    dua-cli &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    dust &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    fd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;final-thoughts&#34;&gt;Final Thoughts &lt;a href=&#34;#final-thoughts&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There are other options out there, paru seemed to be the most supported at the&#xA;time I started using arch and there has been no other reason for me to change&#xA;it. It’s treated me well for nearly a year now.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>I took a break</title>
    <id>https://waylonwalker.com/i-took-a-break/</id>
    <updated>2023-05-27T19:45:12Z</updated>
    <published>2023-05-27T19:45:12Z</published>
    <link href="https://waylonwalker.com/i-took-a-break/" rel="alternate" type="text/html"></link>
    <summary type="text">Life comes in waves, and sometimes you need to set down some of your projects to focus on others. For the first part of 2023 I&#39;ve really had a lot of family...</summary>
    <content type="html">&lt;p&gt;Life comes in waves, and sometimes you need to set down some of your projects to&#xA;focus on others. For the first part of 2023 I’ve really had a lot of family&#xA;stuff to focus on, we also are pretty new homeowners and are still trying to&#xA;get our new to us house cleaned up and modernized.&lt;/p&gt;&#xA;&lt;h2 id=&#34;side-projects&#34;&gt;Side Projects &lt;a href=&#34;#side-projects&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can see in my growing list of&#xA;&lt;a href=&#34;https://github.com/WaylonWalker?tab=repositories&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;repos&lt;/a&gt; that I have poked&#xA;around on quite a few side projects over the past few months. This has been&#xA;quite relaxng to me, mostly things that I use to learn from, but also a&#xA;lot that are tools and things I use that bring me joy.&lt;/p&gt;&#xA;&lt;h2 id=&#34;pydantic&#34;&gt;Pydantic &lt;a href=&#34;#pydantic&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I haven’t wrote about it at all yet, but I have really been starting to lean&#xA;into pydantic on all of these side projects. I have really been enjoying the&#xA;type system. A good friend &lt;a href=&#34;https://twitter.com/pypeaday&#34;&gt;@pypeaday&lt;/a&gt; got me&#xA;hooked and we have been throwing around this phrase that he learned from a math&#xA;professor “Make it So”. The idea boils down to leveraging pydantic to&#xA;make all the values you want to exist up front, or fail validation, then have&#xA;no more checks scattered all over your code.&lt;/p&gt;&#xA;&lt;p&gt;I’ve really been deleting a bunch of logic from places within my code and&#xA;putting it right in the pydantic models. This gives me one place I will know&#xA;to look for it rather than many places some logic might come up. Then when it’s&#xA;time to do things, the logic is typically a bit simpler.&lt;/p&gt;&#xA;&lt;h2 id=&#34;markata&#34;&gt;Markata &lt;a href=&#34;#markata&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://markata.dev&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/markata.dev.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/markata.dev.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Markata&lt;/a&gt; continues to be my biggest side project.&#xA;Currently its it a big refactoring phase to get everything moved into pydantic.&#xA;It’s been quite awhile since I’ve had a release, but there has been steady&#xA;progress going into the &lt;code&gt;pydantic&lt;/code&gt; branch.&lt;/p&gt;&#xA;&lt;h2 id=&#34;ai&#34;&gt;AI &lt;a href=&#34;#ai&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Ai is really hot in 2023. I’ve been trying to keep my finger on the pulse and&#xA;play with it. I tried to make a library to interface with openai&#xA;&lt;a href=&#34;https://github.com/waylonwalker/lockhart&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lockhart&lt;/a&gt;. It was a cli where you&#xA;can store prompt template. I also made a full text adventure game with a new&#xA;library from prefect.io, called marvin. &lt;a href=&#34;https://github.com/WaylonWalker/marvin-sw-text-adventure&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;marvin star wars text&#xA;adventure&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;i-took-a-break&#34;&gt;I took a break &lt;a href=&#34;#i-took-a-break&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It’s defintitely good to take breaks from big projects, and for me its often&#xA;things like family and work that need to come first and I set things aside. I&#xA;am not saying that I am back to daily writing, but I am going to give it a go&#xA;and see where it takes me. I’ve got a big backlog of ideas to get out.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ m4xshen hardtime.nvim</title>
    <id>https://waylonwalker.com/m4xshen-hardtime-nvim/</id>
    <updated>2023-05-23T16:45:30Z</updated>
    <published>2023-05-23T16:45:30Z</published>
    <link href="https://waylonwalker.com/m4xshen-hardtime-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on hardtime.nvim by m4xshen.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/m4xshen/hardtime.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;hardtime.nvim&lt;/a&gt; by &lt;a href=&#34;https://github.com/m4xshen&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;m4xshen&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Establish good command workflow and quit bad habit&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Textualize trogon</title>
    <id>https://waylonwalker.com/textualize-trogon/</id>
    <updated>2023-05-21T18:55:35Z</updated>
    <published>2023-05-21T18:55:35Z</published>
    <link href="https://waylonwalker.com/textualize-trogon/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by trogon from Textualize.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/Textualize/trogon&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;trogon&lt;/a&gt; from &lt;a href=&#34;https://github.com/Textualize&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Textualize&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Easily turn your Click CLI into a powerful terminal application&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ AckslD swenv.nvim</title>
    <id>https://waylonwalker.com/acksld-swenv-nvim/</id>
    <updated>2023-05-15T15:45:30Z</updated>
    <published>2023-05-15T15:45:30Z</published>
    <link href="https://waylonwalker.com/acksld-swenv-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by swenv.nvim from AckslD.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/AckslD/swenv.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;swenv.nvim&lt;/a&gt; from &lt;a href=&#34;https://github.com/AckslD&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;AckslD&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Tiny plugin to quickly switch python virtual environments from within neovim without restarting.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Playing Star Wars Text Adventure with a 10 yr old</title>
    <id>https://waylonwalker.com/playing-sw-text-adventure-10-yr-old/</id>
    <updated>2023-05-15T12:08:00Z</updated>
    <published>2023-05-15T12:08:00Z</published>
    <link href="https://waylonwalker.com/playing-sw-text-adventure-10-yr-old/" rel="alternate" type="text/html"></link>
    <summary type="text">article.blog-post { max-width: 1200px; }</summary>
    <content type="html">&lt;style&gt;&#xA;article.blog-post {&#xA;    max-width: 1200px;&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;p&gt;The following is a playthrough of Star Wars Text Adventure with a 10 yr old.The&#xA;following is a playthrough of StarThe following is a playthrough of Star&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;❯ sw-adventure game run&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;[05/15/23 18:47:42] INFO     marvin.marvin: Using OpenAI model &amp;#34;gpt-3.5-turbo&amp;#34;                         logging.py:50&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;18:47:42.699 | INFO    | marvin.marvin - [default on default]Using OpenAI model &amp;#34;gpt-3.5-turbo&amp;#34;[/]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;[18:47:42] Starting game                                                                                  game.py:30&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;generating your character&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;╭─ Zorin Kreez&amp;#39;s Mission Card ─────────────────────────────────────────────────────────────────────────────────────╮&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│         Zorin Kreez          │ Zorin Kreez was born on Tatooine and grew up in a small farming community. He     │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   health           │ 100     │ always dreamed of adventure and excitement. As soon as he was old enough, he      │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   imperial credits │ 5000    │ joined the Imperial Navy and quickly rose through the ranks. He is now a skilled  │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   fuel level       │ 100     │ pilot and loyal member of the Empire.                                             │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│                              │                                                                                   │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│       Imperial               │ A nimble and deadly starfighter used by the Imperial Navy                         │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│     Starfighter              │                                                                                   │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   year built │ 5             │                                                                                   │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   capacity   │ 1             │                                                                                   │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   fuel level │ 100           │                                                                                   │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│                              │                                                                                   │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│     Operation Shadow Hand    │ Infiltrate and sabotage the Rebel base on Yavin IV, using any means necessary.    │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   place  │ Yavin IV          │ Eliminate their leadership and secure the plans to the Death Star.                │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   year   │ 5                 │                                                                                   │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   risk   │ 50 hp             │                                                                                   │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   reward │ 10000 credits     │                                                                                   │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   leader │ Director Krennic  │                                                                                   │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;What do you do ❯: sneak into the deathstar, but accidently drop a fart&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;go&#34;&gt;Your mission has been completed&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;Zorin Kreez attempted to sneak into the Death Star, but accidentally let out a loud fart, alerting nearby&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;Stormtroopers. He was quickly captured and taken into custody. The mission was a complete failure.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You earned 0 imperial credits&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You spent 0 imperial credits&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You gained 0 health&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You lost 0 health&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;╭─ Zorin Kreez&amp;#39;s Mission Card ─────────────────────────────────────────────────────────────────────────────────────╮&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│         Zorin Kreez            │ Zorin Kreez was born on Tatooine and grew up in a small farming community. He   │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   health           │ 100       │ always dreamed of adventure and excitement. As soon as he was old enough, he    │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   imperial credits │ 5000      │ joined the Imperial Navy and quickly rose through the ranks. He is now a        │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   fuel level       │ 100       │ skilled pilot and loyal member of the Empire.                                   │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│                                │                                                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│       Imperial                 │ A nimble and deadly starfighter used by the Imperial Navy                       │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│     Starfighter                │                                                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   year built │ 5               │                                                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   capacity   │ 1               │                                                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   fuel level │ 100             │                                                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│                                │                                                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│      Operation Star Saber      │ Infiltrate the secret Rebel base on Coruscant and retrieve the stolen Imperial  │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   place  │ Coruscant           │ data. Avoid detection and eliminate any Rebel agents if necessary.              │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   year   │ 6                   │                                                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   risk   │ 80 hp               │                                                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   reward │ 12000 credits       │                                                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   leader │ Admiral Rae Sloane  │                                                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;What do you do ❯: release a deadly fart that will drop any stormtrooper in a 12 ft radius&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;go&#34;&gt;Your mission has been completed&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;Zorin Kreez attempted to release a deadly fart to drop any stormtrooper in a 12 ft radius, but he ended up falling&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;victim to the toxic gas himself and passed out. The mission was a complete failure.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You earned 0 imperial credits&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You spent 0 imperial credits&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You gained 0 health&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You lost 0 health&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;╭─ Zorin Kreez&amp;#39;s Mission Card ─────────────────────────────────────────────────────────────────────────────────────╮&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│         Zorin Kreez        │ Zorin Kreez was born on Tatooine and grew up in a small farming community. He       │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   health           │ 100   │ always dreamed of adventure and excitement. As soon as he was old enough, he        │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   imperial credits │ 5000  │ joined the Imperial Navy and quickly rose through the ranks. He is now a skilled    │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   fuel level       │ 100   │ pilot and loyal member of the Empire.                                               │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│                            │                                                                                     │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│       Imperial             │ A nimble and deadly starfighter used by the Imperial Navy                           │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│     Starfighter            │                                                                                     │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   year built │ 5           │                                                                                     │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   capacity   │ 1           │                                                                                     │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   fuel level │ 100         │                                                                                     │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│                            │                                                                                     │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│    Operation Foul Odor     │ Infiltrate the Death Star and disrupt the Rebel Alliance&amp;#39;s plans by releasing a     │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   place  │ Death Star      │ deadly fart that will incapacitate their forces. Avoid detection and eliminate any  │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   year   │ 7               │ Rebel agents if necessary.                                                          │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   risk   │ 90 hp           │                                                                                     │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   reward │ 15000 credits   │                                                                                     │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   leader │ Darth Vader     │                                                                                     │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;What do you do ❯: spend 500 credits on beans&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;go&#34;&gt;Your mission has been completed&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;Zorin Kreez spent 500 imperial credits on beans, hoping to prepare for the upcoming mission. Unfortunately, the&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;beans did not sit well with him, causing him to have severe digestive issues during the mission. The resulting&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;flatulence was so intense that it alerted nearby Stormtroopers, resulting in Zorin&amp;#39;s capture. The mission was a&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;complete failure.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You earned 0 imperial credits&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You spent 500 imperial credits&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You gained 0 health&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You lost 0 health&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;╭─ Zorin Kreez&amp;#39;s Mission Card ─────────────────────────────────────────────────────────────────────────────────────╮&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│         Zorin Kreez            │ Zorin Kreez was born on Tatooine and grew up in a small farming community. He   │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   health           │ 100       │ always dreamed of adventure and excitement. As soon as he was old enough, he    │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   imperial credits │ 4500      │ joined the Imperial Navy and quickly rose through the ranks. He is now a        │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   fuel level       │ 100       │ skilled pilot and loyal member of the Empire.                                   │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│                                │                                                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│       Imperial                 │ A nimble and deadly starfighter used by the Imperial Navy                       │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│     Starfighter                │                                                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   year built │ 5               │                                                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   capacity   │ 1               │                                                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   fuel level │ 100             │                                                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│                                │                                                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│    Operation Wretched Stench   │ Infiltrate the Rebel base on Hoth and release a deadly stench that will         │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   place  │ Rebel Base on Hoth  │ incapacitate their forces. Avoid detection and eliminate any Rebel agents if    │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   year   │ 8                   │ necessary.                                                                      │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   risk   │ 85 hp               │                                                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   reward │ 12000 credits       │                                                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   leader │ General Veers       │                                                                                 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;What do you do ❯: Quietly enter the Rebel Base and eliminate any Rebel agent with a silent but deadly wet fart&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;go&#34;&gt;Your mission has been completed&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;Zorin Kreez attempted to eliminate a Rebel agent with a wet fart, but the fart was not silent and alerted nearby&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;Stormtroopers. The resulting chaos led to Zorin being captured and taken into custody. The mission was a complete&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;failure.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You earned 0 imperial credits&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You spent 0 imperial credits&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You gained 0 health&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You lost 0 health&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;╭─ Zorin Kreez&amp;#39;s Mission Card ─────────────────────────────────────────────────────────────────────────────────────╮&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│         Zorin Kreez                │ Zorin Kreez was born on Tatooine and grew up in a small farming community.  │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   health           │ 100           │ He always dreamed of adventure and excitement. As soon as he was old        │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   imperial credits │ 4500          │ enough, he joined the Imperial Navy and quickly rose through the ranks. He  │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   fuel level       │ 100           │ is now a skilled pilot and loyal member of the Empire.                      │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│                                    │                                                                             │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│       Imperial                     │ A nimble and deadly starfighter used by the Imperial Navy                   │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│     Starfighter                    │                                                                             │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   year built │ 5                   │                                                                             │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   capacity   │ 1                   │                                                                             │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   fuel level │ 100                 │                                                                             │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│                                    │                                                                             │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│      Operation Stinky Sabotage     │ Infiltrate the Rebel base on Yavin IV and sabotage their weapons and        │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   place  │ Rebel Base on Yavin IV  │ communication systems with a silent but deadly wet fart. Avoid detection    │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   year   │ 9                       │ and eliminate any Rebel agents if necessary.                                │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   risk   │ 90 hp                   │                                                                             │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   reward │ 13000 credits           │                                                                             │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   leader │ General Veers           │                                                                             │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;What do you do ❯: spend 500 credits on fart spray&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;go&#34;&gt;Your mission has been completed&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;Zorin Kreez spent 500 imperial credits on fart spray, hoping to prepare for the upcoming mission. However, the spray&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;turned out to be ineffective and Zorin ended up being captured by the Rebels. The mission was a complete failure.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You earned 0 imperial credits&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You spent 500 imperial credits&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You gained 0 health&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You lost 0 health&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;╭─ Zorin Kreez&amp;#39;s Mission Card ─────────────────────────────────────────────────────────────────────────────────────╮&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│         Zorin Kreez                │ Zorin Kreez was born on Tatooine and grew up in a small farming community.  │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   health           │ 100           │ He always dreamed of adventure and excitement. As soon as he was old        │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   imperial credits │ 4000          │ enough, he joined the Imperial Navy and quickly rose through the ranks. He  │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   fuel level       │ 100           │ is now a skilled pilot and loyal member of the Empire.                      │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│                                    │                                                                             │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│       Imperial                     │ A nimble and deadly starfighter used by the Imperial Navy                   │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│     Starfighter                    │                                                                             │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   year built │ 5                   │                                                                             │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   capacity   │ 1                   │                                                                             │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   fuel level │ 100                 │                                                                             │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│                                    │                                                                             │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│      Operation Stinky Sabotage     │ Infiltrate the Rebel base on Yavin IV and sabotage their weapons and        │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   place  │ Rebel Base on Yavin IV  │ communication systems with a silent but deadly wet fart. Avoid detection    │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   year   │ 9                       │ and eliminate any Rebel agents if necessary.                                │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   risk   │ 90 hp                   │                                                                             │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   reward │ 13000 credits           │                                                                             │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   leader │ General Veers           │                                                                             │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;What do you do ❯: spend 1000 on nuke&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;go&#34;&gt;Your mission has been completed&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;Zorin Kreez attempted to purchase a nuke with 1000 imperial credits, but was quickly reprimanded by Imperial&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;authorities for attempting to use resources for personal gain. Zorin was demoted and his mission was a complete&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;failure.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You earned 0 imperial credits&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You spent 1000 imperial credits&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You gained 0 health&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You lost 0 health&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;╭─ Zorin Kreez&amp;#39;s Mission Card ─────────────────────────────────────────────────────────────────────────────────────╮&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│         Zorin Kreez                   │ Zorin Kreez was born on Tatooine and grew up in a small farming          │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   health           │ 100              │ community. He always dreamed of adventure and excitement. As soon as he  │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   imperial credits │ 3000             │ was old enough, he joined the Imperial Navy and quickly rose through     │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   fuel level       │ 100              │ the ranks. He is now a skilled pilot and loyal member of the Empire.     │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│                                       │                                                                          │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│       Imperial                        │ A nimble and deadly starfighter used by the Imperial Navy                │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│     Starfighter                       │                                                                          │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   year built │ 5                      │                                                                          │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   capacity   │ 1                      │                                                                          │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   fuel level │ 100                    │                                                                          │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│                                       │                                                                          │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│           Operation No Nukes          │ Zorin Kreez has been detained by Imperial authorities for attempting to  │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   place  │ Imperial Detention Center  │ purchase a nuke with Imperial resources. His mission is to escape the    │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   year   │ 10                         │ detention center and clear his name. Avoid detection and eliminate any   │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   risk   │ 95 hp                      │ Rebel agents if necessary.                                               │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   reward │ 0 credits                  │                                                                          │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   leader │ Admiral Piett              │                                                                          │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;What do you do ❯: Approach Admiral Piett with the fart nuke&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;go&#34;&gt;Your mission has been completed&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;Zorin Kreez was quickly apprehended by Imperial authorities when he attempted to approach Admiral Piett with the&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;fart nuke. His mission was a complete failure.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You earned 0 imperial credits&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You spent 0 imperial credits&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You gained 0 health&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You lost 0 health&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;╭─ Zorin Kreez&amp;#39;s Mission Card ─────────────────────────────────────────────────────────────────────────────────────╮&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│         Zorin Kreez                   │ Zorin Kreez was born on Tatooine and grew up in a small farming          │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   health           │ 100              │ community. He always dreamed of adventure and excitement. As soon as he  │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   imperial credits │ 3000             │ was old enough, he joined the Imperial Navy and quickly rose through     │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   fuel level       │ 100              │ the ranks. He is now a skilled pilot and loyal member of the Empire.     │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│                                       │                                                                          │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│       Imperial                        │ A nimble and deadly starfighter used by the Imperial Navy                │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│     Starfighter                       │                                                                          │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   year built │ 5                      │                                                                          │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   capacity   │ 1                      │                                                                          │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   fuel level │ 100                    │                                                                          │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│                                       │                                                                          │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│          Operation No Nukes 2         │ Zorin Kreez has escaped from Imperial detention and acquired a fart      │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   place  │ Imperial Detention Center  │ nuke. His mission is to approach Admiral Piett with the nuke, eliminate  │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   year   │ 10                         │ any Rebel agents if necessary, and clear his name.                       │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   risk   │ 99 hp                      │                                                                          │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   reward │ 0 credits                  │                                                                          │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;│   leader │ Admiral Piett              │                                                                          │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;What do you do ❯: Jump in the Imperial Starfighter as quickly as possible, drop the fart nuke on the Imperial Detention Center just before jumping into hyperspace.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;&lt;/span&gt;&lt;span class=&#34;go&#34;&gt;Your mission has been completed&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;Zorin Kreez attempted to carry out his mission plan, but was quickly intercepted by Imperial authorities who had&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;received a tip-off about his intentions. Zorin was arrested and taken into custody. The mission was a complete&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;failure.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You earned 0 imperial credits&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You spent 0 imperial credits&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You gained 0 health&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;You lost 0 health&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ mtshiba pylyzer</title>
    <id>https://waylonwalker.com/mtshiba-pylyzer/</id>
    <updated>2023-05-10T15:33:40Z</updated>
    <published>2023-05-10T15:33:40Z</published>
    <link href="https://waylonwalker.com/mtshiba-pylyzer/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about pylyzer, an amazing project by mtshiba. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/mtshiba/pylyzer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pylyzer&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/mtshiba&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mtshiba&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;A fast, feature-rich static code analyzer &amp;amp; language server for Python&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Pydantic and singledispatch</title>
    <id>https://waylonwalker.com/pydantic-and-singledispatch/</id>
    <updated>2023-05-03T17:31:13Z</updated>
    <published>2023-05-03T17:31:13Z</published>
    <link href="https://waylonwalker.com/pydantic-and-singledispatch/" rel="alternate" type="text/html"></link>
    <summary type="text">I was reading about pydantic-singledispatch from Giddeon&#39;s blog and found it very intersting. I&#39;m getting ready to implement pydantic on my static site...</summary>
    <content type="html">&lt;p&gt;I was reading about&#xA;&lt;a href=&#34;https://www.gidware.com/reducing-complexity-with-pydantic-singledispatch/&#34;&gt;pydantic-singledispatch&lt;/a&gt;&#xA;from Giddeon’s blog and found it very intersting. I’m getting ready to&#xA;implement pydantic on my static site generator &lt;a href=&#34;https://markata.dev/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/markata.dev.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/markata.dev.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;markata&lt;/a&gt;,&#xA;and I think there are so uses for this idea, so I want to try it out.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-idea&#34;&gt;The Idea &lt;a href=&#34;#the-idea&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let’s set up some pydantic settings. We will need separate Models for each&#xA;environment that we want to support for this to work. The whole idea is to use&#xA;&lt;code&gt;functools.singledispatch&lt;/code&gt; and type hints to provide unique execution for each&#xA;environment. We might want something like a path_prefix in prod for&#xA;environments like GithubPages that deploy to &lt;code&gt;/&amp;lt;name-of-repo&amp;gt;&lt;/code&gt; while keeping&#xA;the root at &lt;code&gt;/&lt;/code&gt; in dev.&lt;/p&gt;&#xA;&lt;h2 id=&#34;settings-model&#34;&gt;Settings Model &lt;a href=&#34;#settings-model&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is our model for our settings. We will create a CommonSettings model&#xA;that will be used by all environments. We will also create a &lt;code&gt;DevSettings&lt;/code&gt;&#xA;model that will be used in dev and &lt;code&gt;ProdSettings&lt;/code&gt; that will be used in prod.&#xA;We will use &lt;code&gt;env&lt;/code&gt; as the discriminator so pydantic knows which model to use.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-{.python&#34;&gt;from typing import Literal, Union&#xA;&#xA;import pydantic&#xA;from pydantic import Field&#xA;from rich import print&#xA;from typing_extensions import Annotated&#xA;&#xA;&#xA;class CommonSettings(pydantic.BaseSettings):&#xA;    &amp;#34;&amp;#34;&amp;#34;Common settings for all environments&amp;#34;&amp;#34;&amp;#34;&#xA;    debug: bool = False&#xA;    secret_key: str = &amp;#34;secret&amp;#34;&#xA;    algorithm: str = &amp;#34;HS256&amp;#34;&#xA;    access_token_expire_minutes: int = 60&#xA;&#xA;&#xA;class DevSettings(CommonSettings):&#xA;    &amp;#34;&amp;#34;&amp;#34;Settings for dev&amp;#34;&amp;#34;&amp;#34;&#xA;    env: Literal[&amp;#34;dev&amp;#34;]&#xA;&#xA;&#xA;class ProdSettings(CommonSettings):&#xA;    &amp;#34;&amp;#34;&amp;#34;Settings for prod&amp;#34;&amp;#34;&amp;#34;&#xA;    env: Literal[&amp;#34;prod&amp;#34;]&#xA;&#xA;&#xA;class Settings(pydantic.BaseSettings):&#xA;    &amp;#34;&amp;#34;&amp;#34;Settings for all environments&amp;#34;&amp;#34;&amp;#34;&#xA;    __root__: Annotated[Union[DevSettings, ProdSettings], Field(discriminator=&amp;#34;env&amp;#34;)]&#xA;&#xA;    class Config:&#xA;        env_prefix = &amp;#34;APP_&amp;#34;&#xA;&#xA;&#xA;&#xA;# Create our settings&#xA;settings = Settings(__root__={&amp;#34;env&amp;#34;: &amp;#34;dev&amp;#34;}).__root__&#xA;# or&#xA;settings = Settings.parse_obj({&amp;#34;env&amp;#34;: &amp;#34;dev&amp;#34;}).__root__&#xA;print(settings)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-{.console&#34;&gt;DevSettings(debug=False, secret_key=&amp;#39;secret&amp;#39;, algorithm=&amp;#39;HS256&amp;#39;, access_token_expire_minutes=60, env=&amp;#39;dev&amp;#39;)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;singledispatch&#34;&gt;Singledispatch &lt;a href=&#34;#singledispatch&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now let’s create our &lt;code&gt;where_am_i&lt;/code&gt; function. We will use &lt;code&gt;functools.singledispatch&lt;/code&gt;&#xA;to provide a unique execution for each environment. It will leverage type&#xA;hints to provide a unique execution for each environment.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-{.python&#34;&gt;from functools import singledispatch&#xA;&#xA;@singledispatch&#xA;def where_am_i(obj):&#xA;   &amp;#39;&amp;#39;&amp;#39;&#xA;   Where am I?&#xA;   &amp;#39;&amp;#39;&amp;#39;&#xA;&#xA;@where_am_i.register&#xA;def dev(obj: DevSettings):&#xA;   &amp;#39;&amp;#39;&amp;#39;&#xA;   Where am I?&#xA;   &amp;#39;&amp;#39;&amp;#39;&#xA;   print(&amp;#39;I am in dev&amp;#39;)&#xA;&#xA;@where_am_i.register&#xA;def prod(obj: ProdSettings):&#xA;   &amp;#39;&amp;#39;&amp;#39;&#xA;   Where am I?&#xA;   &amp;#39;&amp;#39;&amp;#39;&#xA;   print(&amp;#39;I am in prod&amp;#39;)&#xA;&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-{.console&#34;&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;output&#34;&gt;Output &lt;a href=&#34;#output&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let’s call our eample function &lt;code&gt;where_am_i&lt;/code&gt; with our settings and see the&#xA;results.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-{.python&#34;&gt;where_am_i(settings)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;results in&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-{.console&#34;&gt;I am in dev&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Let’s check prod&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-{.python&#34;&gt;where_am_i(Settings.parse_obj({&amp;#39;env&amp;#39;: &amp;#39;prod&amp;#39;}).__root__)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;results in&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-{.console&#34;&gt;I am in prod&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;environment-variables&#34;&gt;Environment Variables &lt;a href=&#34;#environment-variables&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;So far one down side to the TaggedUnion technique is that I am unable to pull&#xA;env from environment variables. I’m sure there is a way around this with a&#xA;different model design. Maybe following exactly what Giddeon did.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-{.python&#34;&gt;os.environ.clear()&#xA;os.environ[&amp;#39;APP_ENV&amp;#39;] = &amp;#39;prod&amp;#39;&#xA;where_am_i(Settings().__root__)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;results in&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;ValidationError: 1 validation error for Settings&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;__root__&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;  field required (type=value_error.missing)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;go&#34;&gt;&amp;lt;darkmark.darkmark.DarkMark object at 0x7fcc58bec5d0&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;fin&#34;&gt;FIN &lt;a href=&#34;#fin&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’m really digging pydantic lately and excited to get it built into&#xA;&lt;a href=&#34;https://markata.dev/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/markata.dev.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/markata.dev.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;markata&lt;/a&gt;. Not 100% sure if I have a&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ sinaptik-ai pandas-ai</title>
    <id>https://waylonwalker.com/sinaptik-ai-pandas-ai/</id>
    <updated>2023-05-01T11:27:47Z</updated>
    <published>2023-05-01T11:27:47Z</published>
    <link href="https://waylonwalker.com/sinaptik-ai-pandas-ai/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by pandas-ai from sinaptik-ai.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/sinaptik-ai/pandas-ai&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pandas-ai&lt;/a&gt; from &lt;a href=&#34;https://github.com/sinaptik-ai&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sinaptik-ai&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Chat with your database or your datalake (SQL, CSV, parquet). PandasAI makes data analysis conversational using LLMs and RAG.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Textualize frogmouth</title>
    <id>https://waylonwalker.com/textualize-frogmouth/</id>
    <updated>2023-04-30T14:13:07Z</updated>
    <published>2023-04-30T14:13:07Z</published>
    <link href="https://waylonwalker.com/textualize-frogmouth/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on frogmouth, created by Textualize.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/Textualize/frogmouth&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;frogmouth&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/Textualize&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Textualize&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A Markdown browser for your terminal&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ dfee forge</title>
    <id>https://waylonwalker.com/dfee-forge/</id>
    <updated>2023-04-27T17:43:29Z</updated>
    <published>2023-04-27T17:43:29Z</published>
    <link href="https://waylonwalker.com/dfee-forge/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out forge by dfee. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/dfee/forge&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;forge&lt;/a&gt; by &lt;a href=&#34;https://github.com/dfee&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dfee&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;forge (python signatures) for fun and profit&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Slackadays Clipboard</title>
    <id>https://waylonwalker.com/slackadays-clipboard/</id>
    <updated>2023-04-18T11:22:08Z</updated>
    <published>2023-04-18T11:22:08Z</published>
    <link href="https://waylonwalker.com/slackadays-clipboard/" rel="alternate" type="text/html"></link>
    <summary type="text">I like Slackadays&#39;s project Clipboard.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/Slackadays&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Slackadays’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/Slackadays/Clipboard&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Clipboard&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;😎🏖️🐬 Your new, 𝙧𝙞𝙙𝙤𝙣𝙠𝙪𝙡𝙞𝙘𝙞𝙤𝙪𝙨𝙡𝙮 smart clipboard manager&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ madox2 vim-ai</title>
    <id>https://waylonwalker.com/madox2-vim-ai/</id>
    <updated>2023-04-12T03:05:22Z</updated>
    <published>2023-04-12T03:05:22Z</published>
    <link href="https://waylonwalker.com/madox2-vim-ai/" rel="alternate" type="text/html"></link>
    <summary type="text">I like madox2&#39;s project vim-ai.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/madox2&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;madox2’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/madox2/vim-ai&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vim-ai&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;AI-powered code assistant for Vim. OpenAI and ChatGPT plugin for Vim and Neovim.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ TabbyML tabby</title>
    <id>https://waylonwalker.com/tabbyml-tabby/</id>
    <updated>2023-04-11T12:32:30Z</updated>
    <published>2023-04-11T12:32:30Z</published>
    <link href="https://waylonwalker.com/tabbyml-tabby/" rel="alternate" type="text/html"></link>
    <summary type="text">tabby by TabbyML is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/TabbyML/tabby&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tabby&lt;/a&gt; by &lt;a href=&#34;https://github.com/TabbyML&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;TabbyML&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/self-host/&#34; class=&#34;glossary-term&#34; title=&#34;Self hosting is the act of hosting your own applications and services without using a SAS provider. This is typically done with your own hardware, but there...&#34;&gt;Self-hosted&lt;/a&gt; AI coding assistant&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ biobootloader wolverine</title>
    <id>https://waylonwalker.com/biobootloader-wolverine/</id>
    <updated>2023-04-10T21:05:08Z</updated>
    <published>2023-04-10T21:05:08Z</published>
    <link href="https://waylonwalker.com/biobootloader-wolverine/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on wolverine, created by biobootloader.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/biobootloader/wolverine&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;wolverine&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/biobootloader&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;biobootloader&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ chroma-core chroma</title>
    <id>https://waylonwalker.com/chroma-core-chroma/</id>
    <updated>2023-04-09T19:13:09Z</updated>
    <published>2023-04-09T19:13:09Z</published>
    <link href="https://waylonwalker.com/chroma-core-chroma/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by chroma from chroma-core.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/chroma-core/chroma&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;chroma&lt;/a&gt; from &lt;a href=&#34;https://github.com/chroma-core&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;chroma-core&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;the AI-native open-source embedding database&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ langchain-ai langchain</title>
    <id>https://waylonwalker.com/langchain-ai-langchain/</id>
    <updated>2023-04-09T19:12:59Z</updated>
    <published>2023-04-09T19:12:59Z</published>
    <link href="https://waylonwalker.com/langchain-ai-langchain/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? langchain by langchain-ai.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/langchain-ai/langchain&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;langchain&lt;/a&gt; by &lt;a href=&#34;https://github.com/langchain-ai&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;langchain-ai&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;🦜🔗 Build context-aware reasoning applications&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ lm-sys FastChat</title>
    <id>https://waylonwalker.com/lm-sys-fastchat/</id>
    <updated>2023-04-04T12:31:56Z</updated>
    <published>2023-04-04T12:31:56Z</published>
    <link href="https://waylonwalker.com/lm-sys-fastchat/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out lm-sys and their project FastChat.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/lm-sys&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lm-sys&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/lm-sys/FastChat&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;FastChat&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;An open platform for training, serving, and evaluating large language models. Release repo for Vicuna and Chatbot Arena.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ trash-panda-v91-beta hatch-aws</title>
    <id>https://waylonwalker.com/trash-panda-v91-beta-hatch-aws/</id>
    <updated>2023-03-21T01:33:44Z</updated>
    <published>2023-03-21T01:33:44Z</published>
    <link href="https://waylonwalker.com/trash-panda-v91-beta-hatch-aws/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across hatch-aws from trash-panda-v91-beta, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/trash-panda-v91-beta/hatch-aws&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;hatch-aws&lt;/a&gt; from &lt;a href=&#34;https://github.com/trash-panda-v91-beta&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;trash-panda-v91-beta&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;Hatch plugin for building AWS Lambda functions with SAM&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ aka-raccoon hatch-aws</title>
    <id>https://waylonwalker.com/aka-raccoon-hatch-aws/</id>
    <updated>2023-03-21T01:33:44Z</updated>
    <published>2023-03-21T01:33:44Z</published>
    <link href="https://waylonwalker.com/aka-raccoon-hatch-aws/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by hatch-aws from aka-raccoon.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/aka-raccoon/hatch-aws&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;hatch-aws&lt;/a&gt; from &lt;a href=&#34;https://github.com/aka-raccoon&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;aka-raccoon&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Hatch plugin for building AWS Lambda functions with SAM&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ jupyterlab hatch-jupyter-builder</title>
    <id>https://waylonwalker.com/jupyterlab-hatch-jupyter-builder/</id>
    <updated>2023-03-21T01:33:41Z</updated>
    <published>2023-03-21T01:33:41Z</published>
    <link href="https://waylonwalker.com/jupyterlab-hatch-jupyter-builder/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? hatch-jupyter-builder by jupyterlab.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/jupyterlab/hatch-jupyter-builder&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;hatch-jupyter-builder&lt;/a&gt; by &lt;a href=&#34;https://github.com/jupyterlab&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jupyterlab&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A hatch plugin to help build Jupyter packages&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tweag topiary</title>
    <id>https://waylonwalker.com/tweag-topiary/</id>
    <updated>2023-03-13T13:20:36Z</updated>
    <published>2023-03-13T13:20:36Z</published>
    <link href="https://waylonwalker.com/tweag-topiary/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out topiary by tweag. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/tweag/topiary&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;topiary&lt;/a&gt; by &lt;a href=&#34;https://github.com/tweag&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tweag&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ topiary topiary</title>
    <id>https://waylonwalker.com/topiary-topiary/</id>
    <updated>2023-03-13T13:20:36Z</updated>
    <published>2023-03-13T13:20:36Z</published>
    <link href="https://waylonwalker.com/topiary-topiary/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out topiary by topiary. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/topiary/topiary&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;topiary&lt;/a&gt; by &lt;a href=&#34;https://github.com/topiary&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;topiary&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ AckslD nvim-FeMaco.lua</title>
    <id>https://waylonwalker.com/acksld-nvim-femaco-lua/</id>
    <updated>2023-03-08T17:00:11Z</updated>
    <published>2023-03-08T17:00:11Z</published>
    <link href="https://waylonwalker.com/acksld-nvim-femaco-lua/" rel="alternate" type="text/html"></link>
    <summary type="text">nvim-FeMaco.lua by AckslD is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/AckslD/nvim-FeMaco.lua&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-FeMaco.lua&lt;/a&gt; by &lt;a href=&#34;https://github.com/AckslD&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;AckslD&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;Catalyze your Fenced Markdown Code-block editing!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ggml-org whisper.cpp</title>
    <id>https://waylonwalker.com/ggml-org-whisper-cpp/</id>
    <updated>2023-03-07T21:38:57Z</updated>
    <published>2023-03-07T21:38:57Z</published>
    <link href="https://waylonwalker.com/ggml-org-whisper-cpp/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out whisper.cpp by ggml-org. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/ggml-org/whisper.cpp&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;whisper.cpp&lt;/a&gt; by &lt;a href=&#34;https://github.com/ggml-org&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ggml-org&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;Port of OpenAI’s Whisper model in C/C++&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ggerganov whisper.cpp</title>
    <id>https://waylonwalker.com/ggerganov-whisper-cpp/</id>
    <updated>2023-03-07T21:38:57Z</updated>
    <published>2023-03-07T21:38:57Z</published>
    <link href="https://waylonwalker.com/ggerganov-whisper-cpp/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by whisper.cpp from ggerganov.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/ggerganov/whisper.cpp&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;whisper.cpp&lt;/a&gt; from &lt;a href=&#34;https://github.com/ggerganov&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ggerganov&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Port of OpenAI’s Whisper model in C/C++&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Fabulously-Optimized fabulously-optimized</title>
    <id>https://waylonwalker.com/fabulously-optimized-fabulously-optimized/</id>
    <updated>2023-03-07T14:27:13Z</updated>
    <published>2023-03-07T14:27:13Z</published>
    <link href="https://waylonwalker.com/fabulously-optimized-fabulously-optimized/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out fabulously-optimized by Fabulously-Optimized. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/Fabulously-Optimized/fabulously-optimized&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fabulously-optimized&lt;/a&gt; by &lt;a href=&#34;https://github.com/Fabulously-Optimized&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Fabulously-Optimized&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;A simple Minecraft modpack focusing on performance and graphics enhancements.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ FlashyReese reeses-sodium-options</title>
    <id>https://waylonwalker.com/flashyreese-reeses-sodium-options/</id>
    <updated>2023-03-07T02:46:47Z</updated>
    <published>2023-03-07T02:46:47Z</published>
    <link href="https://waylonwalker.com/flashyreese-reeses-sodium-options/" rel="alternate" type="text/html"></link>
    <summary type="text">reeses-sodium-options by FlashyReese is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/FlashyReese/reeses-sodium-options&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;reeses-sodium-options&lt;/a&gt; by &lt;a href=&#34;https://github.com/FlashyReese&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;FlashyReese&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;Replaces Sodium’s Options Screen&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tom-doerr chatgpt_commit_message_hook</title>
    <id>https://waylonwalker.com/tom-doerr-chatgpt_commit_message_hook/</id>
    <updated>2023-03-03T23:13:48Z</updated>
    <published>2023-03-03T23:13:48Z</published>
    <link href="https://waylonwalker.com/tom-doerr-chatgpt_commit_message_hook/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? chatgpt_message_hook by tom-doerr.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/tom-doerr/chatgpt_commit_message_hook&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;chatgpt_commit_message_hook&lt;/a&gt; by &lt;a href=&#34;https://github.com/tom-doerr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tom-doerr&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Enhance your &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; workflow using AI-generated commit messages from ChatGPT. Seamless integration for a well-documented commit log.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ LazyVim LazyVim</title>
    <id>https://waylonwalker.com/lazyvim-lazyvim/</id>
    <updated>2023-02-28T14:50:24Z</updated>
    <published>2023-02-28T14:50:24Z</published>
    <link href="https://waylonwalker.com/lazyvim-lazyvim/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on LazyVim by LazyVim.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/LazyVim/LazyVim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;LazyVim&lt;/a&gt; by &lt;a href=&#34;https://github.com/LazyVim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;LazyVim&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Neovim config for the lazy&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Oxen-AI oxen-release</title>
    <id>https://waylonwalker.com/oxen-ai-oxen-release/</id>
    <updated>2023-02-21T15:04:54Z</updated>
    <published>2023-02-21T15:04:54Z</published>
    <link href="https://waylonwalker.com/oxen-ai-oxen-release/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on oxen-release, created by Oxen-AI.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/Oxen-AI/oxen-release&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;oxen-release&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/Oxen-AI&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Oxen-AI&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Lightning fast data version control system for structured and unstructured machine learning datasets. We aim to make versioning datasets as easy as versioning code.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Oxen-AI Oxen</title>
    <id>https://waylonwalker.com/oxen-ai-oxen/</id>
    <updated>2023-02-21T15:04:54Z</updated>
    <published>2023-02-21T15:04:54Z</published>
    <link href="https://waylonwalker.com/oxen-ai-oxen/" rel="alternate" type="text/html"></link>
    <summary type="text">Oxen by Oxen-AI is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/Oxen-AI/Oxen&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Oxen&lt;/a&gt; by &lt;a href=&#34;https://github.com/Oxen-AI&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Oxen-AI&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;Lightning fast data version control system for structured and unstructured machine learning datasets. We aim to make versioning datasets as easy as versioning code.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Kanaries pygwalker</title>
    <id>https://waylonwalker.com/kanaries-pygwalker/</id>
    <updated>2023-02-21T15:03:05Z</updated>
    <published>2023-02-21T15:03:05Z</published>
    <link href="https://waylonwalker.com/kanaries-pygwalker/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out Kanaries and their project pygwalker.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/Kanaries&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Kanaries&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/Kanaries/pygwalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pygwalker&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;PyGWalker: Turn your pandas dataframe into an interactive UI for visual analysis&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Kanaries graphic-walker</title>
    <id>https://waylonwalker.com/kanaries-graphic-walker/</id>
    <updated>2023-02-21T15:03:03Z</updated>
    <published>2023-02-21T15:03:03Z</published>
    <link href="https://waylonwalker.com/kanaries-graphic-walker/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out Kanaries and their project graphic-walker.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/Kanaries&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Kanaries&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/Kanaries/graphic-walker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;graphic-walker&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;An open source alternative to Tableau. Embeddable visual analytic&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ellwise kedro-light</title>
    <id>https://waylonwalker.com/ellwise-kedro-light/</id>
    <updated>2023-02-20T16:10:09Z</updated>
    <published>2023-02-20T16:10:09Z</published>
    <link href="https://waylonwalker.com/ellwise-kedro-light/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on kedro-light by ellwise.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/ellwise/kedro-light&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-light&lt;/a&gt; by &lt;a href=&#34;https://github.com/ellwise&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ellwise&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ wemake-services flake8-eradicate</title>
    <id>https://waylonwalker.com/wemake-services-flake8-eradicate/</id>
    <updated>2023-02-15T20:02:53Z</updated>
    <published>2023-02-15T20:02:53Z</published>
    <link href="https://waylonwalker.com/wemake-services-flake8-eradicate/" rel="alternate" type="text/html"></link>
    <summary type="text">flake8-eradicate by wemake-services is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/wemake-services/flake8-eradicate&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;flake8-eradicate&lt;/a&gt; by &lt;a href=&#34;https://github.com/wemake-services&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;wemake-services&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;Flake8 plugin to find commented out or dead code&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tamton-aquib flirt.nvim</title>
    <id>https://waylonwalker.com/tamton-aquib-flirt-nvim/</id>
    <updated>2023-02-13T17:33:07Z</updated>
    <published>2023-02-13T17:33:07Z</published>
    <link href="https://waylonwalker.com/tamton-aquib-flirt-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">tamton-aquib has done a fantastic job with flirt.nvim. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/tamton-aquib&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tamton-aquib&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/tamton-aquib/flirt.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;flirt.nvim&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;A neovim plugin to work with floating windows.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ mrparoxysms my-blog</title>
    <id>https://waylonwalker.com/mrparoxysms-my-blog/</id>
    <updated>2023-02-12T22:26:06Z</updated>
    <published>2023-02-12T22:26:06Z</published>
    <link href="https://waylonwalker.com/mrparoxysms-my-blog/" rel="alternate" type="text/html"></link>
    <summary type="text">I like mrparoxysms&#39;s project my-blog.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/mrparoxysms&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mrparoxysms’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/mrparoxysms/my-blog&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;my-blog&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ uutils coreutils</title>
    <id>https://waylonwalker.com/uutils-coreutils/</id>
    <updated>2023-02-12T16:37:12Z</updated>
    <published>2023-02-12T16:37:12Z</published>
    <link href="https://waylonwalker.com/uutils-coreutils/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered coreutils by uutils, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/uutils/coreutils&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;coreutils&lt;/a&gt; by &lt;a href=&#34;https://github.com/uutils&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;uutils&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;Cross-platform Rust rewrite of the GNU coreutils&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pytest-dev pytest</title>
    <id>https://waylonwalker.com/pytest-dev-pytest/</id>
    <updated>2023-02-11T15:02:48Z</updated>
    <published>2023-02-11T15:02:48Z</published>
    <link href="https://waylonwalker.com/pytest-dev-pytest/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on pytest by pytest-dev.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/pytest-dev/pytest&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pytest&lt;/a&gt; by &lt;a href=&#34;https://github.com/pytest-dev&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pytest-dev&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The pytest framework makes it easy to write small tests, yet scales to support complex functional testing&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ GnikDroy projections.nvim</title>
    <id>https://waylonwalker.com/gnikdroy-projections-nvim/</id>
    <updated>2023-02-11T03:21:15Z</updated>
    <published>2023-02-11T03:21:15Z</published>
    <link href="https://waylonwalker.com/gnikdroy-projections-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? projections.nvim by GnikDroy.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/GnikDroy/projections.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;projections.nvim&lt;/a&gt; by &lt;a href=&#34;https://github.com/GnikDroy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;GnikDroy&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A map to your filesystem&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ reflex-dev reflex</title>
    <id>https://waylonwalker.com/reflex-dev-reflex/</id>
    <updated>2023-02-09T14:07:47Z</updated>
    <published>2023-02-09T14:07:47Z</published>
    <link href="https://waylonwalker.com/reflex-dev-reflex/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across reflex from reflex-dev, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/reflex-dev/reflex&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;reflex&lt;/a&gt; from &lt;a href=&#34;https://github.com/reflex-dev&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;reflex-dev&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;🕸️ Web apps in pure Python 🐍&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pypa bandersnatch</title>
    <id>https://waylonwalker.com/pypa-bandersnatch/</id>
    <updated>2023-02-07T14:49:46Z</updated>
    <published>2023-02-07T14:49:46Z</published>
    <link href="https://waylonwalker.com/pypa-bandersnatch/" rel="alternate" type="text/html"></link>
    <summary type="text">pypa has done a fantastic job with bandersnatch. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/pypa&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pypa&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/pypa/bandersnatch&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;bandersnatch&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;A PyPI mirror client according to PEP 381 &lt;a href=&#34;http://www.python.org/dev/peps/pep-0381/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.python.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.python.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;http://www.python.org/dev/peps/pep-0381/&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pypa hatch</title>
    <id>https://waylonwalker.com/pypa-hatch/</id>
    <updated>2023-02-07T14:47:39Z</updated>
    <published>2023-02-07T14:47:39Z</published>
    <link href="https://waylonwalker.com/pypa-hatch/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on hatch, created by pypa.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/pypa/hatch&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;hatch&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/pypa&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pypa&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Modern, extensible Python project management&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ facebookincubator Bowler</title>
    <id>https://waylonwalker.com/facebookincubator-bowler/</id>
    <updated>2023-02-06T15:57:12Z</updated>
    <published>2023-02-06T15:57:12Z</published>
    <link href="https://waylonwalker.com/facebookincubator-bowler/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out Bowler by facebookincubator. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/facebookincubator/Bowler&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Bowler&lt;/a&gt; by &lt;a href=&#34;https://github.com/facebookincubator&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;facebookincubator&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;Safe code refactoring for modern Python.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ WaylonWalker lockhart</title>
    <id>https://waylonwalker.com/waylonwalker-lockhart/</id>
    <updated>2023-02-05T18:38:31Z</updated>
    <published>2023-02-05T18:38:31Z</published>
    <link href="https://waylonwalker.com/waylonwalker-lockhart/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out WaylonWalker and their project lockhart.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/WaylonWalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;WaylonWalker&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/WaylonWalker/lockhart&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lockhart&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Lockhart is an AI-powered Python library that generates elegant and efficient code, much like the charming and deceiving wizard Gilderoy Lockhart. It allows developers to effortlessly create impressive code and deceive others with their skills, just as Gilderoy Lockhart deceives others with his charm and wizardry.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ gmpetrov openai-chatgpt</title>
    <id>https://waylonwalker.com/gmpetrov-openai-chatgpt/</id>
    <updated>2023-02-05T01:30:57Z</updated>
    <published>2023-02-05T01:30:57Z</published>
    <link href="https://waylonwalker.com/gmpetrov-openai-chatgpt/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out openai-chatgpt by gmpetrov. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/gmpetrov/openai-chatgpt&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;openai-chatgpt&lt;/a&gt; by &lt;a href=&#34;https://github.com/gmpetrov&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gmpetrov&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;🤖 Use ChatGPT from the terminal&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ astral-sh ruff</title>
    <id>https://waylonwalker.com/astral-sh-ruff/</id>
    <updated>2023-02-02T17:09:18Z</updated>
    <published>2023-02-02T17:09:18Z</published>
    <link href="https://waylonwalker.com/astral-sh-ruff/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on ruff by astral-sh.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/astral-sh/ruff&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ruff&lt;/a&gt; by &lt;a href=&#34;https://github.com/astral-sh&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;astral-sh&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;An extremely fast Python linter and code formatter, written in Rust.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ karpathy nanoGPT</title>
    <id>https://waylonwalker.com/karpathy-nanogpt/</id>
    <updated>2023-02-01T03:50:43Z</updated>
    <published>2023-02-01T03:50:43Z</published>
    <link href="https://waylonwalker.com/karpathy-nanogpt/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across nanoGPT from karpathy, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/karpathy/nanoGPT&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nanoGPT&lt;/a&gt; from &lt;a href=&#34;https://github.com/karpathy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;karpathy&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;The simplest, fastest repository for training/finetuning medium-sized GPTs.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ fathyb carbonyl</title>
    <id>https://waylonwalker.com/fathyb-carbonyl/</id>
    <updated>2023-01-30T16:05:05Z</updated>
    <published>2023-01-30T16:05:05Z</published>
    <link href="https://waylonwalker.com/fathyb-carbonyl/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? carbonyl by fathyb.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/fathyb/carbonyl&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;carbonyl&lt;/a&gt; by &lt;a href=&#34;https://github.com/fathyb&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fathyb&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Chromium running inside your terminal&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ PabloLec RecoverPy</title>
    <id>https://waylonwalker.com/pablolec-recoverpy/</id>
    <updated>2023-01-28T01:51:32Z</updated>
    <published>2023-01-28T01:51:32Z</published>
    <link href="https://waylonwalker.com/pablolec-recoverpy/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on RecoverPy, created by PabloLec.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/PabloLec/RecoverPy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;RecoverPy&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/PabloLec&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;PabloLec&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Interactively find and recover deleted or 👉 overwritten 👈 files from your terminal&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ selectel pyte</title>
    <id>https://waylonwalker.com/selectel-pyte/</id>
    <updated>2023-01-28T01:46:41Z</updated>
    <published>2023-01-28T01:46:41Z</published>
    <link href="https://waylonwalker.com/selectel-pyte/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by pyte from selectel.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/selectel/pyte&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pyte&lt;/a&gt; from &lt;a href=&#34;https://github.com/selectel&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;selectel&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Simple VTXXX-compatible linux terminal emulator&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ mitosch textual-terminal</title>
    <id>https://waylonwalker.com/mitosch-textual-terminal/</id>
    <updated>2023-01-28T01:45:45Z</updated>
    <published>2023-01-28T01:45:45Z</published>
    <link href="https://waylonwalker.com/mitosch-textual-terminal/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out mitosch and their project textual-terminal.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/mitosch&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mitosch&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/mitosch/textual-terminal&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;textual-terminal&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A terminal emulator widget for Textual.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pedrovhb typescope</title>
    <id>https://waylonwalker.com/pedrovhb-typescope/</id>
    <updated>2023-01-28T01:42:36Z</updated>
    <published>2023-01-28T01:42:36Z</published>
    <link href="https://waylonwalker.com/pedrovhb-typescope/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred typescope by pedrovhb. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/pedrovhb/typescope&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;typescope&lt;/a&gt; by &lt;a href=&#34;https://github.com/pedrovhb&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pedrovhb&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;A nicer terminal view for your Python type analysis needs.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ darrenburns textual-autocomplete</title>
    <id>https://waylonwalker.com/darrenburns-textual-autocomplete/</id>
    <updated>2023-01-27T16:16:59Z</updated>
    <published>2023-01-27T16:16:59Z</published>
    <link href="https://waylonwalker.com/darrenburns-textual-autocomplete/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across textual-autocomplete from darrenburns, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/darrenburns/textual-autocomplete&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;textual-autocomplete&lt;/a&gt; from &lt;a href=&#34;https://github.com/darrenburns&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;darrenburns&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;Easily add autocomplete dropdowns to your Textual apps&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ syrupy-project syrupy</title>
    <id>https://waylonwalker.com/syrupy-project-syrupy/</id>
    <updated>2023-01-27T16:10:44Z</updated>
    <published>2023-01-27T16:10:44Z</published>
    <link href="https://waylonwalker.com/syrupy-project-syrupy/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on syrupy, created by syrupy-project.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/syrupy-project/syrupy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;syrupy&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/syrupy-project&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;syrupy-project&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;🥞 The sweeter pytest snapshot plugin&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ initialcommit-com git-sim</title>
    <id>https://waylonwalker.com/initialcommit-com-git-sim/</id>
    <updated>2023-01-23T17:18:41Z</updated>
    <published>2023-01-23T17:18:41Z</published>
    <link href="https://waylonwalker.com/initialcommit-com-git-sim/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out git-sim by initialcommit-com. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/initialcommit-com/git-sim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;git-sim&lt;/a&gt; by &lt;a href=&#34;https://github.com/initialcommit-com&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;initialcommit-com&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;Visually simulate &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;Git&lt;/a&gt; operations in your own repos with a single terminal command.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Releasing a New Version of Your Python Package Just Got Easier</title>
    <id>https://waylonwalker.com/gh-release/</id>
    <updated>2023-01-23T10:52:19Z</updated>
    <published>2023-01-23T10:52:19Z</published>
    <link href="https://waylonwalker.com/gh-release/" rel="alternate" type="text/html"></link>
    <summary type="text">Quickly and easily create new versions of your Python package with the command. Get the version number, changelog, and</summary>
    <content type="html">&lt;p&gt;Quickly and easily create new versions of your Python package with the &lt;code&gt;gh release&lt;/code&gt;&#xA;command. Get the version number, changelog, and&lt;/p&gt;&#xA;&lt;p&gt;Releasing a new version of your Python package can be a daunting task. You need to make&#xA;sure that all the necessary files are included, and that the version number is correct.&#xA;But now, with the help of the &lt;code&gt;gh release&lt;/code&gt; command, you can make the process much&#xA;smoother.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;gh release&lt;/code&gt; command allows you to quickly and easily create a new version of your&#xA;Python package. All you need to do is provide the version number, the changelog, and the&#xA;distribution files. For example, if you wanted to create a new version of your package&#xA;with the version number &lt;code&gt;v1.2.3&lt;/code&gt;, you could use the following command:&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gh release create v1.2.3 -F CHANGELOG.md dist/*.whl dist/*.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This command will create a new version of your package with the specified version number,&#xA;and include the changelog and the distribution files. It’s a great way to make sure that&#xA;all the necessary files are included in the release, and that the version number is&#xA;correct.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;gh release&lt;/code&gt; command is a great tool for quickly and easily creating new versions of&#xA;your Python package. With just a few simple commands, you can make sure that all the&#xA;necessary files are included, and that the version number is correct. So if you’re looking&#xA;for an easy way to release a new version of your Python package, give the &lt;code&gt;gh release&lt;/code&gt;&#xA;command a try.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Arch Linux Randomly Rejecting Passwords</title>
    <id>https://waylonwalker.com/arch-rejects-password/</id>
    <updated>2023-01-19T07:46:31Z</updated>
    <published>2023-01-19T07:46:31Z</published>
    <link href="https://waylonwalker.com/arch-rejects-password/" rel="alternate" type="text/html"></link>
    <summary type="text">Fix Arch Linux randomly rejecting passwords with one command. Try &gt; &#39;faillock --user $USER&#39; to reset login counter and regain access. Quick &gt; solution for a...</summary>
    <content type="html">&lt;blockquote&gt;&#xA;&lt;p&gt;Fix Arch Linux randomly rejecting passwords with one command. Try&#xA;‘faillock –user $USER’ to reset login counter and regain access. Quick&#xA;solution for a smooth computing&amp;#34;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000255.3612717469.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000255.3612717469.webp&#34; alt=&#34;an intertwined mess of wires&#34;/ data-glightbox=&#34;description: an intertwined mess of wires&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;If you’re an Arch Linux user, you may have experienced a frustrating issue&#xA;where your password is randomly not being accepted by the system. This can be a&#xA;major inconvenience and can cause a lot of frustration, especially if it&#xA;happens frequently.&lt;/p&gt;&#xA;&lt;p&gt;The good news is that there is a simple fix for this issue. The following bash&#xA;code can be used to fix the problem:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;bash faillock --user $USER&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;This command is used to reset the failed login count for the current user. By&#xA;running this command, you will be able to reset the system’s login counter and&#xA;regain access to your account.&lt;/p&gt;&#xA;&lt;p&gt;It’s important to note that this command should only be used as a temporary&#xA;solution. If you find yourself frequently having to run this command, it’s&#xA;likely that there is a deeper issue with your system that needs to be&#xA;addressed.&lt;/p&gt;&#xA;&lt;p&gt;In any case, if you’re experiencing problems with your Arch Linux system not&#xA;accepting your password, give the above command a try and see if it resolves&#xA;the issue for you.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ darrenburns rich-pixels</title>
    <id>https://waylonwalker.com/darrenburns-rich-pixels/</id>
    <updated>2023-01-19T01:20:58Z</updated>
    <published>2023-01-19T01:20:58Z</published>
    <link href="https://waylonwalker.com/darrenburns-rich-pixels/" rel="alternate" type="text/html"></link>
    <summary type="text">I like darrenburns&#39;s project rich-pixels.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/darrenburns&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;darrenburns’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/darrenburns/rich-pixels&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rich-pixels&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A Rich-compatible library for writing pixel images and ASCII art to the terminal.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ PyCQA eradicate</title>
    <id>https://waylonwalker.com/pycqa-eradicate/</id>
    <updated>2023-01-18T01:34:23Z</updated>
    <published>2023-01-18T01:34:23Z</published>
    <link href="https://waylonwalker.com/pycqa-eradicate/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered eradicate by PyCQA, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/PyCQA/eradicate&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;eradicate&lt;/a&gt; by &lt;a href=&#34;https://github.com/PyCQA&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;PyCQA&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;Removes commented-out code from Python files&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ jay-babu mason-nvim-dap.nvim</title>
    <id>https://waylonwalker.com/jay-babu-mason-nvim-dap-nvim/</id>
    <updated>2023-01-16T14:16:53Z</updated>
    <published>2023-01-16T14:16:53Z</published>
    <link href="https://waylonwalker.com/jay-babu-mason-nvim-dap-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across mason-nvim-dap.nvim from jay-babu, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/jay-babu/mason-nvim-dap.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mason-nvim-dap.nvim&lt;/a&gt; from &lt;a href=&#34;https://github.com/jay-babu&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jay-babu&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pypa pipx</title>
    <id>https://waylonwalker.com/pypa-pipx/</id>
    <updated>2023-01-16T13:51:26Z</updated>
    <published>2023-01-16T13:51:26Z</published>
    <link href="https://waylonwalker.com/pypa-pipx/" rel="alternate" type="text/html"></link>
    <summary type="text">pypa has done a fantastic job with pipx. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/pypa&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pypa&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/pypa/pipx&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pipx&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Install and Run Python Applications in Isolated Environments&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ sickcodes Docker-OSX</title>
    <id>https://waylonwalker.com/sickcodes-docker-osx/</id>
    <updated>2023-01-16T13:42:19Z</updated>
    <published>2023-01-16T13:42:19Z</published>
    <link href="https://waylonwalker.com/sickcodes-docker-osx/" rel="alternate" type="text/html"></link>
    <summary type="text">I like sickcodes&#39;s project Docker-OSX.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/sickcodes&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sickcodes’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/sickcodes/Docker-OSX&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Docker-OSX&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Run macOS VM in a Docker! Run near native OSX-KVM in Docker! X11 Forwarding! CI/CD for OS X Security Research! Docker mac Containers.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ bloomberg memray</title>
    <id>https://waylonwalker.com/bloomberg-memray/</id>
    <updated>2023-01-16T13:40:33Z</updated>
    <published>2023-01-16T13:40:33Z</published>
    <link href="https://waylonwalker.com/bloomberg-memray/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by memray from bloomberg.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/bloomberg/memray&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;memray&lt;/a&gt; from &lt;a href=&#34;https://github.com/bloomberg&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;bloomberg&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Memray is a memory profiler for Python&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ artempyanykh marksman</title>
    <id>https://waylonwalker.com/artempyanykh-marksman/</id>
    <updated>2023-01-15T15:07:46Z</updated>
    <published>2023-01-15T15:07:46Z</published>
    <link href="https://waylonwalker.com/artempyanykh-marksman/" rel="alternate" type="text/html"></link>
    <summary type="text">I like artempyanykh&#39;s project marksman.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/artempyanykh&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;artempyanykh’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/artempyanykh/marksman&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;marksman&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Write Markdown with code assist and intelligence in the comfort of your favourite editor.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nedbat cog</title>
    <id>https://waylonwalker.com/nedbat-cog/</id>
    <updated>2022-12-27T22:51:31Z</updated>
    <published>2022-12-27T22:51:31Z</published>
    <link href="https://waylonwalker.com/nedbat-cog/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out cog by nedbat. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/nedbat/cog&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cog&lt;/a&gt; by &lt;a href=&#34;https://github.com/nedbat&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nedbat&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;Small bits of Python computation for static files&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ hynek hatch-fancy-pypi-readme</title>
    <id>https://waylonwalker.com/hynek-hatch-fancy-pypi-readme/</id>
    <updated>2022-12-23T16:12:13Z</updated>
    <published>2022-12-23T16:12:13Z</published>
    <link href="https://waylonwalker.com/hynek-hatch-fancy-pypi-readme/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on hatch-fancy-pypi-readme, created by hynek.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/hynek/hatch-fancy-pypi-readme&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;hatch-fancy-pypi-readme&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/hynek&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;hynek&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Fancy PyPI READMEs with Hatch&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Minecraft Doc Day 18</title>
    <id>https://waylonwalker.com/shots/mcdoc-day-18/</id>
    <updated>2022-12-22T13:38:54Z</updated>
    <published>2022-12-22T13:38:54Z</published>
    <link href="https://waylonwalker.com/shots/mcdoc-day-18/" rel="alternate" type="text/html"></link>
    <summary type="text">A crows nest added atop the storage silo offers a high lookout.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/2435ba65-066b-468e-aaed-05a1bc3fbaf8.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/2435ba65-066b-468e-aaed-05a1bc3fbaf8.webp&#34; alt=&#34;Minecraft Doc Day 18&#34;/ data-glightbox=&#34;description: Minecraft Doc Day 18&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A crows nest added atop the storage silo offers a high lookout.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ terrastruct d2</title>
    <id>https://waylonwalker.com/terrastruct-d2/</id>
    <updated>2022-12-21T15:56:47Z</updated>
    <published>2022-12-21T15:56:47Z</published>
    <link href="https://waylonwalker.com/terrastruct-d2/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about d2, an amazing project by terrastruct. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/terrastruct/d2&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;d2&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/terrastruct&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;terrastruct&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;D2 is a modern diagram scripting language that turns text to diagrams.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ danymat neogen</title>
    <id>https://waylonwalker.com/danymat-neogen/</id>
    <updated>2022-12-21T15:54:20Z</updated>
    <published>2022-12-21T15:54:20Z</published>
    <link href="https://waylonwalker.com/danymat-neogen/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across neogen from danymat, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/danymat/neogen&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;neogen&lt;/a&gt; from &lt;a href=&#34;https://github.com/danymat&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;danymat&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;A better annotation generator. Supports multiple languages and annotation conventions.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nvim-lua kickstart.nvim</title>
    <id>https://waylonwalker.com/nvim-lua-kickstart-nvim/</id>
    <updated>2022-12-21T15:53:03Z</updated>
    <published>2022-12-21T15:53:03Z</published>
    <link href="https://waylonwalker.com/nvim-lua-kickstart-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? kickstart.nvim by nvim-lua.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/nvim-lua/kickstart.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kickstart.nvim&lt;/a&gt; by &lt;a href=&#34;https://github.com/nvim-lua&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-lua&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A launch point for your personal nvim configuration&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ThePrimeagen init.lua</title>
    <id>https://waylonwalker.com/theprimeagen-init-lua/</id>
    <updated>2022-12-21T15:53:02Z</updated>
    <published>2022-12-21T15:53:02Z</published>
    <link href="https://waylonwalker.com/theprimeagen-init-lua/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out init.lua by ThePrimeagen. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/ThePrimeagen/init.lua&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;init.lua&lt;/a&gt; by &lt;a href=&#34;https://github.com/ThePrimeagen&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ThePrimeagen&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ williamboman mason.nvim</title>
    <id>https://waylonwalker.com/williamboman-mason-nvim/</id>
    <updated>2022-12-21T15:53:01Z</updated>
    <published>2022-12-21T15:53:01Z</published>
    <link href="https://waylonwalker.com/williamboman-mason-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about mason.nvim, an amazing project by williamboman. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/williamboman/mason.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mason.nvim&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/williamboman&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;williamboman&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Portable package manager for Neovim that runs everywhere Neovim runs. Easily install and manage LSP servers, DAP servers, linters, and formatters.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ mason-org mason.nvim</title>
    <id>https://waylonwalker.com/mason-org-mason-nvim/</id>
    <updated>2022-12-21T15:53:01Z</updated>
    <published>2022-12-21T15:53:01Z</published>
    <link href="https://waylonwalker.com/mason-org-mason-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across mason.nvim from mason-org, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/mason-org/mason.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mason.nvim&lt;/a&gt; from &lt;a href=&#34;https://github.com/mason-org&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mason-org&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;Portable package manager for Neovim that runs everywhere Neovim runs. Easily install and manage LSP servers, DAP servers, linters, and formatters.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Minecraft Doc Day 17</title>
    <id>https://waylonwalker.com/shots/mcdoc-day-17/</id>
    <updated>2022-12-21T13:38:54Z</updated>
    <published>2022-12-21T13:38:54Z</published>
    <link href="https://waylonwalker.com/shots/mcdoc-day-17/" rel="alternate" type="text/html"></link>
    <summary type="text">Construction of a floating base begins on Day 16.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/bb760cbf-dac4-43bd-a76a-e8043ee9808d.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/bb760cbf-dac4-43bd-a76a-e8043ee9808d.webp&#34; alt=&#34;Minecraft Doc Day 17&#34;/ data-glightbox=&#34;description: Minecraft Doc Day 17&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Construction of a floating base begins on Day 16.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Minecraft Doc Day 12</title>
    <id>https://waylonwalker.com/shots/mcdoc-day-12b/</id>
    <updated>2022-12-20T13:38:54Z</updated>
    <published>2022-12-20T13:38:54Z</published>
    <link href="https://waylonwalker.com/shots/mcdoc-day-12b/" rel="alternate" type="text/html"></link>
    <summary type="text">Farm animals gathered and penned on Day 12.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/418b606d-0062-469f-9382-ef301c3f3c38.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/418b606d-0062-469f-9382-ef301c3f3c38.webp&#34; alt=&#34;Minecraft Doc Day 12&#34;/ data-glightbox=&#34;description: Minecraft Doc Day 12&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Farm animals gathered and penned on Day 12.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Minecraft Doc Day 12</title>
    <id>https://waylonwalker.com/shots/mcdoc-day-12/</id>
    <updated>2022-12-19T13:38:54Z</updated>
    <published>2022-12-19T13:38:54Z</published>
    <link href="https://waylonwalker.com/shots/mcdoc-day-12/" rel="alternate" type="text/html"></link>
    <summary type="text">Beet and pumpkin farm plots prepared near the main base.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/e3bb0427-4665-4888-88d0-34e7953ec5c1.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/e3bb0427-4665-4888-88d0-34e7953ec5c1.webp&#34; alt=&#34;Minecraft Doc Day 12&#34;/ data-glightbox=&#34;description: Minecraft Doc Day 12&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Beet and pumpkin farm plots prepared near the main base.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Minecraft Doc Day 11</title>
    <id>https://waylonwalker.com/shots/mcdoc-day-11b/</id>
    <updated>2022-12-18T13:38:54Z</updated>
    <published>2022-12-18T13:38:54Z</published>
    <link href="https://waylonwalker.com/shots/mcdoc-day-11b/" rel="alternate" type="text/html"></link>
    <summary type="text">Standing on Wyatt’s freshly built dock overlooking the water.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/2f420e32-8951-4d52-a758-f7a7ed1d0d07.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/2f420e32-8951-4d52-a758-f7a7ed1d0d07.webp&#34; alt=&#34;Minecraft Doc Day 11&#34;/ data-glightbox=&#34;description: Minecraft Doc Day 11&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Standing on Wyatt’s freshly built dock overlooking the water.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Minecraft Doc Day 11</title>
    <id>https://waylonwalker.com/shots/mcdoc-day-11/</id>
    <updated>2022-12-17T13:38:54Z</updated>
    <published>2022-12-17T13:38:54Z</published>
    <link href="https://waylonwalker.com/shots/mcdoc-day-11/" rel="alternate" type="text/html"></link>
    <summary type="text">Wyatt joins to conquer a zombie spawner and build a dock together.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/f78cf44b-3446-40b0-9f4c-01cae8d6fb2d.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/f78cf44b-3446-40b0-9f4c-01cae8d6fb2d.webp&#34; alt=&#34;Minecraft Doc Day 11&#34;/ data-glightbox=&#34;description: Minecraft Doc Day 11&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Wyatt joins to conquer a zombie spawner and build a dock together.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ sbidoul hatch-pip-deepfreeze</title>
    <id>https://waylonwalker.com/sbidoul-hatch-pip-deepfreeze/</id>
    <updated>2022-12-16T15:21:23Z</updated>
    <published>2022-12-16T15:21:23Z</published>
    <link href="https://waylonwalker.com/sbidoul-hatch-pip-deepfreeze/" rel="alternate" type="text/html"></link>
    <summary type="text">I like sbidoul&#39;s project hatch-pip-deepfreeze.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/sbidoul&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sbidoul’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/sbidoul/hatch-pip-deepfreeze&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;hatch-pip-deepfreeze&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A hatch &lt;a href=&#34;/virtual-environment/&#34; class=&#34;glossary-term&#34; title=&#34;Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...&#34;&gt;virtual environment&lt;/a&gt; plugin to lock dependencies with pip-deepfreeze&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Minecraft Doc Day 10</title>
    <id>https://waylonwalker.com/shots/mcdoc-day-10/</id>
    <updated>2022-12-16T13:38:54Z</updated>
    <published>2022-12-16T13:38:54Z</published>
    <link href="https://waylonwalker.com/shots/mcdoc-day-10/" rel="alternate" type="text/html"></link>
    <summary type="text">Secret storage area built as part of a tiny base challenge on Day 9.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/5fe458fa-1f6c-4445-95a0-a61e2302e2b8.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/5fe458fa-1f6c-4445-95a0-a61e2302e2b8.webp&#34; alt=&#34;Minecraft Doc Day 10&#34;/ data-glightbox=&#34;description: Minecraft Doc Day 10&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Secret storage area built as part of a tiny base challenge on Day 9.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Minecraft Doc Day 9</title>
    <id>https://waylonwalker.com/shots/mcdoc-day-9/</id>
    <updated>2022-12-15T13:38:54Z</updated>
    <published>2022-12-15T13:38:54Z</published>
    <link href="https://waylonwalker.com/shots/mcdoc-day-9/" rel="alternate" type="text/html"></link>
    <summary type="text">Early storage silo construction begins with terraforming and chest placement.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/869dfbcf-85e6-4e17-aa2c-f031af6cac55.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/869dfbcf-85e6-4e17-aa2c-f031af6cac55.webp&#34; alt=&#34;Minecraft Doc Day 9&#34;/ data-glightbox=&#34;description: Minecraft Doc Day 9&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Early storage silo construction begins with terraforming and chest placement.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Minecraft Doc Day 8</title>
    <id>https://waylonwalker.com/shots/mcdoc-day-8/</id>
    <updated>2022-12-14T13:38:54Z</updated>
    <published>2022-12-14T13:38:54Z</published>
    <link href="https://waylonwalker.com/shots/mcdoc-day-8/" rel="alternate" type="text/html"></link>
    <summary type="text">After leaving the world paused, a surprise death screen leads to a survival reset.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/51b9ef6c-f921-4b5d-984d-92f4ab7982d2.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/51b9ef6c-f921-4b5d-984d-92f4ab7982d2.webp&#34; alt=&#34;Minecraft Doc Day 8&#34;/ data-glightbox=&#34;description: Minecraft Doc Day 8&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;After leaving the world paused, a surprise death screen leads to a survival reset.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Minecraft Doc Day 7</title>
    <id>https://waylonwalker.com/shots/mcdoc-day-7/</id>
    <updated>2022-12-13T13:38:54Z</updated>
    <published>2022-12-13T13:38:54Z</published>
    <link href="https://waylonwalker.com/shots/mcdoc-day-7/" rel="alternate" type="text/html"></link>
    <summary type="text">A newly constructed animal pen expands the farm.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/0ca36932-2233-423c-8081-7abfa369f0ff.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/0ca36932-2233-423c-8081-7abfa369f0ff.webp&#34; alt=&#34;Minecraft Doc Day 7&#34;/ data-glightbox=&#34;description: Minecraft Doc Day 7&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A newly constructed animal pen expands the farm.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Minecraft Doc Day 6</title>
    <id>https://waylonwalker.com/shots/mcdoc-day-6/</id>
    <updated>2022-12-12T13:38:54Z</updated>
    <published>2022-12-12T13:38:54Z</published>
    <link href="https://waylonwalker.com/shots/mcdoc-day-6/" rel="alternate" type="text/html"></link>
    <summary type="text">End of Day 5 shows the finished perimeter fence and first animal pen.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/64607f0d-d323-419f-99cd-e16d03e7faf5.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/64607f0d-d323-419f-99cd-e16d03e7faf5.webp&#34; alt=&#34;Minecraft Doc Day 6&#34;/ data-glightbox=&#34;description: Minecraft Doc Day 6&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;End of Day 5 shows the finished perimeter fence and first animal pen.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Minecraft Doc Day 5</title>
    <id>https://waylonwalker.com/shots/mcdoc-day-5/</id>
    <updated>2022-12-11T13:38:54Z</updated>
    <published>2022-12-11T13:38:54Z</published>
    <link href="https://waylonwalker.com/shots/mcdoc-day-5/" rel="alternate" type="text/html"></link>
    <summary type="text">Start of Day 5 with work on the perimeter fence and gathering resources.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/a74de8ef-8194-4a85-ac99-82c05d8274f0.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/a74de8ef-8194-4a85-ac99-82c05d8274f0.webp&#34; alt=&#34;Minecraft Doc Day 5&#34;/ data-glightbox=&#34;description: Minecraft Doc Day 5&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Start of Day 5 with work on the perimeter fence and gathering resources.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ yazgoo vmux</title>
    <id>https://waylonwalker.com/yazgoo-vmux/</id>
    <updated>2022-12-10T23:20:32Z</updated>
    <published>2022-12-10T23:20:32Z</published>
    <link href="https://waylonwalker.com/yazgoo-vmux/" rel="alternate" type="text/html"></link>
    <summary type="text">yazgoo has done a fantastic job with vmux. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/yazgoo&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;yazgoo&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/yazgoo/vmux&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vmux&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;helper for multiplexing terminals with vim/neovim&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Minecraft Doc Day 4</title>
    <id>https://waylonwalker.com/shots/mcdoc-day-4/</id>
    <updated>2022-12-10T13:38:54Z</updated>
    <published>2022-12-10T13:38:54Z</published>
    <link href="https://waylonwalker.com/shots/mcdoc-day-4/" rel="alternate" type="text/html"></link>
    <summary type="text">Outer perimeter fence under construction around the base during Day 4.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/3db77e67-5ff9-4718-a6fa-524e1902173a.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/3db77e67-5ff9-4718-a6fa-524e1902173a.webp&#34; alt=&#34;Minecraft Doc Day 4&#34;/ data-glightbox=&#34;description: Minecraft Doc Day 4&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Outer perimeter fence under construction around the base during Day 4.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Minecraft Doc Day 3</title>
    <id>https://waylonwalker.com/shots/mcdoc-day-3/</id>
    <updated>2022-12-09T13:38:54Z</updated>
    <published>2022-12-09T13:38:54Z</published>
    <link href="https://waylonwalker.com/shots/mcdoc-day-3/" rel="alternate" type="text/html"></link>
    <summary type="text">The roofline of the base is complete and the tree farm is cleared for fresh oak and acacia saplings.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/4e330854-f14e-437e-9ab6-cd24871083a7.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/4e330854-f14e-437e-9ab6-cd24871083a7.webp&#34; alt=&#34;Minecraft Doc Day 3&#34;/ data-glightbox=&#34;description: Minecraft Doc Day 3&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The roofline of the base is complete and the tree farm is cleared for fresh oak and acacia saplings.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Minecraft Doc Day 2</title>
    <id>https://waylonwalker.com/shots/mcdoc-day-2/</id>
    <updated>2022-12-08T13:38:54Z</updated>
    <published>2022-12-08T13:38:54Z</published>
    <link href="https://waylonwalker.com/shots/mcdoc-day-2/" rel="alternate" type="text/html"></link>
    <summary type="text">Sun setting over the fresh house frame as Day 2 brings sand collection for windows.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/2f362381-04df-4f74-a7f7-aa18707fc2be.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/2f362381-04df-4f74-a7f7-aa18707fc2be.webp&#34; alt=&#34;Minecraft Doc Day 2&#34;/ data-glightbox=&#34;description: Minecraft Doc Day 2&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Sun setting over the fresh house frame as Day 2 brings sand collection for windows.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Minecraft Doc Day 1</title>
    <id>https://waylonwalker.com/shots/mcdoc-day-1/</id>
    <updated>2022-12-07T13:38:54Z</updated>
    <published>2022-12-07T13:38:54Z</published>
    <link href="https://waylonwalker.com/shots/mcdoc-day-1/" rel="alternate" type="text/html"></link>
    <summary type="text">The wooden frame of the new house begins to take shape on Day 1.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/2e442dcd-43ea-41e2-849a-82d55a5fb1a7.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/2e442dcd-43ea-41e2-849a-82d55a5fb1a7.webp&#34; alt=&#34;Minecraft Doc Day 1&#34;/ data-glightbox=&#34;description: Minecraft Doc Day 1&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The wooden frame of the new house begins to take shape on Day 1.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>dash e your github docker actions</title>
    <id>https://waylonwalker.com/fail-ci-scripts/</id>
    <updated>2022-12-07T13:09:37Z</updated>
    <published>2022-12-07T13:09:37Z</published>
    <link href="https://waylonwalker.com/fail-ci-scripts/" rel="alternate" type="text/html"></link>
    <summary type="text">Give github actions the -e flag in the shebang so they fail on any one command failure. Otherwise each line will set the exit status, but only the last one...</summary>
    <content type="html">&lt;p&gt;Give github actions the -e flag in the shebang &lt;code&gt;#!&lt;/code&gt; so they fail on any one&#xA;command failure. Otherwise each line will set the exit status, but only the&#xA;last one will be passed to ci.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/bash -e&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;what-is--e&#34;&gt;What is -e &lt;a href=&#34;#what-is--e&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The -e flag to the bash command allows your script to exit immediately if any&#xA;command within the script returns a non-zero exit status. This can be useful&#xA;for ensuring that your script exits with an error if any of the commands it&#xA;runs fail, which can help you identify and debug issues in your script. For&#xA;example, if you have a script that runs several commands and one of those&#xA;commands fails, the script will continue running without the -e flag, but will&#xA;exit immediately if the -e flag is present. This can make it easier to&#xA;troubleshoot your script and ensure that it runs correctly.&lt;/p&gt;&#xA;&lt;h2 id=&#34;solution-for-windows&#34;&gt;Solution for Windows &lt;a href=&#34;#solution-for-windows&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;In windows the solution is not quite as simple. You can define a function in a&#xA;Windows batch script that wraps an if statement to check the exit status of a&#xA;command and handle any errors that may have occurred. Here is an example of how&#xA;you might define a function called “check_error” that does this:&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;check_error&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;errorlevel&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; An error occurred!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;exit&lt;/span&gt; /b 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To use this function in your script, you would simply call it after running a&#xA;command, like this:&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;some_command&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;call&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;check_error&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This would run the “some_command” and then call the “check_error” function to&#xA;check the exit status and handle any errors that may have occurred. This&#xA;approach allows you to reuse the error-checking logic in your script, which can&#xA;make it easier to write and maintain.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Minecraft Doc Day 0</title>
    <id>https://waylonwalker.com/shots/minecraft-doc-day-0/</id>
    <updated>2022-12-06T13:38:54Z</updated>
    <published>2022-12-06T13:38:54Z</published>
    <link href="https://waylonwalker.com/shots/minecraft-doc-day-0/" rel="alternate" type="text/html"></link>
    <summary type="text">Acacia biome spawn with trees and resources in a new hardcore world.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/3753e4ed-378b-46d6-9784-7c89da81ce1a.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/3753e4ed-378b-46d6-9784-7c89da81ce1a.webp&#34; alt=&#34;Minecraft Doc Day 0&#34;/ data-glightbox=&#34;description: Minecraft Doc Day 0&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Acacia biome spawn with trees and resources in a new hardcore world.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>minecraft documentary</title>
    <id>https://waylonwalker.com/minecraft-documentary/</id>
    <updated>2022-12-06T13:38:54Z</updated>
    <published>2022-12-06T13:38:54Z</published>
    <link href="https://waylonwalker.com/minecraft-documentary/" rel="alternate" type="text/html"></link>
    <summary type="text">This is my first time journaling a Minecraft hardcore world, my son Wyatt is also documenting his journey in a survival world on wyattbubbylee.com.</summary>
    <content type="html">&lt;p&gt;This is my first time journaling a Minecraft hardcore world, my son Wyatt is&#xA;also documenting his journey in a survival world on&#xA;&lt;a href=&#34;https://www.wyattbubbylee.com/&#34;&gt;wyattbubbylee.com&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;day-0&#34;&gt;Day 0 &lt;a href=&#34;#day-0&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;init&lt;/em&gt;&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/3753e4ed-378b-46d6-9784-7c89da81ce1a.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/3753e4ed-378b-46d6-9784-7c89da81ce1a.webp&#34; alt=&#34;minecraft-doc-day-0.webp&#34;/ data-glightbox=&#34;description: minecraft-doc-day-0.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;I logged into a brand new hardcore world. I was welcomed by a great Acacia&#xA;biome spawn full of resources. I quickly cut my first tree, crafted an axe and&#xA;set out to find my first sheep. I was able to find enough sheep for a bed,&#xA;several cows and pigs.&lt;/p&gt;&#xA;&lt;p&gt;I crafted a set of wooden tools, and farmed out a wheat farm till my wooden&#xA;hoed died at the shore of a nearby stream. I found a small stone outcropping&#xA;in the side of a hill and harvested nearly a full stack of cobblestone from my&#xA;first wooden pick.&lt;/p&gt;&#xA;&lt;p&gt;I ended the first day by sleeping in my bed safe from mobs.&lt;/p&gt;&#xA;&lt;h3 id=&#34;achievements&#34;&gt;Achievements &lt;a href=&#34;#achievements&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;bed&lt;/li&gt;&#xA;&lt;li&gt;furnace&lt;/li&gt;&#xA;&lt;li&gt;stone&lt;/li&gt;&#xA;&lt;li&gt;wheat farm&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;day-1&#34;&gt;Day 1 &lt;a href=&#34;#day-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/2e442dcd-43ea-41e2-849a-82d55a5fb1a7.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/2e442dcd-43ea-41e2-849a-82d55a5fb1a7.webp&#34; alt=&#34;mcdoc-day-1.webp&#34;/ data-glightbox=&#34;description: mcdoc-day-1.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Thoughout the course of day one I collected wood and started the framework for&#xA;my new house.&lt;/p&gt;&#xA;&lt;h2 id=&#34;day-2&#34;&gt;Day 2 &lt;a href=&#34;#day-2&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/2f362381-04df-4f74-a7f7-aa18707fc2be.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/2f362381-04df-4f74-a7f7-aa18707fc2be.webp&#34; alt=&#34;mcdoc-day-2.webp&#34;/ data-glightbox=&#34;description: mcdoc-day-2.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The sun sets over the new frame of my house on Day 1&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Day two continued the framework of the house, and a bit of sand collection for&#xA;windows. I was a bit late to bed and saw four mobs spawn on the journeymap&#xA;before I made it in.&lt;/p&gt;&#xA;&lt;h2 id=&#34;day-3&#34;&gt;Day 3 &lt;a href=&#34;#day-3&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/4e330854-f14e-437e-9ab6-cd24871083a7.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/4e330854-f14e-437e-9ab6-cd24871083a7.webp&#34; alt=&#34;mcdoc-day-3.webp&#34;/ data-glightbox=&#34;description: mcdoc-day-3.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;end of day 2&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;On day three I completed the roofline of the base, gathered some wood, and&#xA;cleared out all the grass in the tree farm. The tree farm has a fresh planting&#xA;of oak and acacia trees in it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;day-4&#34;&gt;Day 4 &lt;a href=&#34;#day-4&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Thoughout day 4 I kept farming trees and creating my first outter perimeter&#xA;fence made of oak.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/3db77e67-5ff9-4718-a6fa-524e1902173a.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/3db77e67-5ff9-4718-a6fa-524e1902173a.webp&#34; alt=&#34;mcdoc-day-4.webp&#34;/ data-glightbox=&#34;description: mcdoc-day-4.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;end of day 3&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;day-5&#34;&gt;Day 5 &lt;a href=&#34;#day-5&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/a74de8ef-8194-4a85-ac99-82c05d8274f0.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/a74de8ef-8194-4a85-ac99-82c05d8274f0.webp&#34; alt=&#34;mcdoc-day-5.webp&#34;/ data-glightbox=&#34;description: mcdoc-day-5.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;start of of day 5&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;On day 5 I completed the perimeter fence and worked on my first animal pen.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/64607f0d-d323-419f-99cd-e16d03e7faf5.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/64607f0d-d323-419f-99cd-e16d03e7faf5.webp&#34; alt=&#34;mcdoc-day-6.webp&#34;/ data-glightbox=&#34;description: mcdoc-day-6.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;End of Day 5&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;day-6&#34;&gt;Day 6 &lt;a href=&#34;#day-6&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I completed another animal pen.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/0ca36932-2233-423c-8081-7abfa369f0ff.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/0ca36932-2233-423c-8081-7abfa369f0ff.webp&#34; alt=&#34;mcdoc-day-7.webp&#34;/ data-glightbox=&#34;description: mcdoc-day-7.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;a new animal pen from day 6&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;day-7&#34;&gt;Day 7 &lt;a href=&#34;#day-7&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;On day 7 I left the game paused and went to some meetings, I came back to a&#xA;death screen 😥. I am not going out this way, I opened to lan with cheats and&#xA;reset my gamemode to survival.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/51b9ef6c-f921-4b5d-984d-92f4ab7982d2.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/51b9ef6c-f921-4b5d-984d-92f4ab7982d2.webp&#34; alt=&#34;mcdoc-day-8.webp&#34;/ data-glightbox=&#34;description: mcdoc-day-8.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;day-8&#34;&gt;Day 8 &lt;a href=&#34;#day-8&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I started a storage silo by doing some terraforming and placing down the first&#xA;chests.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/869dfbcf-85e6-4e17-aa2c-f031af6cac55.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/869dfbcf-85e6-4e17-aa2c-f031af6cac55.webp&#34; alt=&#34;mcdoc-day-9.webp&#34;/ data-glightbox=&#34;description: mcdoc-day-9.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;day-9&#34;&gt;Day 9 &lt;a href=&#34;#day-9&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;On Day 9 I started a challenge from Wyatt to create a tiny base. I chose to&#xA;make a secret storage area in the storage silo.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/5fe458fa-1f6c-4445-95a0-a61e2302e2b8.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/5fe458fa-1f6c-4445-95a0-a61e2302e2b8.webp&#34; alt=&#34;mcdoc-day-10.webp&#34;/ data-glightbox=&#34;description: mcdoc-day-10.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;day-10&#34;&gt;Day 10 &lt;a href=&#34;#day-10&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;On day 10 Wyatt joined me, he built a dock and I found a zombie spawner.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/f78cf44b-3446-40b0-9f4c-01cae8d6fb2d.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/f78cf44b-3446-40b0-9f4c-01cae8d6fb2d.webp&#34; alt=&#34;mcdoc-day-11.webp&#34;/ data-glightbox=&#34;description: mcdoc-day-11.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;We conquered the Zombie Spawner&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/2f420e32-8951-4d52-a758-f7a7ed1d0d07.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/2f420e32-8951-4d52-a758-f7a7ed1d0d07.webp&#34; alt=&#34;mcdoc-day-11b.webp&#34;/ data-glightbox=&#34;description: mcdoc-day-11b.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Standing on Wyatt’s new dock&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;day-11&#34;&gt;Day 11 &lt;a href=&#34;#day-11&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Wyatt planted some beets, and made space for pumpkins.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/e3bb0427-4665-4888-88d0-34e7953ec5c1.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/e3bb0427-4665-4888-88d0-34e7953ec5c1.webp&#34; alt=&#34;mcdoc-day-12.webp&#34;/ data-glightbox=&#34;description: mcdoc-day-12.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;day-12&#34;&gt;Day 12 &lt;a href=&#34;#day-12&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;On day 12 we gathered up some farm animals.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/418b606d-0062-469f-9382-ef301c3f3c38.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/418b606d-0062-469f-9382-ef301c3f3c38.webp&#34; alt=&#34;mcdoc-day-12b.webp&#34;/ data-glightbox=&#34;description: mcdoc-day-12b.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;day-13-15&#34;&gt;Day 13-15 &lt;a href=&#34;#day-13-15&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Wyatt and I went spelunking in the caves for iron.&lt;/p&gt;&#xA;&lt;h2 id=&#34;day-16&#34;&gt;Day 16 &lt;a href=&#34;#day-16&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Wyatt started his floating base&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/bb760cbf-dac4-43bd-a76a-e8043ee9808d.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/bb760cbf-dac4-43bd-a76a-e8043ee9808d.webp&#34; alt=&#34;mcdoc-day-17.webp&#34;/ data-glightbox=&#34;description: mcdoc-day-17.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;day-17&#34;&gt;Day 17 &lt;a href=&#34;#day-17&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;On Day 18 I created the crows nest on top of the storage silo.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/2435ba65-066b-468e-aaed-05a1bc3fbaf8.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/2435ba65-066b-468e-aaed-05a1bc3fbaf8.webp&#34; alt=&#34;mcdoc-day-18.webp&#34;/ data-glightbox=&#34;description: mcdoc-day-18.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ libfuse sshfs</title>
    <id>https://waylonwalker.com/libfuse-sshfs/</id>
    <updated>2022-12-05T15:57:09Z</updated>
    <published>2022-12-05T15:57:09Z</published>
    <link href="https://waylonwalker.com/libfuse-sshfs/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? sshfs by libfuse.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/libfuse/sshfs&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sshfs&lt;/a&gt; by &lt;a href=&#34;https://github.com/libfuse&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;libfuse&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A network filesystem client to connect to SSH servers&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>ssh copy id</title>
    <id>https://waylonwalker.com/ssh-copy-id/</id>
    <updated>2022-12-04T20:10:05Z</updated>
    <published>2022-12-04T20:10:05Z</published>
    <link href="https://waylonwalker.com/ssh-copy-id/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently setup some vm&#39;s on my main machine and got sick of signing in with passwords.</summary>
    <content type="html">&lt;p&gt;I recently setup some vm’s on my main machine and got sick of signing in with&#xA;passwords.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh-keygen&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh-copy-id -i ~/.ssh/id_rsa.pub virt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux push/pull panes</title>
    <id>https://waylonwalker.com/tmux-push-pull-panes/</id>
    <updated>2022-12-04T13:25:54Z</updated>
    <published>2022-12-04T13:25:54Z</published>
    <link href="https://waylonwalker.com/tmux-push-pull-panes/" rel="alternate" type="text/html"></link>
    <summary type="text">Moving panes between tmux sessions is something that makes tmux a very flexible and powerful tool. I don&#39;t need this feature very often, but it comes in...</summary>
    <content type="html">&lt;p&gt;Moving panes between tmux sessions is something that makes tmux a very flexible&#xA;and powerful tool.  I don’t need this feature very often, but it comes in&#xA;clutch when you need it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;pull-a-pane-from-any-other-session&#34;&gt;Pull a pane from any other session &lt;a href=&#34;#pull-a-pane-from-any-other-session&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Using &lt;code&gt;choose-window&lt;/code&gt; I was able to come up with a way to select any pane&#xA;withing any other session and join it into my current session.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Choose a pane to join in horizontally&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; f choose-window -Z &lt;span class=&#34;s1&#34;&gt;&amp;#39;join-pane -h -s &amp;#34;%%&amp;#34;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;pushpull-from-scratch&#34;&gt;Push/Pull from scratch &lt;a href=&#34;#pushpull-from-scratch&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’ve long had this one in my tmux config, I always have a “scratch” session&#xA;that I’m running, I often use for looking at things like &lt;code&gt;k9s&lt;/code&gt; accross repos&#xA;within a popup.&lt;/p&gt;&#xA;&lt;p&gt;This use case puts a pane into the scratch session, then pulls it back out.  I&#xA;will use this to move a pane between sessions in the rare cases I need to do&#xA;this.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# push the active pane into the scratch session horizonally&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-f join-pane -ht scratch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# pull the last active pane from the scratch session horizonally into this session&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-F join-pane -hs scratch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ joehillen sysz</title>
    <id>https://waylonwalker.com/joehillen-sysz/</id>
    <updated>2022-12-03T17:37:11Z</updated>
    <published>2022-12-03T17:37:11Z</published>
    <link href="https://waylonwalker.com/joehillen-sysz/" rel="alternate" type="text/html"></link>
    <summary type="text">joehillen has done a fantastic job with sysz. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/joehillen&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;joehillen&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/joehillen/sysz&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sysz&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;An fzf  terminal UI for systemctl&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ eth-p bat-extras</title>
    <id>https://waylonwalker.com/eth-p-bat-extras/</id>
    <updated>2022-12-03T17:37:06Z</updated>
    <published>2022-12-03T17:37:06Z</published>
    <link href="https://waylonwalker.com/eth-p-bat-extras/" rel="alternate" type="text/html"></link>
    <summary type="text">I like eth-p&#39;s project bat-extras.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/eth-p&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;eth-p’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/eth-p/bat-extras&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;bat-extras&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Bash scripts that integrate bat with various command line tools.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ cdown clipmenu</title>
    <id>https://waylonwalker.com/cdown-clipmenu/</id>
    <updated>2022-12-03T17:36:57Z</updated>
    <published>2022-12-03T17:36:57Z</published>
    <link href="https://waylonwalker.com/cdown-clipmenu/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred clipmenu by cdown. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/cdown/clipmenu&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;clipmenu&lt;/a&gt; by &lt;a href=&#34;https://github.com/cdown&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cdown&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;Clipboard management using dmenu&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ qw3rtty neix</title>
    <id>https://waylonwalker.com/qw3rtty-neix/</id>
    <updated>2022-11-30T15:10:21Z</updated>
    <published>2022-11-30T15:10:21Z</published>
    <link href="https://waylonwalker.com/qw3rtty-neix/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by neix from qw3rtty.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/qw3rtty/neix&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;neix&lt;/a&gt; from &lt;a href=&#34;https://github.com/qw3rtty&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;qw3rtty&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;neix - a RSS/Atom feed reader for your terminal.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ rwhitt2049 df-viewer-poc</title>
    <id>https://waylonwalker.com/rwhitt2049-df-viewer-poc/</id>
    <updated>2022-11-29T15:51:46Z</updated>
    <published>2022-11-29T15:51:46Z</published>
    <link href="https://waylonwalker.com/rwhitt2049-df-viewer-poc/" rel="alternate" type="text/html"></link>
    <summary type="text">rwhitt2049 has done a fantastic job with df-viewer-poc. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/rwhitt2049&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rwhitt2049&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/rwhitt2049/df-viewer-poc&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;df-viewer-poc&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pypeaday ansible-vault-pre-commit</title>
    <id>https://waylonwalker.com/pypeaday-ansible-vault-pre-commit/</id>
    <updated>2022-11-29T15:50:54Z</updated>
    <published>2022-11-29T15:50:54Z</published>
    <link href="https://waylonwalker.com/pypeaday-ansible-vault-pre-commit/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on ansible-vault-pre-commit by pypeaday.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/pypeaday/ansible-vault-pre-commit&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ansible-vault-pre-commit&lt;/a&gt; by &lt;a href=&#34;https://github.com/pypeaday&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pypeaday&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;pre-commit hook to ensure sensitive info in a repo is encrypted with ansible-vault&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ cool-RR PySnooper</title>
    <id>https://waylonwalker.com/cool-rr-pysnooper/</id>
    <updated>2022-11-24T16:56:43Z</updated>
    <published>2022-11-24T16:56:43Z</published>
    <link href="https://waylonwalker.com/cool-rr-pysnooper/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on PySnooper by cool-RR.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/cool-RR/PySnooper&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;PySnooper&lt;/a&gt; by &lt;a href=&#34;https://github.com/cool-RR&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cool-RR&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Never use print for debugging again&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>ssh key permissions</title>
    <id>https://waylonwalker.com/ssh-key-permissions/</id>
    <updated>2022-11-22T16:16:38Z</updated>
    <published>2022-11-22T16:16:38Z</published>
    <link href="https://waylonwalker.com/ssh-key-permissions/" rel="alternate" type="text/html"></link>
    <summary type="text">I just shared some ssh keys with myself and ran into this error telling me that I did not set the correct permissions on my key.</summary>
    <content type="html">&lt;p&gt;I just shared some ssh keys with myself and ran into this error telling me that&#xA;I did not set the correct permissions on my key.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Permissions &lt;span class=&#34;m&#34;&gt;0750&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;/home/waylon/.ssh/id_*******&amp;#39;&lt;/span&gt; are too open.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;It is required that your private key files are NOT accessible by others.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;This private key will be ignored.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Load key &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/.ssh/id_*******&amp;#34;&lt;/span&gt;: bad Permissions&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;repo: Permission denied &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;publickey,gssapi-keyex,gssapi-with-mic&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fatal: Could not &lt;span class=&#34;nb&#34;&gt;read&lt;/span&gt; from remote repository.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Please make sure you have the correct access rights&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;and the repository exists.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I changed them with the following commands.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod &lt;span class=&#34;m&#34;&gt;644&lt;/span&gt; ~/.ssh/id_*******.pub&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod &lt;span class=&#34;m&#34;&gt;600&lt;/span&gt; ~/.ssh/id_*******&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Mr-Destructive djankata</title>
    <id>https://waylonwalker.com/mr-destructive-djankata/</id>
    <updated>2022-11-01T12:14:17Z</updated>
    <published>2022-11-01T12:14:17Z</published>
    <link href="https://waylonwalker.com/mr-destructive-djankata/" rel="alternate" type="text/html"></link>
    <summary type="text">Mr-Destructive has done a fantastic job with djankata. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/Mr-Destructive&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Mr-Destructive&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/Mr-Destructive/djankata&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;djankata&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Django + Markata blog starter&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Allaman nvim</title>
    <id>https://waylonwalker.com/allaman-nvim/</id>
    <updated>2022-10-30T18:22:19Z</updated>
    <published>2022-10-30T18:22:19Z</published>
    <link href="https://waylonwalker.com/allaman-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out nvim by Allaman. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/Allaman/nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim&lt;/a&gt; by &lt;a href=&#34;https://github.com/Allaman&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Allaman&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;Minimal, blazingly fast, and pure Lua based Neovim configuration for my work as DevOps/Cloud Engineer with batteries included for Python, Golang, and, of course, YAML&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ jessarcher dotfiles</title>
    <id>https://waylonwalker.com/jessarcher-dotfiles/</id>
    <updated>2022-10-29T19:59:10Z</updated>
    <published>2022-10-29T19:59:10Z</published>
    <link href="https://waylonwalker.com/jessarcher-dotfiles/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? dotfiles by jessarcher.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/jessarcher/dotfiles&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dotfiles&lt;/a&gt; by &lt;a href=&#34;https://github.com/jessarcher&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jessarcher&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;$HOME sweet $HOME&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>nvim navic</title>
    <id>https://waylonwalker.com/nvim-navic/</id>
    <updated>2022-10-27T20:13:20Z</updated>
    <published>2022-10-27T20:13:20Z</published>
    <link href="https://waylonwalker.com/nvim-navic/" rel="alternate" type="text/html"></link>
    <summary type="text">With the latest release of version of nvim 0.8.0 we get access to a new winbar feature. One thing I have long wanted somewhere in my nvim is navigation for...</summary>
    <content type="html">&lt;p&gt;With the latest release of version of nvim 0.8.0 we get access to a new winbar&#xA;feature.  One thing I have long wanted somewhere in my nvim is navigation for&#xA;pairing partners or anyone watching can keep track of where I am.  As the&#xA;driver it’s easy to keep track of the file/function you are in.  But when you&#xA;make big jumps in a few keystrokes it can be quite disorienting to anyone&#xA;watching, and having this feedback to look at is very helpful.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000362.2841371882.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000362.2841371882.webp&#34; alt=&#34;“cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C6.0 -Ak_lms -S2841371882&#34;/ data-glightbox=&#34;description: “cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C6.0 -Ak_lms -S2841371882&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;winbar&#34;&gt;winbar &lt;a href=&#34;#winbar&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;nvim exposes the winbar api in lua, and you can send any text to the winbar as follows.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;vim.o&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;winbar&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;here&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can try it for yourself right from the nvim command line.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;lua&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;vim&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;o&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;winbar&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;here&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now you will notice one line above your file with the word &lt;code&gt;here&lt;/code&gt; at the very&#xA;beginning.&lt;/p&gt;&#xA;&lt;h2 id=&#34;clearing-the-winbar&#34;&gt;Clearing the winbar &lt;a href=&#34;#clearing-the-winbar&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you want to clear it out, you can just set it to an empty string or &lt;code&gt;nil&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;lua&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;vim&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;o&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;winbar&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;lua&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;vim&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;o&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;winbar&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;setting-up-nvim-navic&#34;&gt;Setting up nvim-navic &lt;a href=&#34;#setting-up-nvim-navic&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You will need to install &lt;code&gt;nvim-navic&lt;/code&gt; if you want to use it.  I added it to my&#xA;plugins using Plug as follows.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;call&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;plug&lt;/span&gt;#&lt;span class=&#34;nx&#34;&gt;begin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;~/.local/share/nvim/plugged&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Plug&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;SmiteshP/nvim-navic&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;call&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;plug&lt;/span&gt;#&lt;span class=&#34;nx&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Note! &lt;code&gt;nvim-navic&lt;/code&gt; does require the use of the nvim lsp, so if you are not&#xA;using it then maybe this won’t work for you.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I created an &lt;code&gt;on_attach&lt;/code&gt; function long ago, cause that’s what Teej told me to&#xA;do.  Now I am glad I did, because it made this change super easy.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;on_attach&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;bufnr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;client.server_capabilities&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;documentSymbolProvider&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;navic.attach&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;bufnr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then you need to use that &lt;code&gt;on_attach&lt;/code&gt; function on all of the lsp’s that you&#xA;want navic to work on.&lt;/p&gt;&#xA;&lt;p&gt;Then in a lua file you need to setup the winbar, for now I put this in my&#xA;lsp-config settings file, but eventually I want to move my settings to lua and&#xA;put it there.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;vim.o&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;winbar&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34; %{%v:lua.vim.fn.expand(&amp;#39;%F&amp;#39;)%}  %{%v:lua.require&amp;#39;nvim-navic&amp;#39;.get_location()%}&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;what-my-winbar-looks-like&#34;&gt;What my winbar looks like &lt;a href=&#34;#what-my-winbar-looks-like&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;What I have right now is everything someone who is watching would need to know&#xA;to navigate to the same place that I am in the project.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; waylonwalker/app.py   Link &amp;gt;  on_click&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/d01f3307-6397-4fdf-a870-0165b331d186.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/d01f3307-6397-4fdf-a870-0165b331d186.webp&#34; alt=&#34;nvim-navic-example.webp&#34;/ data-glightbox=&#34;description: nvim-navic-example.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;diff&#34;&gt;Diff &lt;a href=&#34;#diff&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here are the changes that I made to to my plugins list and my lsp-config to get&#xA;it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; /home/u_walkews/.config/nvim/plugins.vim&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;call plug#begin(&amp;#39;~/.local/share/nvim/plugged&amp;#39;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+Plug &amp;#39;SmiteshP/nvim-navic&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#  /home/u_walkews/.config/nvim/lua/waylonwalker/lsp-config.lua&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-local function on_attach() end&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+local navic = require(&amp;#34;nvim-navic&amp;#34;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+local function on_attach(client, bufnr)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+    if client.server_capabilities.documentSymbolProvider then&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+        navic.attach(client, bufnr)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+    end&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+end&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+vim.o.winbar = &amp;#34; %{%v:lua.vim.fn.expand(&amp;#39;%F&amp;#39;)%}  %{%v:lua.require&amp;#39;nvim-navic&amp;#39;.get_location()%}&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;gh-commit&#34;&gt;GH commit &lt;a href=&#34;#gh-commit&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you want to see the change on GitHub, here is the&#xA;&lt;a href=&#34;https://github.com/WaylonWalker/devtainer/commit/62298a935d93a2cf21e1c965d323363bcbd22881&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;diff&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/WaylonWalker/devtainer/commit/62298a935d93a2cf21e1c965d323363bcbd22881&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/5efbd396-2716-49d3-833b-3004f1726afe.webp&#34; alt=&#34;nvim-navic-setup-gh-diff.webp&#34;/ data-glightbox=&#34;description: nvim-navic-setup-gh-diff.webp&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ SmiteshP nvim-navic</title>
    <id>https://waylonwalker.com/smiteshp-nvim-navic/</id>
    <updated>2022-10-26T15:56:33Z</updated>
    <published>2022-10-26T15:56:33Z</published>
    <link href="https://waylonwalker.com/smiteshp-nvim-navic/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred nvim-navic by SmiteshP. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/SmiteshP/nvim-navic&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-navic&lt;/a&gt; by &lt;a href=&#34;https://github.com/SmiteshP&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;SmiteshP&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;Simple winbar/statusline plugin that shows your current code context&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ fgheng winbar.nvim</title>
    <id>https://waylonwalker.com/fgheng-winbar-nvim/</id>
    <updated>2022-10-26T15:54:30Z</updated>
    <published>2022-10-26T15:54:30Z</published>
    <link href="https://waylonwalker.com/fgheng-winbar-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across winbar.nvim from fgheng, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/fgheng/winbar.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;winbar.nvim&lt;/a&gt; from &lt;a href=&#34;https://github.com/fgheng&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fgheng&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;winbar config for neovim&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ petertriho nvim-scrollbar</title>
    <id>https://waylonwalker.com/petertriho-nvim-scrollbar/</id>
    <updated>2022-10-26T15:53:31Z</updated>
    <published>2022-10-26T15:53:31Z</published>
    <link href="https://waylonwalker.com/petertriho-nvim-scrollbar/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? nvim-scrollbar by petertriho.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/petertriho/nvim-scrollbar&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-scrollbar&lt;/a&gt; by &lt;a href=&#34;https://github.com/petertriho&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;petertriho&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Extensible Neovim Scrollbar&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ kevinhwang91 nvim-hlslens</title>
    <id>https://waylonwalker.com/kevinhwang91-nvim-hlslens/</id>
    <updated>2022-10-26T15:53:27Z</updated>
    <published>2022-10-26T15:53:27Z</published>
    <link href="https://waylonwalker.com/kevinhwang91-nvim-hlslens/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? nvim-hlslens by kevinhwang91.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/kevinhwang91/nvim-hlslens&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-hlslens&lt;/a&gt; by &lt;a href=&#34;https://github.com/kevinhwang91&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kevinhwang91&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Hlsearch Lens for Neovim&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pre-commit pre-commit</title>
    <id>https://waylonwalker.com/pre-commit-pre-commit/</id>
    <updated>2022-10-25T11:42:08Z</updated>
    <published>2022-10-25T11:42:08Z</published>
    <link href="https://waylonwalker.com/pre-commit-pre-commit/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across pre-commit from pre-commit, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/pre-commit/pre-commit&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pre-commit&lt;/a&gt; from &lt;a href=&#34;https://github.com/pre-commit&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pre-commit&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;A framework for managing and maintaining multi-language pre-commit hooks.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>pipx textual devtools</title>
    <id>https://waylonwalker.com/pipx-textual-devtools/</id>
    <updated>2022-10-24T08:16:33Z</updated>
    <published>2022-10-24T08:16:33Z</published>
    <link href="https://waylonwalker.com/pipx-textual-devtools/" rel="alternate" type="text/html"></link>
    <summary type="text">I really like having global cli command installed with pipx. Since textual (the css release) is out I want to be able to pop into textual devtools easily...</summary>
    <content type="html">&lt;p&gt;I really like having global cli command installed with pipx.  Since textual&#xA;&lt;code&gt;0.2.x&lt;/code&gt; (the css release) is out I want to be able to pop into textual devtools&#xA;easily from anywhere.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000359.2404332231.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000359.2404332231.webp&#34; alt=&#34;“rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C12.0 -Ak_lms -S2404332231&#34;/ data-glightbox=&#34;description: “rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C12.0 -Ak_lms -S2404332231&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;pipx-install&#34;&gt;Pipx Install &lt;a href=&#34;#pipx-install&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can pipx install textual.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx install textual&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;But if you try to run any textual cli commands you will run into a&#xA;&lt;code&gt;ModuleNotFoundError&lt;/code&gt;, because you need to install the optional &lt;code&gt;dev&lt;/code&gt;&#xA;dependencies.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Traceback&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;most&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;recent&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;call&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;last&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/u_walkews/.local/bin/textual&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;module&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;textual.cli.cli&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;run&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/u_walkews/.local/pipx/venvs/textual/lib/python3.10/site-packages/textual/cli/cli.py&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;module&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;click&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;ne&#34;&gt;ModuleNotFoundError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;No&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;module&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;named&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;click&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;pipx-inject&#34;&gt;Pipx Inject &lt;a href=&#34;#pipx-inject&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;In order to install optional dependencies with &lt;code&gt;pipx&lt;/code&gt; you need to first install&#xA;the library, then inject in the optional dependencies using the square bracket&#xA;syntax.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx install textual&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx inject textual &lt;span class=&#34;s1&#34;&gt;&amp;#39;textual[dev]&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>textual app devtools</title>
    <id>https://waylonwalker.com/textual-app-devtools/</id>
    <updated>2022-10-24T07:42:48Z</updated>
    <published>2022-10-24T07:42:48Z</published>
    <link href="https://waylonwalker.com/textual-app-devtools/" rel="alternate" type="text/html"></link>
    <summary type="text">I am working through the textual tutorial, and I want to put it in a proper cli that I can pip install and run the command without . This is a fine pattern,...</summary>
    <content type="html">&lt;p&gt;I am working through the textual tutorial, and I want to put it in a proper cli&#xA;that I can pip install and run the command without &lt;code&gt;textual run --dev app.py&lt;/code&gt;.&#xA;This is a fine pattern, but I also want this to work when I don’t have a file&#xA;to run.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000221.3617210203.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000221.3617210203.webp&#34; alt=&#34;“An astronaut working in a lab, hacking on a computer terminal, htop is running, shallow depth of field beakers, test tubes, volumetric lighting, pink lighting, by victo ngai, killian eng vibrant colours, dynamic lighting, digital art” -s50 -W768 -H448 -C7.5 -Ak_lms -S3617210203&#34;/ data-glightbox=&#34;description: “An astronaut working in a lab, hacking on a computer terminal, htop is running, shallow depth of field beakers, test tubes, volumetric lighting, pink lighting, by victo ngai, killian eng vibrant colours, dynamic lighting, digital art” -s50 -W768 -H448 -C7.5 -Ak_lms -S3617210203&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;pyprojecttoml-entrypoints&#34;&gt;pyproject.toml entrypoints &lt;a href=&#34;#pyprojecttoml-entrypoints&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I set up a new project running &lt;code&gt;hatch new&lt;/code&gt;, and added the following entrypoint,&#xA;giving me a &lt;code&gt;tutorial&lt;/code&gt; cli command to run.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;project&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;scripts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;tutorial&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;textual_tutorial.tui:tui&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/hatch-new-cli/&#34; class=&#34;hoverlink&#34;&gt;https://waylonwalker.com/hatch-new-cli/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;setuppy-entrypoints&#34;&gt;setup.py entrypoints &lt;a href=&#34;#setuppy-entrypoints&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you are using &lt;code&gt;setup.py&lt;/code&gt;, you can set up entrypoints in the &lt;code&gt;setup&lt;/code&gt; command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;setuptools&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;setup&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;setup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;entry_points&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;console_scripts&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;tutorial = textual_tutorial.tui:tui&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/minimal-python-package/&#34; class=&#34;hoverlink&#34;&gt;https://waylonwalker.com/minimal-python-package/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;tuipy&#34;&gt;tui.py &lt;a href=&#34;#tuipy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;adding features&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now to get devtools through a cli without running through &lt;code&gt;textual run --dev&lt;/code&gt;.&#xA;I pulled open the textual cli source code, and this is what it does at the time&#xA;of writing.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Note: I used sys.argv as a way to implement a &lt;code&gt;--dev&lt;/code&gt; quickly tutorial. For a&#xA;real project, I’d setup argparse, click, or typer. &lt;code&gt;typer&lt;/code&gt; is my go to these&#xA;days, unless I am really trying to limit dependencies, then the standard&#xA;library &lt;code&gt;argparse&lt;/code&gt; might be what I go with.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;tui&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;textual.features&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parse_features&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;os&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;sys&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;dev&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;--dev&amp;#34;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sys&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;argv&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# this works, but putting it behind argparse, click, or typer would be much better&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;features&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parse_features&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;environ&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;TEXTUAL&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dev&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;features&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;debug&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;features&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;devtools&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;environ&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;TEXTUAL&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;,&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;sorted&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;features&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;app&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;StopwatchApp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;vm&#34;&gt;__name__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;tui&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;other-flags&#34;&gt;Other Flags??? &lt;a href=&#34;#other-flags&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you look at the source, there is one other flag for &lt;code&gt;headless&lt;/code&gt; mode.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;FEATURES&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Final&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;devtools&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;debug&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;headless&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;run-it&#34;&gt;Run it &lt;a href=&#34;#run-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here it is running with &lt;code&gt;tutorial --dev&lt;/code&gt; on the left, and &lt;code&gt;textual console&lt;/code&gt; on&#xA;the right.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/01c4b236-fc55-4760-814a-d61d141ef1db.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/01c4b236-fc55-4760-814a-d61d141ef1db.webp&#34; alt=&#34;textual-tutorial-devtools.webp&#34;/ data-glightbox=&#34;description: textual-tutorial-devtools.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ AnH0ang kedro-aim</title>
    <id>https://waylonwalker.com/anh0ang-kedro-aim/</id>
    <updated>2022-10-20T00:21:06Z</updated>
    <published>2022-10-20T00:21:06Z</published>
    <link href="https://waylonwalker.com/anh0ang-kedro-aim/" rel="alternate" type="text/html"></link>
    <summary type="text">I like AnH0ang&#39;s project kedro-aim.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/AnH0ang&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;AnH0ang’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/AnH0ang/kedro-aim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-aim&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A kedro plugin that enables logging to the ml experiment tracker aim&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ PrismLauncher PrismLauncher</title>
    <id>https://waylonwalker.com/prismlauncher-prismlauncher/</id>
    <updated>2022-10-19T03:24:01Z</updated>
    <published>2022-10-19T03:24:01Z</published>
    <link href="https://waylonwalker.com/prismlauncher-prismlauncher/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on PrismLauncher by PrismLauncher.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/PrismLauncher/PrismLauncher&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;PrismLauncher&lt;/a&gt; by &lt;a href=&#34;https://github.com/PrismLauncher&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;PrismLauncher&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A custom launcher for Minecraft that allows you to easily manage multiple installations of Minecraft at once (Fork of MultiMC)&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ widdix learn-cloudformation</title>
    <id>https://waylonwalker.com/widdix-learn-cloudformation/</id>
    <updated>2022-10-18T11:46:08Z</updated>
    <published>2022-10-18T11:46:08Z</published>
    <link href="https://waylonwalker.com/widdix-learn-cloudformation/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about learn-cloudformation, an amazing project by widdix. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/widdix/learn-cloudformation&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;learn-cloudformation&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/widdix&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;widdix&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Learn how to use Infrastructure as Code on AWS with the help of CloudFormation.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>obs virtual camera on boot</title>
    <id>https://waylonwalker.com/obs-virtual-camera-on-boot/</id>
    <updated>2022-10-18T08:34:25Z</updated>
    <published>2022-10-18T08:34:25Z</published>
    <link href="https://waylonwalker.com/obs-virtual-camera-on-boot/" rel="alternate" type="text/html"></link>
    <summary type="text">For far too long I have had to fidget with v4l2oloopback after reboot. I&#39;ve had this happen on ubuntu 18.04, 22.04, and arch.</summary>
    <content type="html">&lt;p&gt;For far too long I have had to fidget with v4l2oloopback after reboot.  I’ve&#xA;had this happen on ubuntu 18.04, 22.04, and arch.&lt;/p&gt;&#xA;&lt;p&gt;After a reboot the start virtual camera button won’t work, It appears and is&#xA;clickable, but never turns on.  Until I run this command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo modprobe v4l2loopback &lt;span class=&#34;nv&#34;&gt;video_nr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;card_label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;OBS Video Source&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;exclusive_caps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000378.373882614.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000378.373882614.webp&#34; alt=&#34;“cell shaded, long, full body, shot of a cybernetic blue soldier with glowing pink eyes looking into a selfie camera with ring light, llustration, post grunge, 4 k, warm colors, cinematic dramatic atmosphere, sharp focus, pink glowing volumetric lighting, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem” -s50 -W832 -H416 -C12.0 -Ak_lms -S373882614 &#34;/ data-glightbox=&#34;description: “cell shaded, long, full body, shot of a cybernetic blue soldier with glowing pink eyes looking into a selfie camera with ring light, llustration, post grunge, 4 k, warm colors, cinematic dramatic atmosphere, sharp focus, pink glowing volumetric lighting, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem” -s50 -W832 -H416 -C12.0 -Ak_lms -S373882614&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Today I learned that you can turn on kernel modules through some files in &lt;code&gt;/etc/modules...&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is what I did to my arch system to get it to work right after boot.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;v4l2loopback&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /etc/modules-load.d/v4l2loopback.conf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;options v4l2loopback video_nr=10 card_label=\&amp;#34;OBS Video Source\&amp;#34; exclusive_caps=1&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /etc/modprobe.d/v4l2loopback.conf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>localstack status permission</title>
    <id>https://waylonwalker.com/localstack-status-permission/</id>
    <updated>2022-10-17T08:55:26Z</updated>
    <published>2022-10-17T08:55:26Z</published>
    <link href="https://waylonwalker.com/localstack-status-permission/" rel="alternate" type="text/html"></link>
    <summary type="text">I ran into an issue where I was unable to ask localstack for its status. I would run the command and it would tell me that it didn&#39;t have permission to read...</summary>
    <content type="html">&lt;p&gt;I ran into an issue where I was unable to ask localstack for its status. I&#xA;would run the command and it would tell me that it didn’t have permission to&#xA;read files from my own home directory.  Let’s fix it&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-issue&#34;&gt;The issue &lt;a href=&#34;#the-issue&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I would run this to ask for the status.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;localstack status&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And get this error&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PermissionError: &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Errno 13&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; Permission denied: &lt;span class=&#34;s1&#34;&gt;&amp;#39;/home/waylon/.cache/localstack/image_metadata&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;what-happened&#34;&gt;What happened &lt;a href=&#34;#what-happened&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It dawned on me that the first time I ran localstack was straight docker, not&#xA;the python cli.  When docker runs it typically runs as root unless the&#xA;Dockerfile sets up a user and group for it.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000364.3517264680.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000364.3517264680.webp&#34; alt=&#34;“cell shaded, long, full body, shot of a cybernetic blue soldier with glowing pink eyes, llustration, post grunge, cinebatic dramatic atmosphere, sharp focus, pink glowing volumetric lighting, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem” -s50 -W832 -H416 -C12.0 -Ak_lms -S3517264680 &#34;/ data-glightbox=&#34;description: “cell shaded, long, full body, shot of a cybernetic blue soldier with glowing pink eyes, llustration, post grunge, cinebatic dramatic atmosphere, sharp focus, pink glowing volumetric lighting, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem” -s50 -W832 -H416 -C12.0 -Ak_lms -S3517264680&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;how-to-fix-it&#34;&gt;How to fix it &lt;a href=&#34;#how-to-fix-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you have sudo access to the machine you are on you can recursively change&#xA;ownership to your user and group.  I chose to just give myself ownership of my&#xA;whole &lt;code&gt;~/.cache directory&lt;/code&gt; you could choose a deeper directory if you want.  I&#xA;feel pretty safe giving myself ownership to my own cache directory on my own&#xA;machine.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;whoami&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# waylon&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chown -R waylon:waylon ~/.cache&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;now-its-working&#34;&gt;Now it’s working &lt;a href=&#34;#now-its-working&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Running localstack status now gives me a nice status message rather than an&#xA;error.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ localstack status&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;┌─────────────────┬───────────────────────────────────────────────────────┐&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ Runtime version │ 1.2.1.dev                                             │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ Docker image    │ tag: latest, id: dbbfe0ce0008, 📆 2022-10-15T00:51:03 │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│ Runtime status  │ ✖ stopped                                             │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└─────────────────┴───────────────────────────────────────────────────────┘&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Markata Supports Jinja Plugins 0.5.0.dev2</title>
    <id>https://waylonwalker.com/markata-supports-jinja-plugins-0-5-0-dev2/</id>
    <updated>2022-10-11T14:34:35Z</updated>
    <published>2022-10-11T14:34:35Z</published>
    <link href="https://waylonwalker.com/markata-supports-jinja-plugins-0-5-0-dev2/" rel="alternate" type="text/html"></link>
    <summary type="text">Markata now allows you to create jinja extensions that will be loaded right in with nothing more than a .</summary>
    <content type="html">&lt;p&gt;Markata now allows you to create jinja extensions that will be loaded right in&#xA;with nothing more than a &lt;code&gt;pip install&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;from-the-changelog&#34;&gt;From the Changelog &lt;a href=&#34;#from-the-changelog&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The entry for 0.5.0.dev2 from markata’s &lt;a href=&#34;https://markata.dev/changelog/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/markata.dev.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/markata.dev.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;changelog&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Created entrypoint hook allowing for users to extend marka with jinja&#xA;exensions #60 0.5.0.dev2&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000368.1808537114.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img src=&#34;https://stable-diffusion.waylonwalker.com/000368.1808537114.webp&#34; alt=&#34;“cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C12.0 -Ak_lms -S1808537114&#34; class=&#34;more-cinematic glightbox&#34;/ data-glightbox=&#34;description: “cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C12.0 -Ak_lms -S1808537114&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;markata-gh&#34;&gt;markata-gh &lt;a href=&#34;#markata-gh&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The first example that you can use right now is &lt;code&gt;markata-gh&lt;/code&gt;.  It will render&#xA;repos by GitHub topic and user using the gh cli, which is available in github&#xA;actions!&lt;/p&gt;&#xA;&lt;p&gt;Get it with a pip install&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install markata-gh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Use it with some jinja in your markdown.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## Markata plugins&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;It uses the logged in uer by default.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{% gh_repo_list_topic &amp;#34;markata&amp;#34; %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;You can more explicitly grab your username, and a topic.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{% gh_repo_list_topic &amp;#34;waylonwalker&amp;#34;, &amp;#34;personal-website&amp;#34; %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;how-is-this-achieved&#34;&gt;How is this achieved &lt;a href=&#34;#how-is-this-achieved&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The jinja extension details are for another post, but this is how &lt;code&gt;markata-gh&lt;/code&gt;&#xA;exposes itslef as a jinja extension.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;GhRepoListTopic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Extension&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;tags&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;gh_repo_list_topic&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__init__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;super&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;__init__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;parse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;line_number&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;next&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stream&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lineno&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parse_tuple&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;items&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;except&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;AttributeError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;raise&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;AttributeError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;s2&#34;&gt;&amp;#34;Invalid Syntax gh_repo_list_topic expects &amp;lt;username&amp;gt;, or &amp;lt;username&amp;gt;,&amp;lt;topic&amp;gt; both must have the comma&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CallBlock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;call_method&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;run&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[],&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[],&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set_lineno&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;line_number&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;username&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;topic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;caller&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;get&amp;#39;s markdown to inject into post&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;repo_md&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;username&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;username&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;topic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;topic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000368.2487720618.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000368.2487720618.webp&#34; alt=&#34;“cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C12.0 -Ak_lms -S2487720618 &#34;/ data-glightbox=&#34;description: “cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C12.0 -Ak_lms -S2487720618&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;entrypoints&#34;&gt;Entrypoints &lt;a href=&#34;#entrypoints&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Then &lt;code&gt;markata-gh&lt;/code&gt; exposes itself as an extension through entrypoints.&lt;/p&gt;&#xA;&lt;h3 id=&#34;creating-entrypoints-in-pyprojecttoml&#34;&gt;Creating entrypoints in pyproject.toml &lt;a href=&#34;#creating-entrypoints-in-pyprojecttoml&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;If your project is using &lt;code&gt;pyproject.toml&lt;/code&gt; for packaging you can setup an&#xA;entrypoint as follows.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;project&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;entry-points&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;markata.jinja_md&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;markta_gh&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;markata_gh.repo_list:GhRepoListTopic&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;creating-entrypoints-in-setuppy&#34;&gt;Creating entrypoints in setup.py &lt;a href=&#34;#creating-entrypoints-in-setuppy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If your project is using &lt;code&gt;setup.py&lt;/code&gt; for packaging you can setup an&#xA;entrypoint as follows.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;setup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;entry_points&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;markata.jinja_md&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;markta_gh&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;markata_gh.repo_list:GhRepoListTopic&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000368.655826089.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000368.655826089.webp&#34; alt=&#34;“cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C12.0 -Ak_lms -S655826089&#34;/ data-glightbox=&#34;description: “cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C12.0 -Ak_lms -S655826089&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Getting Started with Django REST framework</title>
    <id>https://waylonwalker.com/django-rest-framework-getting-started/</id>
    <updated>2022-10-09T15:57:37Z</updated>
    <published>2022-10-09T15:57:37Z</published>
    <link href="https://waylonwalker.com/django-rest-framework-getting-started/" rel="alternate" type="text/html"></link>
    <summary type="text">In my adventure to learn django, I want to be able to setup REST api&#39;s to feed into dynamic front end sites. Potentially sites running react under the hood.</summary>
    <content type="html">&lt;p&gt;In my adventure to learn django, I want to be able to setup REST api’s to feed&#xA;into dynamic front end sites. Potentially sites running react under the hood.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000327.4270306418.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000327.4270306418.webp&#34; alt=&#34;cell shaded full body shot of a cybernetic blue soldier with glowing eyes working ina lab, llustration, post grunge, pink glowing volumetric lighting, engulfed in smoke and fog, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem&amp;#34; -s50 -W832 -H416 -C18.0 -Ak_lms -S4270306418&#34;/ data-glightbox=&#34;description: cell shaded full body shot of a cybernetic blue soldier with glowing eyes working ina lab, llustration, post grunge, pink glowing volumetric lighting, engulfed in smoke and fog, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem&amp;#34; -s50 -W832 -H416 -C18.0 -Ak_lms -S4270306418&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;install&#34;&gt;Install &lt;a href=&#34;#install&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;To get started lets open up a &lt;code&gt;todo&lt;/code&gt; app that I created with &lt;code&gt;django-admin startproject todo&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install djangorestframework&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;install-app&#34;&gt;Install APP &lt;a href=&#34;#install-app&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now we need to declare &lt;code&gt;rest_framwork&lt;/code&gt; as an &lt;code&gt;INSTALLED_APP&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;INSTALLED_APPS&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;rest_framework&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;create-the-api-app&#34;&gt;create the api app &lt;a href=&#34;#create-the-api-app&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Next I will create all the files that I need to get the api running.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir api&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;touch api/__init__.py api/serializers.py api/urls.py api/views.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000323.3862698977.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000323.3862698977.webp&#34; alt=&#34;cell shaded full body shot of a cybernetic blue soldier with glowing eyes working ina lab, llustration, post grunge, pink glowing volumetric lighting, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem&amp;#34; -s50 -W832 -H416 -C7.5 -Ak_lms -S3862698977&#34;/ data-glightbox=&#34;description: cell shaded full body shot of a cybernetic blue soldier with glowing eyes working ina lab, llustration, post grunge, pink glowing volumetric lighting, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem&amp;#34; -s50 -W832 -H416 -C7.5 -Ak_lms -S3862698977&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;basemodelspy&#34;&gt;base/models.py &lt;a href=&#34;#basemodelspy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I already have the following model from last time I was playing with django. It&#xA;will suffice as it is not the focus of what I am learning for now.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Note the name of the model class is singular, this is becuase django will&#xA;automatically pluralize it in places like the admin panel, and you would end&#xA;up with Itemss.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;django.db&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;models&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Create your models here.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;models&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;models&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CharField&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;max_length&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;created&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;models&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DateTimeField&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;auto_now_add&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__str__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;priority&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Next I will make some dummy data to be able to return. I popped open &lt;code&gt;ipython&lt;/code&gt;&#xA;and made a few records.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;base.models&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Item&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Item&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;objects&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;first&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Item&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;objects&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;second&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Item&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;objects&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;third&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;apiserializerspy&#34;&gt;api/serializers.py &lt;a href=&#34;#apiserializerspy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Next we need to set up a serializer to seriaze and de-serialize data between&#xA;our model and json. You can specify each field individually or all of them by&#xA;passing in &lt;code&gt;__all__&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;rest_framework&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;serializers&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;base.models&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Item&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;ItemSerializer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;serializers&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ModelSerializer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Meta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;model&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Item&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;fields&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;__all__&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;apiviewspy&#34;&gt;api/views.py &lt;a href=&#34;#apiviewspy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000340.2111691103.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000340.2111691103.webp&#34; alt=&#34;“cell shaded full body shot of a shiny golden cybernetic soldier with glowing eyes looking through binoculars, llustration, post grunge, pink glowing volumetric lighting, engulfed in smoke and fog, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem” -s50 -W832 -H416 -C18.0 -Ak_lms -S2111691103 cell shaded full body shot of a shiny golden cybernetic soldier with glowing eyes looking through binoculars, llustration, post grunge, pink glowing volumetric lighting, engulfed in smoke and fog, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem command &#34;/ data-glightbox=&#34;description: “cell shaded full body shot of a shiny golden cybernetic soldier with glowing eyes looking through binoculars, llustration, post grunge, pink glowing volumetric lighting, engulfed in smoke and fog, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem” -s50 -W832 -H416 -C18.0 -Ak_lms -S2111691103 cell shaded full body shot of a shiny golden cybernetic soldier with glowing eyes looking through binoculars, llustration, post grunge, pink glowing volumetric lighting, engulfed in smoke and fog, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem command&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Now we need a view leveraging the &lt;code&gt;djangorestframework&lt;/code&gt;. The serializer we&#xA;just created will be used to serialize all of the rows into a list of objects&#xA;that Response can handle.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Note: to return a collection of model objects we need to set many to &lt;code&gt;True&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;rest_framework.decorators&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;api_view&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;rest_framework.response&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Response&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;base.models&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Item&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;.serializers&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ItemSerializer&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@api_view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;GET&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;items&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Item&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;objects&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;all&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;serializer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ItemSerializer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;many&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;serializer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@api_view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;POST&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;add_item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;serializer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ItemSerializer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;serializer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;is_valid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;serializer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;save&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;apiurlspy&#34;&gt;api/urls.py &lt;a href=&#34;#apiurlspy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000341.192089936.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000341.192089936.webp&#34; alt=&#34;“cell shaded full body shot of a shiny golden cybernetic soldier with glowing eyes looking at a map, llustration, post grunge, pink glowing volumetric lighting, engulfed in smoke and fog, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem” -s50 -W832 -H416 -C18.0 -Ak_lms -S192089936 &#34;/ data-glightbox=&#34;description: “cell shaded full body shot of a shiny golden cybernetic soldier with glowing eyes looking at a map, llustration, post grunge, pink glowing volumetric lighting, engulfed in smoke and fog, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem” -s50 -W832 -H416 -C18.0 -Ak_lms -S192089936&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Now we need to setup routing to access the views through an url.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;django.urls&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;views&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;urlpatterns&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;views&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;add/&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;views&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;todourlspy&#34;&gt;todo/urls.py &lt;a href=&#34;#todourlspy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Then we need to include these urls from our api in the urls specified by &lt;code&gt;settings.ROOT_URLCONf&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;django.urls&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;urlpatterns&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;api/&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;api.urls&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;run-it&#34;&gt;Run it &lt;a href=&#34;#run-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;python&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;manage&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;py&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;runserver&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Running the developement server and going to &lt;code&gt;localhost:8000/api&lt;/code&gt; we can see&#xA;the full list of items in th api.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/1142afab-b71f-474d-bf5c-27bd2a01309b.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/1142afab-b71f-474d-bf5c-27bd2a01309b.webp&#34; alt=&#34;djangorestframework-get-items.webp&#34;/ data-glightbox=&#34;description: djangorestframework-get-items.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ openai whisper</title>
    <id>https://waylonwalker.com/openai-whisper/</id>
    <updated>2022-10-08T21:31:00Z</updated>
    <published>2022-10-08T21:31:00Z</published>
    <link href="https://waylonwalker.com/openai-whisper/" rel="alternate" type="text/html"></link>
    <summary type="text">I like openai&#39;s project whisper.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/openai&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;openai’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/openai/whisper&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;whisper&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Robust Speech Recognition via Large-Scale Weak Supervision&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Markata now uses hatch</title>
    <id>https://waylonwalker.com/markata-now-uses-hatch/</id>
    <updated>2022-10-08T07:25:10Z</updated>
    <published>2022-10-08T07:25:10Z</published>
    <link href="https://waylonwalker.com/markata-now-uses-hatch/" rel="alternate" type="text/html"></link>
    <summary type="text">Markata now uses hatch as its build backend, and version bumping tool. , and are completely gone.</summary>
    <content type="html">&lt;p&gt;Markata now uses hatch as its build backend, and version bumping tool.&#xA;&lt;code&gt;setup.py&lt;/code&gt;, and &lt;code&gt;setup.cfg&lt;/code&gt; are completely gone.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000136.4048189038.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img src=&#34;https://stable-diffusion.waylonwalker.com/000136.4048189038.webp&#34; alt=&#34;“An astronaut working in a lab, there is a series of eggs ready to hatch baby snakes on the table, experiments running, beakers, test tubes, cyberpunk trending on artstation, neon lighting, volumetric lighting, pink lighting” -s50 -W800 -H450 -C7.5 -Ak_lms -S4048189038&#34; class=&#34;more-cinematic glightbox&#34;/ data-glightbox=&#34;description: “An astronaut working in a lab, there is a series of eggs ready to hatch baby snakes on the table, experiments running, beakers, test tubes, cyberpunk trending on artstation, neon lighting, volumetric lighting, pink lighting” -s50 -W800 -H450 -C7.5 -Ak_lms -S4048189038&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;050-is-big&#34;&gt;0.5.0 is big &lt;a href=&#34;#050-is-big&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Markata 0.5.0 is now out, and it’s huge.  Even though it’s the backend of this&#xA;blog I don’t actually have that many posts directly about it.  I’ve used it a&#xA;bit for blog fuel in generic ways, like talking about pluggy and diskcache, but&#xA;very little have I even mentioned it.&lt;/p&gt;&#xA;&lt;p&gt;Over the last month I made a big push to get 0.5.0 out, which adds a whole&#xA;bunch of new configurability to &lt;code&gt;markata&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Here’s the &lt;a href=&#34;https://markata.dev/changelog/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/markata.dev.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/markata.dev.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;changelog&lt;/a&gt; entry.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Moved to PEP 517 build #59 0.5.0.dev1&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;my-personal-simple-cicd&#34;&gt;My Personal Simple CI/CD &lt;a href=&#34;#my-personal-simple-cicd&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Before cutting all of my personal projects over to hatch.  The first thing I&#xA;did was to setup a solid github action,&#xA;&lt;a href=&#34;https://github.com/WaylonWalker/hatch-action&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;hatch-action&lt;/a&gt;that I can resue.&lt;/p&gt;&#xA;&lt;p&gt;It automatically bumps versions, using pre-releases on all branches other than&#xA;main, with special branches for bumping major, minor, patch, dev, alha, beta,&#xA;and dev.&lt;/p&gt;&#xA;&lt;h2 id=&#34;hatch-new---init&#34;&gt;hatch new –init &lt;a href=&#34;#hatch-new---init&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;To convert the project over to hatch, and get rid of setup.py/setup.cfg, I ran&#xA;&lt;code&gt;hatch new --init&lt;/code&gt;.  This automatically grabs all the metadata for the project&#xA;and makes a &lt;code&gt;pyproject.toml&lt;/code&gt; that has most of what I need.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hatch new --init&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I then manually moved over my isort config, put flake8 config into &lt;code&gt;.flake8&lt;/code&gt;,&#xA;and dropped setup.cfg.&lt;/p&gt;&#xA;&lt;h2 id=&#34;lint-test&#34;&gt;lint-test &lt;a href=&#34;#lint-test&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Part of my hatch-action is to run a &lt;code&gt;before-command&lt;/code&gt;, for markata, this runs&#xA;all of my linting and testing in one hatch script called &lt;code&gt;lint-test&lt;/code&gt;.  If this&#xA;fails CI will fail and I can read the report in the logs, make a fix and&#xA;re-publish.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;hatch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;envs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;scripts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;cov&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pytest --cov-report=term-missing --cov-config=pyproject.toml --cov=markata --cov=tests&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;no-cov&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;cov --no-cov&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;lint&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;flake8 markata&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;format&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;black --check markata&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;sort-imports&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;isort markata&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;build-docs&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;markata build&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;lint-test&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;lint&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;format&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;seed-isort-config&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;sort-imports&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;cov&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;test-lint&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;lint-test&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;typical-branching-workflow&#34;&gt;Typical branching workflow &lt;a href=&#34;#typical-branching-workflow&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;with automatic versioning&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;My typical workflow is to work on features in their own branch where they do&#xA;not automatically version or publish, they keep the same version they were&#xA;branched off of.  Then I do a pr to develop, which will do a &lt;code&gt;minor,dev&lt;/code&gt; bump&#xA;and publish a pre-relese to pypi.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# starting with version 0.0.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Feature1 -- │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Feature2 -- ├── dev 0.1.0.dev1,2,3 ── main 0.1.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Feature3 -- │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I will let several features collect in develop before cutting a full relese&#xA;over to main.  This gives me time to make sure the solution is what makes the&#xA;most sense, I try to use it in a few projects, and generally its edges show,&#xA;and another pr is warranted to make the feature useful for more use cases.&#xA;After running and using these new releases in a few projects, I am confident&#xA;that its ready and release to main.&lt;/p&gt;&#xA;&lt;h3 id=&#34;managing-prs&#34;&gt;managing prs &lt;a href=&#34;#managing-prs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Doing PR’s with gh, probably deserves its own post but here are some helpful&#xA;commands.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gh pr create --base develop --fill&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gh pr edit&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gh pr diff &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; dunk&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gh pr merge -ds&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;building-and-publishing&#34;&gt;Building and publishing &lt;a href=&#34;#building-and-publishing&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000221.3512493435.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000221.3512493435.webp&#34; alt=&#34;“An astronaut working in a lab, hacking on a computer terminal, htop is running, shallow depth of field beakers, test tubes, volumetric lighting, pink lighting, by victo ngai, killian eng vibrant colours, dynamic lighting, digital art” -s50 -W768 -H448 -C7.5 -Ak_lms -S3512493435&#34;/ data-glightbox=&#34;description: “An astronaut working in a lab, hacking on a computer terminal, htop is running, shallow depth of field beakers, test tubes, volumetric lighting, pink lighting, by victo ngai, killian eng vibrant colours, dynamic lighting, digital art” -s50 -W768 -H448 -C7.5 -Ak_lms -S3512493435&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;hatch makes building and publishing pretty straightforward.  It’s one command&#xA;inside my hatch-action to build and one to publish.  On each project that uses&#xA;my hatch-action I only need to give it a token that I get from PyPi.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;HATCH_INDEX_USER&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;__token__&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;HATCH_INDEX_AUTH&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${{ secrets.pypi_password }}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;full-set-of-changes&#34;&gt;Full set of changes &lt;a href=&#34;#full-set-of-changes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you want to see all of the details on how markata moved over to hatch, you can check out this diff.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/WaylonWalker/markata/compare/v0.4.0..v0.5.0.dev0&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/WaylonWalker/markata/compare/v0.4.0..v0.5.0.dev0&lt;/a&gt;&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000224.2409791448.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000224.2409791448.webp&#34; alt=&#34;“An astronaut working in a lab, hacking on a computer terminal, htop is running, shallow depth of field beakers, test tubes, volumetric lighting, pink lighting, by victo ngai, killian eng vibrant colours, dynamic lighting, digital art” -s50 -W768 -H448 -C7.5 -Ak_lms -U 4.0 0.6 -S2409791448 &#34;/ data-glightbox=&#34;description: “An astronaut working in a lab, hacking on a computer terminal, htop is running, shallow depth of field beakers, test tubes, volumetric lighting, pink lighting, by victo ngai, killian eng vibrant colours, dynamic lighting, digital art” -s50 -W768 -H448 -C7.5 -Ak_lms -U 4.0 0.6 -S2409791448&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ lkwq007 stablediffusion-infinity</title>
    <id>https://waylonwalker.com/lkwq007-stablediffusion-infinity/</id>
    <updated>2022-10-01T21:03:37Z</updated>
    <published>2022-10-01T21:03:37Z</published>
    <link href="https://waylonwalker.com/lkwq007-stablediffusion-infinity/" rel="alternate" type="text/html"></link>
    <summary type="text">lkwq007 has done a fantastic job with stablediffusion-infinity. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/lkwq007&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lkwq007&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/lkwq007/stablediffusion-infinity&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;stablediffusion-infinity&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Outpainting with Stable Diffusion on an infinite canvas&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ toumorokoshi deepmerge</title>
    <id>https://waylonwalker.com/toumorokoshi-deepmerge/</id>
    <updated>2022-09-27T00:02:23Z</updated>
    <published>2022-09-27T00:02:23Z</published>
    <link href="https://waylonwalker.com/toumorokoshi-deepmerge/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out toumorokoshi and their project deepmerge.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/toumorokoshi&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;toumorokoshi&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/toumorokoshi/deepmerge&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;deepmerge&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A deep merging tool for Python core data structures&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>django create superuser</title>
    <id>https://waylonwalker.com/django-create-superuser/</id>
    <updated>2022-09-26T07:14:04Z</updated>
    <published>2022-09-26T07:14:04Z</published>
    <link href="https://waylonwalker.com/django-create-superuser/" rel="alternate" type="text/html"></link>
    <summary type="text">My next step into django made me realize that I do not have access to the admin panel, turns out that I need to create a cuper user first.</summary>
    <content type="html">&lt;p&gt;My next step into django made me realize that I do not have access to the admin panel, turns out that I need to create a cuper user first.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000368.3309980874.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000368.3309980874.webp&#34; alt=&#34;“cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C12.0 -Ak_lms -S3309980874&#34;/ data-glightbox=&#34;description: “cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C12.0 -Ak_lms -S3309980874&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;run-migrations&#34;&gt;Run Migrations &lt;a href=&#34;#run-migrations&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Right away when trying to setup the superuser I ran into this issue&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;django.db.utils.OperationalError: no such table: auth_user&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Back to the &lt;a href=&#34;https://docs.djangoproject.com/en/1.8/intro/tutorial01/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/docs.djangoproject.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/docs.djangoproject.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tutorial&lt;/a&gt;&#xA;tells me that I need to run migrations to setup some tables for the&#xA;&lt;code&gt;INSTALLED_APPS&lt;/code&gt;, &lt;code&gt;django.contrib.admin&lt;/code&gt; being one of them.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python manage.py migrate&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/c5774ced-b535-42d3-bbdc-8be39da7795e.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/c5774ced-b535-42d3-bbdc-8be39da7795e.png&#34; alt=&#34;trydjango-migration.png&#34;/ data-glightbox=&#34;description: trydjango-migration.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;yes I am still running remote on from my chromebook.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python manage.py createsuperuser&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/b46c5a29-56d2-413f-bc14-f49353169ea3.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/b46c5a29-56d2-413f-bc14-f49353169ea3.png&#34; alt=&#34;trydjango-create-superuser.png&#34;/ data-glightbox=&#34;description: trydjango-create-superuser.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;The super user has been created.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000368.2018296614.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000368.2018296614.webp&#34; alt=&#34;“cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C12.0 -Ak_lms -S2018296614&#34;/ data-glightbox=&#34;description: “cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C12.0 -Ak_lms -S2018296614&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;csrf-failure&#34;&gt;CSRF FAILURE &lt;a href=&#34;#csrf-failure&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;My next issue trying to run off of a separate domain was a cross site request&#xA;forgery error.&lt;/p&gt;&#xA;&lt;p&gt;Since this is a valid domain that we are hosting the app from we need to tell&#xA;Django that this is safe.  We can do this again in the &lt;code&gt;settings.py&lt;/code&gt;, but this&#xA;time the variable we need is not there out of the box and we need to add it.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;CSRF_TRUSTED_ORIGINS = [&amp;#39;https://localhost.waylonwalker.com&amp;#39;]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;i-made-it&#34;&gt;I made it!! &lt;a href=&#34;#i-made-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;And we are in, and welcomed for the first time with this django admin panel.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/839b17ce-1850-44d4-a560-014e878934bd.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/839b17ce-1850-44d4-a560-014e878934bd.webp&#34; alt=&#34;trydjango-hello.webp&#34;/ data-glightbox=&#34;description: trydjango-hello.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;remote-hosting&#34;&gt;Remote Hosting &lt;a href=&#34;#remote-hosting&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You might find these settings helpful as well if you are trying to run your&#xA;site on a remote host like aws, digital ocean, linode, or any sort of cloud&#xA;providor.  I had it running in my home lab while I was out of the house and&#xA;ssh’d in over with a chromebook.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000368.1092166059.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000368.1092166059.webp&#34; alt=&#34;“cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C12.0 -Ak_lms -S1092166059&#34;/ data-glightbox=&#34;description: “cybernetic soldier working on a rusting tape machine robot, cinematic lighting, detailed, cell shaded, 4 k, warm colours, concept art, by wlop, ilya kuvshinov, artgerm, krenz cushart, greg rutkowski, pixiv. cinematic dramatic atmosphere, sharp focus, volumetric lighting, cinematic lighting, studio quality” -s50 -W832 -H416 -C12.0 -Ak_lms -S1092166059&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>django disallowed host</title>
    <id>https://waylonwalker.com/django-disallowed-host/</id>
    <updated>2022-09-26T06:15:24Z</updated>
    <published>2022-09-26T06:15:24Z</published>
    <link href="https://waylonwalker.com/django-disallowed-host/" rel="alternate" type="text/html"></link>
    <summary type="text">I am continuing my journey into django, but today I am not at my workstation. I am ssh&#39;d in remotely from a chromebook. I am fully outside of my network, so...</summary>
    <content type="html">&lt;p&gt;I am continuing my journey into django, but today I am not at my workstation. I&#xA;am ssh’d in remotely from a chromebook.  I am fully outside of my network, so I&#xA;can’t access it by localhost, or it’s ip.  I do have cloudflared tunnel&#xA;installed and dns setup to a &lt;code&gt;localhost.waylonwalker.com&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;settings&#34;&gt;Settings &lt;a href=&#34;#settings&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I found this in &lt;code&gt;settings.py&lt;/code&gt; and yolo, it worked first try.  I am in from my&#xA;remote location, and even have auth taken care of thanks to cloudflare.  I am&#xA;really hoping to learn how to setup my own auth with django as this is one of&#xA;the things that I could really use in my toolbelt.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ALLOWED_HOSTS&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;localhost.waylonwalker.com&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000321.3422093952.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000321.3422093952.webp&#34; alt=&#34;“cell shaded long shot of a cybernetic blue bald soldier with glowing blue eyes as Borderlands 3 concept art, llustration, post grunge, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem” -s50 -W832 -H416 -C7.5 -Ak_lms -S3422093952 &#34;/ data-glightbox=&#34;description: “cell shaded long shot of a cybernetic blue bald soldier with glowing blue eyes as Borderlands 3 concept art, llustration, post grunge, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem” -s50 -W832 -H416 -C7.5 -Ak_lms -S3422093952&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Trying out django</title>
    <id>https://waylonwalker.com/trying-out-django/</id>
    <updated>2022-09-25T18:47:54Z</updated>
    <published>2022-09-25T18:47:54Z</published>
    <link href="https://waylonwalker.com/trying-out-django/" rel="alternate" type="text/html"></link>
    <summary type="text">I have no experience in django, and in my exploration to become a better python developer I am dipping my toe into one of the most polished and widely used...</summary>
    <content type="html">&lt;p&gt;I have no experience in django, and in my exploration to become a better python&#xA;developer I am dipping my toe into one of the most polished and widely used web&#xA;frameworks Django to so that I can better understand it and become a better&#xA;python developer.&lt;/p&gt;&#xA;&lt;p&gt;If you found this at all helpful make sure you check out the &lt;a href=&#34;https://docs.djangoproject.com/en/4.1/intro/tutorial01/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/docs.djangoproject.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/docs.djangoproject.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;django tutorial&lt;/a&gt;&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000243.2250540408.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000243.2250540408.webp&#34; alt=&#34;“An atronaut working in a lab, there is a long snake working along side, shallow depth of field beakers, test tubes, volumetric lighting, pink lighting, by victo ngai, killian eng vibrant colours, dynamic lighting, digital art” -s50 -W768 -H448 -C7.5 -Ak_lms -S2250540408&#34;/ data-glightbox=&#34;description: “An atronaut working in a lab, there is a long snake working along side, shallow depth of field beakers, test tubes, volumetric lighting, pink lighting, by victo ngai, killian eng vibrant colours, dynamic lighting, digital art” -s50 -W768 -H448 -C7.5 -Ak_lms -S2250540408&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;install-django&#34;&gt;install django &lt;a href=&#34;#install-django&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The first thing I need to do is render out a template to start the project.&#xA;For this I need the &lt;code&gt;django-admin&lt;/code&gt; cli.  To get this I am going the route of&#xA;&lt;code&gt;pipx&lt;/code&gt; it will be installed globally on my system in it’s own virtual&#xA;environment that I don’t have to manage.  This will be useful only for using&#xA;startproject as far as I know.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx install django&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;django-admin startproject try_django&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; try_django&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/1913211c-81ac-4de4-af49-9a532f0786f7.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/1913211c-81ac-4de4-af49-9a532f0786f7.webp&#34; alt=&#34;django-startproject.webp&#34;/ data-glightbox=&#34;description: django-startproject.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;make-a-venv&#34;&gt;Make a venv &lt;a href=&#34;#make-a-venv&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Once I have the project I need a venv for all of django and all of my&#xA;dependencies I might need for the project.  I have really been diggin &lt;code&gt;hatch&lt;/code&gt;&#xA;lately, and it has a one line &lt;em&gt;“make a &lt;a href=&#34;/virtual-environment/&#34; class=&#34;glossary-term&#34; title=&#34;Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...&#34;&gt;virtual environment&lt;/a&gt; and manage it for&#xA;me”&lt;/em&gt; command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hatch shell&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/974809a1-02bd-46c4-acf9-783fd5128b35.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/974809a1-02bd-46c4-acf9-783fd5128b35.webp&#34; alt=&#34;trydjango-venv.webp&#34;/ data-glightbox=&#34;description: trydjango-venv.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;If hatch is a bit bleeding edge for you, or it has died out by the time you&#xA;read this.  The ol trusty venv will likely stand the test of time, this is what&#xA;I would use for that.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python -m .venv --prmpt &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;basename &lt;span class=&#34;nv&#34;&gt;$PWD&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;. ./.venv/bin/activate&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;start-the-webserver&#34;&gt;Start the webserver &lt;a href=&#34;#start-the-webserver&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Next up we need to start the webserver to start seeing that development&#xA;content.  The first thing I did was run it as stated in the tutorial and find&#xA;it clashed with a currently running web server port.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python manage.py runserver&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/ac1397f4-71b9-4617-9438-33cfa2e53c75.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/ac1397f4-71b9-4617-9438-33cfa2e53c75.webp&#34; alt=&#34;django-runserver-oops.webp&#34;/ data-glightbox=&#34;description: django-runserver-oops.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;I jumped over to that tmux session, killed the process and I was up and running.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/828d8e21-00c7-4f02-bd47-e3cebc318adc.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/828d8e21-00c7-4f02-bd47-e3cebc318adc.webp&#34; alt=&#34;trydjango-runserver.webp&#34;/ data-glightbox=&#34;description: trydjango-runserver.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;whats-running&#34;&gt;What’s running &lt;a href=&#34;#whats-running&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The default django hello world looks well designed.  You are first presented&#xA;with this page.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/e5523925-1565-454c-bab3-c70c4deabc83.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/e5523925-1565-454c-bab3-c70c4deabc83.webp&#34; alt=&#34;trydjango-hello.webp&#34;/ data-glightbox=&#34;description: trydjango-hello.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;next&#34;&gt;Next &lt;a href=&#34;#next&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I opened up the &lt;code&gt;urls.py&lt;/code&gt; to discover that the only configured url was at&#xA;&lt;code&gt;/admin&lt;/code&gt;. I tried to log in as admin, but was unable to as I have not yet&#xA;created a superuser.  Next time I play with django that is what I will explore.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000250.526887289.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000250.526887289.webp&#34; alt=&#34;An astronaut working in a dimly lit labratory, it is almost black, heavy dark blacks, black space, heavy vingette, hacking on a computer terminal, htop is running, shallow depth of field beakers, test tubes, by Alphonse Mucha, dynamic lighting, digital art&#34;/ data-glightbox=&#34;description: An astronaut working in a dimly lit labratory, it is almost black, heavy dark blacks, black space, heavy vingette, hacking on a computer terminal, htop is running, shallow depth of field beakers, test tubes, by Alphonse Mucha, dynamic lighting, digital art&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>how to escape variables in jinja templates</title>
    <id>https://waylonwalker.com/jinja2-escape/</id>
    <updated>2022-09-24T15:18:50Z</updated>
    <published>2022-09-24T15:18:50Z</published>
    <link href="https://waylonwalker.com/jinja2-escape/" rel="alternate" type="text/html"></link>
    <summary type="text">While updating my site to use Markata&#39;s new configurable head I ran into some escaping issues. Things like single quotes would cause jinja to fail as it was...</summary>
    <content type="html">&lt;p&gt;While updating my site to use Markata’s new configurable head I ran into some&#xA;escaping issues.  Things like single quotes would cause jinja to fail as it was&#xA;closing quotes that it shouldnt have.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000258.1910330087.webp#cinematic&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000258.1910330087.webp#cinematic&#34; alt=&#34;Nuclear core being help up by glowing neon wires, cyberpunk synthwave, intricate abstract. delicate artwork. by tooth wu, wlop, beeple, dan mumford. pink volumetric lighting, octane render, trending on artstation, greg rutkowski very coherent symmetrical artwork. cinematic, hyper realism, high detail, octane render, 8k, depth of field, bokeh. chrome accents.&#34;/ data-glightbox=&#34;description: Nuclear core being help up by glowing neon wires, cyberpunk synthwave, intricate abstract. delicate artwork. by tooth wu, wlop, beeple, dan mumford. pink volumetric lighting, octane render, trending on artstation, greg rutkowski very coherent symmetrical artwork. cinematic, hyper realism, high detail, octane render, 8k, depth of field, bokeh. chrome accents.&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;jinja-escaping-strings&#34;&gt;Jinja Escaping Strings &lt;a href=&#34;#jinja-escaping-strings&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Jinja comes with a handy utility for escaping strings.  I definitly tried to&#xA;over-complicate this before realizing.  You can just pipe your variables into&#xA;&lt;code&gt;e&lt;/code&gt; to escape them.  This has worked pretty flawless at solving some jinja&#xA;issues for me.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{{ title|e }}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;creating-meta-tags-in-markata&#34;&gt;Creating meta tags in Markata &lt;a href=&#34;#creating-meta-tags-in-markata&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The issue I ran into was when trying to setup meta tags with the new&#xA;configurable head, some of my titles have single quotes in them.  This is what&#xA;I put in my &lt;code&gt;markata.toml&lt;/code&gt; to create some meta tags.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;markata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;head&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;meta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;og:title&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;content&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;{{ title }}&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Using my article titles like this ended up causing this syntax error when not&#xA;escaped.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;ne&#34;&gt;SyntaxError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;invalid&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;syntax&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Perhaps&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;you&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;forgot&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;comma&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;?&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;ne&#34;&gt;Exception&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ignored&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Forward&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;__del__&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0x7fa9807192d0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Traceback&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;most&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;recent&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;call&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;last&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;ne&#34;&gt;TypeError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;NoneType&amp;#39;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;object&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;callable&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;jinja2-escape&#34;&gt;jinja2 escape &lt;a href=&#34;#jinja2-escape&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;After making a complicated system of using &lt;code&gt;html.escape&lt;/code&gt; I realized that jinja&#xA;included escaping out of the box so I updated my &lt;code&gt;markata.toml&lt;/code&gt; to include the&#xA;escaping, and it all just worked!.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;markata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;head&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;meta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;og:title&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;content&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;{{ title|e }}&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000255.3328233410.webp#cinematic&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000255.3328233410.webp#cinematic&#34; alt=&#34;Nuclear core being help up by wires, intricate abstract. delicate artwork. by tooth wu, wlop, beeple, dan mumford. pink volumetric lighting, octane render, trending on artstation, greg rutkowski very coherent symmetrical artwork. cinematic, hyper realism, high detail, octane render, 8k, depth of field, bokeh. chrome accents.&#34;/ data-glightbox=&#34;description: Nuclear core being help up by wires, intricate abstract. delicate artwork. by tooth wu, wlop, beeple, dan mumford. pink volumetric lighting, octane render, trending on artstation, greg rutkowski very coherent symmetrical artwork. cinematic, hyper realism, high detail, octane render, 8k, depth of field, bokeh. chrome accents.&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>I&#39;ve made my ipython config too complicated, let&#39;s fix it.</title>
    <id>https://waylonwalker.com/use-ipython-extensions/</id>
    <updated>2022-09-20T15:40:31Z</updated>
    <published>2022-09-20T15:40:31Z</published>
    <link href="https://waylonwalker.com/use-ipython-extensions/" rel="alternate" type="text/html"></link>
    <summary type="text">When I am developing python code I often have a repl open alongside of it running snippets ofcode as I go. Ipython is my repl of choice, and I hace tricked...</summary>
    <content type="html">&lt;p&gt;When I am developing python code I often have a repl open alongside of it&#xA;running snippets ofcode as I go.  Ipython is my repl of choice, and I hace&#xA;tricked it out the best I can and I really like it.  The problem I recently&#xA;discovered is that I have way overcomplicated it.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000221.3407229670.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000221.3407229670.webp&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;what-have-i-done&#34;&gt;What Have I done?? &lt;a href=&#34;#what-have-i-done&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;So in the past the way I have setup a few extensions for myself is to add&#xA;something like this to my &lt;code&gt;~/.ipython/profile_default/startup&lt;/code&gt; directory.  It&#xA;sets up some things like rich highlighting or in this example automatic&#xA;imports.  I even went as far as installing some of these in the case I didn’t have them installed.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;subprocess&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;IPython&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_ipython&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;IPython.core.error&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;UsageError&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ipython&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_ipython&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;ipython&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run_line_magic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;load_ext pyflyby&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;inline&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;except&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;UsageError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;installing pyflyby&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;subprocess&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Popen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;pip&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;install&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pyflyby&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;stdout&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;subprocess&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DEVNULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;stderr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;subprocess&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DEVNULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wait&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;ipython&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run_line_magic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;load_ext pyflyby&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;inline&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;installing isort&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;subprocess&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Popen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;pip&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;install&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;isort&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;stdout&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;subprocess&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DEVNULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;stderr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;subprocess&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DEVNULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000255.43782833.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000255.43782833.webp&#34; alt=&#34;A man looking over to a glowing nuclear core with hundreds of wires running from it&#34;/ data-glightbox=&#34;description: A man looking over to a glowing nuclear core with hundreds of wires running from it&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;what-i-missed&#34;&gt;What I missed? &lt;a href=&#34;#what-i-missed&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I missed the fact that some of these tools like &lt;code&gt;pyflyby&lt;/code&gt; and &lt;code&gt;rich&lt;/code&gt; already&#xA;have an ipython extension maintained by the library that just works.  It’s less&#xA;complicated and more robust to future changes in the library.  If anything ever&#xA;changes with these I will not have to worry about which version is installed,&#xA;the extension will just take care of itself.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-to-activate-these&#34;&gt;How to activate these. &lt;a href=&#34;#how-to-activate-these&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The reccomended way is to add them to your&#xA;&lt;code&gt;~/.ipython/profile_default/ipython_config.py&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;InteractiveShellApp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extensions&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;rich&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;InteractiveShellApp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extensions&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;markata&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;InteractiveShellApp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extensions&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;pyflyby&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The issue that I found with this is that you can end up with a sea of errors&#xA;flooding your terminal.  Personally I will know immediately if ipython is&#xA;working right or not and typically have scriped venv installs so I have&#xA;everything I need, so If I don’t have everything it’s probably for a reason and&#xA;I don’t need an error message lighting up.&lt;/p&gt;&#xA;&lt;p&gt;My way around this was to test if the module was importable and if it had a&#xA;&lt;code&gt;load_ipython_extension&lt;/code&gt; attribute before appending it as an extension.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;activate_extension&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extension&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;mod&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;importlib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;import_module&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extension&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;getattr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mod&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;load_ipython_extension&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;InteractiveShellApp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extensions&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extension&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;except&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;ModuleNotFoundError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;extension is not installed&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;except&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;AttributeError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;extension does not have a &amp;#39;load_ipython_extension&amp;#39; function&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;extensions&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;rich&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;markata&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pyflyby&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;extension&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;extensions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;activate_extension&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extension&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;my-change&#34;&gt;My Change &lt;a href=&#34;#my-change&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you want to see what I did to my config see &lt;a href=&#34;https://github.com/WaylonWalker/devtainer/commit/e83b65db8cc292e0de99f1089754e088d8e7e3ef&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;this commit&lt;/a&gt;.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pypeaday stable-diffusion-pype-dev</title>
    <id>https://waylonwalker.com/pypeaday-stable-diffusion-pype-dev/</id>
    <updated>2022-09-20T01:00:21Z</updated>
    <published>2022-09-20T01:00:21Z</published>
    <link href="https://waylonwalker.com/pypeaday-stable-diffusion-pype-dev/" rel="alternate" type="text/html"></link>
    <summary type="text">I like pypeaday&#39;s project stable-diffusion-pype-dev.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/pypeaday&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pypeaday’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/pypeaday/stable-diffusion-pype-dev&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;stable-diffusion-pype-dev&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ gradio-app gradio</title>
    <id>https://waylonwalker.com/gradio-app-gradio/</id>
    <updated>2022-09-20T00:43:18Z</updated>
    <published>2022-09-20T00:43:18Z</published>
    <link href="https://waylonwalker.com/gradio-app-gradio/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out gradio-app and their project gradio.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/gradio-app&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gradio-app&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/gradio-app/gradio&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gradio&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Build and share delightful machine learning apps, all in Python. 🌟 Star to support our work!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ AUTOMATIC1111 stable-diffusion-webui</title>
    <id>https://waylonwalker.com/automatic1111-stable-diffusion-webui/</id>
    <updated>2022-09-19T16:47:11Z</updated>
    <published>2022-09-19T16:47:11Z</published>
    <link href="https://waylonwalker.com/automatic1111-stable-diffusion-webui/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred stable-diffusion-webui by AUTOMATIC1111. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/AUTOMATIC1111/stable-diffusion-webui&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;stable-diffusion-webui&lt;/a&gt; by &lt;a href=&#34;https://github.com/AUTOMATIC1111&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;AUTOMATIC1111&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;Stable Diffusion web UI&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ kedro-org kedro-plugins</title>
    <id>https://waylonwalker.com/kedro-org-kedro-plugins/</id>
    <updated>2022-09-19T16:10:55Z</updated>
    <published>2022-09-19T16:10:55Z</published>
    <link href="https://waylonwalker.com/kedro-org-kedro-plugins/" rel="alternate" type="text/html"></link>
    <summary type="text">kedro-plugins by kedro-org is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/kedro-org/kedro-plugins&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-plugins&lt;/a&gt; by &lt;a href=&#34;https://github.com/kedro-org&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-org&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;First-party plugins maintained by the Kedro team.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ modrinth knossos</title>
    <id>https://waylonwalker.com/modrinth-knossos/</id>
    <updated>2022-09-18T19:16:19Z</updated>
    <published>2022-09-18T19:16:19Z</published>
    <link href="https://waylonwalker.com/modrinth-knossos/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on knossos, created by modrinth.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/modrinth/knossos&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;knossos&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/modrinth&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;modrinth&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;[Archived] Former repo of the Modrinth frontend&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ CaffeineMC sodium</title>
    <id>https://waylonwalker.com/caffeinemc-sodium/</id>
    <updated>2022-09-18T12:31:10Z</updated>
    <published>2022-09-18T12:31:10Z</published>
    <link href="https://waylonwalker.com/caffeinemc-sodium/" rel="alternate" type="text/html"></link>
    <summary type="text">I like CaffeineMC&#39;s project sodium.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/CaffeineMC&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;CaffeineMC’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/CaffeineMC/sodium&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sodium&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A Minecraft mod designed to improve frame rates and reduce micro-stutter&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ WaylonWalker markata-todoui</title>
    <id>https://waylonwalker.com/waylonwalker-markata-todoui/</id>
    <updated>2022-09-17T21:04:30Z</updated>
    <published>2022-09-17T21:04:30Z</published>
    <link href="https://waylonwalker.com/waylonwalker-markata-todoui/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred markata-todoui by WaylonWalker. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/WaylonWalker/markata-todoui&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;markata-todoui&lt;/a&gt; by &lt;a href=&#34;https://github.com/WaylonWalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;WaylonWalker&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;A todo plugin for markata.  It is a tui (text user interface) that runs in the terminal using textual.  It gives me a trello-board feel from the terminal.  I can create, update, delete, move, and fully manage my todo items from the terminal with it.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ giscus giscus</title>
    <id>https://waylonwalker.com/giscus-giscus/</id>
    <updated>2022-09-17T12:35:36Z</updated>
    <published>2022-09-17T12:35:36Z</published>
    <link href="https://waylonwalker.com/giscus-giscus/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out giscus and their project giscus.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/giscus&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;giscus&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/giscus/giscus&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;giscus&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A comment system powered by GitHub Discussions. :octocat: 💬 💎&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ hrsh7th cmp-nvim-lsp-signature-help</title>
    <id>https://waylonwalker.com/hrsh7th-cmp-nvim-lsp-signature-help/</id>
    <updated>2022-09-13T01:24:52Z</updated>
    <published>2022-09-13T01:24:52Z</published>
    <link href="https://waylonwalker.com/hrsh7th-cmp-nvim-lsp-signature-help/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered cmp-nvim-lsp-signature-help by hrsh7th, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/hrsh7th/cmp-nvim-lsp-signature-help&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cmp-nvim-lsp-signature-help&lt;/a&gt; by &lt;a href=&#34;https://github.com/hrsh7th&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;hrsh7th&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;cmp-nvim-lsp-signature-help&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>markata extend &lt;head&gt; in configuration</title>
    <id>https://waylonwalker.com/markata-configure-head/</id>
    <updated>2022-09-11T20:25:45Z</updated>
    <published>2022-09-11T20:25:45Z</published>
    <link href="https://waylonwalker.com/markata-configure-head/" rel="alternate" type="text/html"></link>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000172.2339173599.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img src=&#34;https://stable-diffusion.waylonwalker.com/000172.2339173599.webp&#34; alt=&#34;Astronauts stunting some stylish color explosion&#34; class=&#34;more-cinematic glightbox&#34;/ data-glightbox=&#34;description: Astronauts stunting some stylish color explosion&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;A long needed feature of markata has been the ability to really configure out&#xA;templates with configuration rather.  It’s been long that you needed that if&#xA;you really want to change the style, meta tags, or anything in the head you&#xA;needed to write a plugin or eject out of the template and use your own.&lt;/p&gt;&#xA;&lt;h2 id=&#34;adding-some-head&#34;&gt;Adding some Head &lt;a href=&#34;#adding-some-head&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now you can add some extra style to your site with the existing built-in&#xA;template.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;markata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;head&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;lt;style&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;img {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;  width: 100%;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;  height: auto;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;ul {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;  display: flex;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;  flex-wrap: wrap;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;lt;/style&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;you-can-have-more-than-one-head&#34;&gt;You can have more than one Head &lt;a href=&#34;#you-can-have-more-than-one-head&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Each text entry in &lt;code&gt;markata.head&lt;/code&gt; just gets appended raw into the head.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;markata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;head&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;lt;style&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;img {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;  width: 100%;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;  height: auto;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;ul {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;  display: flex;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;  flex-wrap: wrap;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;lt;/style&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;markata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;head&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;lt;script&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;console.log(&amp;#39;hey there&amp;#39;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;lt;/script&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;still-need-more&#34;&gt;Still need more? &lt;a href=&#34;#still-need-more&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If this does not take you far enough yet, you can still eject out and use your&#xA;own template pretty easy.  If you are going for a full custom site it’s likely&#xA;that this will be the workflow for awhile.  Markata should only get better and&#xA;make this required less often as it matures.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;markata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;post_template&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pages/templates/post_template.html&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Once you have this in your &lt;code&gt;markata.toml&lt;/code&gt; you can put whatever you want in your&#xA;own template.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000172.2678273305.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000172.2678273305.webp&#34; alt=&#34;“An astronaut working in a lab, colorful explosion, powder, particles, smoke, 35mm, bokeh, fog, f1.2, shallow depth of field, experiments running, beakers, test tubes, cyberpunk, octane render, trending on artstation, neon lighting, volumetric lighting, pink lighting” -s50 -W800 -H450 -C7.5 -Ak_lms -S2678273305&#34;/ data-glightbox=&#34;description: “An astronaut working in a lab, colorful explosion, powder, particles, smoke, 35mm, bokeh, fog, f1.2, shallow depth of field, experiments running, beakers, test tubes, cyberpunk, octane render, trending on artstation, neon lighting, volumetric lighting, pink lighting” -s50 -W800 -H450 -C7.5 -Ak_lms -S2678273305&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nateraw stable-diffusion-videos</title>
    <id>https://waylonwalker.com/nateraw-stable-diffusion-videos/</id>
    <updated>2022-09-09T21:04:40Z</updated>
    <published>2022-09-09T21:04:40Z</published>
    <link href="https://waylonwalker.com/nateraw-stable-diffusion-videos/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered stable-diffusion-videos by nateraw, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/nateraw/stable-diffusion-videos&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;stable-diffusion-videos&lt;/a&gt; by &lt;a href=&#34;https://github.com/nateraw&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nateraw&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;Create 🔥 videos with Stable Diffusion by exploring the latent space and morphing between text prompts&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ gitleaks gitleaks</title>
    <id>https://waylonwalker.com/gitleaks-gitleaks/</id>
    <updated>2022-09-07T21:57:53Z</updated>
    <published>2022-09-07T21:57:53Z</published>
    <link href="https://waylonwalker.com/gitleaks-gitleaks/" rel="alternate" type="text/html"></link>
    <summary type="text">gitleaks by gitleaks is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/gitleaks/gitleaks&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gitleaks&lt;/a&gt; by &lt;a href=&#34;https://github.com/gitleaks&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gitleaks&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;Find secrets with Gitleaks 🔑&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Abdur-rahmaanJ termcharts</title>
    <id>https://waylonwalker.com/abdur-rahmaanj-termcharts/</id>
    <updated>2022-09-07T17:30:51Z</updated>
    <published>2022-09-07T17:30:51Z</published>
    <link href="https://waylonwalker.com/abdur-rahmaanj-termcharts/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on termcharts, created by Abdur-rahmaanJ.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/Abdur-rahmaanJ/termcharts&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;termcharts&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/Abdur-rahmaanJ&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Abdur-rahmaanJ&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Terminal charts&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ WaylonWalker markata-slides</title>
    <id>https://waylonwalker.com/waylonwalker-markata-slides/</id>
    <updated>2022-09-06T13:11:56Z</updated>
    <published>2022-09-06T13:11:56Z</published>
    <link href="https://waylonwalker.com/waylonwalker-markata-slides/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? markata-slides by WaylonWalker.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/WaylonWalker/markata-slides&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;markata-slides&lt;/a&gt; by &lt;a href=&#34;https://github.com/WaylonWalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;WaylonWalker&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A slides plugin for markata that allows you to create presentations in markdown from the comfort of your favorite editor.  Each new h2 tag (## in markdown) becomes a new slide.  This plugin leverages the built-in feeds plugin for navigation, and adds in some hotkeys (j/k) to go the the previous and next slides.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pypeaday small-group-notes</title>
    <id>https://waylonwalker.com/pypeaday-small-group-notes/</id>
    <updated>2022-09-06T13:11:50Z</updated>
    <published>2022-09-06T13:11:50Z</published>
    <link href="https://waylonwalker.com/pypeaday-small-group-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about small-group-notes, an amazing project by pypeaday. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/pypeaday/small-group-notes&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;small-group-notes&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/pypeaday&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pypeaday&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Landing zone for small group notes - plan is to make this a nicer website for all things small group related&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Mr-Destructive techstructive-blog</title>
    <id>https://waylonwalker.com/mr-destructive-techstructive-blog/</id>
    <updated>2022-09-06T13:11:05Z</updated>
    <published>2022-09-06T13:11:05Z</published>
    <link href="https://waylonwalker.com/mr-destructive-techstructive-blog/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? techstructive-blog by Mr-Destructive.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/Mr-Destructive/techstructive-blog&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;techstructive-blog&lt;/a&gt; by &lt;a href=&#34;https://github.com/Mr-Destructive&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Mr-Destructive&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Blogging Platform powered by Django.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Mr-Destructive meetgor.com</title>
    <id>https://waylonwalker.com/mr-destructive-meetgor-com/</id>
    <updated>2022-09-06T13:10:55Z</updated>
    <published>2022-09-06T13:10:55Z</published>
    <link href="https://waylonwalker.com/mr-destructive-meetgor-com/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about meetgor.com, an amazing project by Mr-Destructive. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/Mr-Destructive/meetgor.com&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;meetgor.com&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/Mr-Destructive&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Mr-Destructive&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;My Personal Blog and Portfolio made with Markata SSG and Python&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ sponsfreixes jinja2-fragments</title>
    <id>https://waylonwalker.com/sponsfreixes-jinja2-fragments/</id>
    <updated>2022-09-06T12:53:14Z</updated>
    <published>2022-09-06T12:53:14Z</published>
    <link href="https://waylonwalker.com/sponsfreixes-jinja2-fragments/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on jinja2-fragments by sponsfreixes.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/sponsfreixes/jinja2-fragments&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jinja2-fragments&lt;/a&gt; by &lt;a href=&#34;https://github.com/sponsfreixes&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sponsfreixes&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Render Jinja2 template block as &lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;HTML&lt;/a&gt; page fragments on Python web frameworks.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ansible ansible-language-server</title>
    <id>https://waylonwalker.com/ansible-ansible-language-server/</id>
    <updated>2022-09-03T14:16:25Z</updated>
    <published>2022-09-03T14:16:25Z</published>
    <link href="https://waylonwalker.com/ansible-ansible-language-server/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? ansible-language-server by ansible.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/ansible/ansible-language-server&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ansible-language-server&lt;/a&gt; by &lt;a href=&#34;https://github.com/ansible&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ansible&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;🚧 Ansible Language Server codebase is now included in vscode-ansible repository&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Create a new Python Project with the Hatch Cli</title>
    <id>https://waylonwalker.com/hatch-new-cli/</id>
    <updated>2022-09-02T07:54:03Z</updated>
    <published>2022-09-02T07:54:03Z</published>
    <link href="https://waylonwalker.com/hatch-new-cli/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really getting into using hatch as my go to build system, and I am really liking it so far. I am slowly finding new things that just work really well. is...</summary>
    <content type="html">&lt;p&gt;I’m really getting into using hatch as my go to build system, and I am really&#xA;liking it so far.  I am slowly finding new  things that just work really well.&#xA;&lt;code&gt;hatch new&lt;/code&gt; is one of those things that I didn’t realize I needed until I had&#xA;it.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/hatch-new.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/hatch-new.png&#34; alt=&#34;Hatch new cover image&#34;/ data-glightbox=&#34;description: Hatch new cover image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;creating new versions created by myself with stable diffusion&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/765d9f0c-c73a-44e5-8f0a-0027dff67abe.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/765d9f0c-c73a-44e5-8f0a-0027dff67abe.webp&#34; alt=&#34;hatch-new-cli.webp&#34;/ data-glightbox=&#34;description: hatch-new-cli.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;pre&gt;&lt;code&gt;❯ pipx run hatch new --help&#xA;Usage: hatch new [OPTIONS] [NAME] [LOCATION]&#xA;&#xA;  Create or initialize a project.&#xA;&#xA;Options:&#xA;  -i, --interactive  Interactively choose details about the project&#xA;  --cli              Give the project a command line interface&#xA;  --init             Initialize an existing project&#xA;  -h, --help         Show this message and exit.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Note! I am running all of these commands with pipx. I like to use pipx for&#xA;all of my system level cli applications.  To emphasis this point in the&#xA;article I am going to use &lt;code&gt;pipx run hatch&lt;/code&gt;, but you can &lt;code&gt;pipx install hatch&lt;/code&gt;&#xA;then just run &lt;code&gt;hatch&lt;/code&gt; from there.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;interacively-create-a-new-project&#34;&gt;Interacively create a new project &lt;a href=&#34;#interacively-create-a-new-project&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Running &lt;code&gt;hatch new -i&lt;/code&gt; will ask let you interactivly choose details about the&#xA;project, such as the project’s name.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;pipx run hatch new -i&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;After running and naming the project &lt;strong&gt;Hatch New&lt;/strong&gt; we end up with the following&#xA;filetree.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ tree .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── hatch_new&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── __about__.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── __init__.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── LICENSE.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── pyproject.toml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── README.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── tests&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    └── __init__.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;non-interative&#34;&gt;Non-Interative &lt;a href=&#34;#non-interative&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can also fill in the project name ahead of time, and it will run without&#xA;any questions.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/7d902784-e69e-4990-a711-22365665594c.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/7d902784-e69e-4990-a711-22365665594c.webp&#34; alt=&#34;hatch-new-another-project.webp&#34;/ data-glightbox=&#34;description: hatch-new-another-project.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ pipx run hatch new &lt;span class=&#34;s2&#34;&gt;&amp;#34;Another Project&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;another-project&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── another_project&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── __about__.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── __init__.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── tests&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── __init__.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── LICENSE.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── README.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── pyproject.toml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Note! all of these examples will create a project directory within your&#xA;current working directory.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000146.324995023.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000146.324995023.webp&#34; alt=&#34;“An astronaut working in a lab, there is a series of eggs ready to hatch baby snakes on the table, experiments running, beakers, test tubes, cyberpunk, octane render, trending on artstation, neon lighting, volumetric lighting, pink lighting” -s50 -W800 -H450 -C10.0 -Ak_lms -S324995023&#34;/ data-glightbox=&#34;description: “An astronaut working in a lab, there is a series of eggs ready to hatch baby snakes on the table, experiments running, beakers, test tubes, cyberpunk, octane render, trending on artstation, neon lighting, volumetric lighting, pink lighting” -s50 -W800 -H450 -C10.0 -Ak_lms -S324995023&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;--init&#34;&gt;–init &lt;a href=&#34;#--init&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;existing project&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;hatch new&lt;/code&gt; has an &lt;code&gt;--init&lt;/code&gt; flag in order to initialize a new hatch&#xA;pyproject.toml in an existing project.  This feels like it would be useful if&#xA;you are converting a project to hatch, or if like me you sometimes start making&#xA;something before you realize it’s something that you want to package.  Honestly&#xA;this doesn’t happen too much anymore I package most things, and I hope &lt;code&gt;hatch new&lt;/code&gt; completely breaks this habbit of mine.&lt;/p&gt;&#xA;&lt;p&gt;Let’s say I have the following existing project.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ tree&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── hatch_init&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    └── __init__.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; directory, &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; file&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I can setup packaging with hatch by running.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx run hatch new --init&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/8e43edca-57d9-4bbf-9ca8-c6d026356be3.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/8e43edca-57d9-4bbf-9ca8-c6d026356be3.webp&#34; alt=&#34;hatch-init-existing.webp&#34;/ data-glightbox=&#34;description: hatch-init-existing.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;The &lt;code&gt;pyproject.toml&lt;/code&gt; that comes out is pretty similar to the one that comes out&#xA;of the normal &lt;code&gt;hatch new&lt;/code&gt;, but without any other files.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Note that you will need to setup a &lt;code&gt;__about__.py&lt;/code&gt; yourself for the dynamic&#xA;versioning that it has setup for you.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;build-system&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;requires&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;hatchling&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;build-backend&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hatchling.build&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;project&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hatch-init&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;description&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;initialize an existing project using hatch&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;readme&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;README.md&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;requires-python&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;gt;=3.7&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;license&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;MIT&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;keywords&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;authors&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Waylon S. Walker&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;email&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;waylon@waylonwalker.com&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;classifiers&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;Development Status :: 4 - Beta&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;Programming Language :: Python&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;Programming Language :: Python :: 3.7&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;Programming Language :: Python :: 3.8&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;Programming Language :: Python :: 3.9&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;Programming Language :: Python :: 3.10&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;Programming Language :: Python :: 3.11&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;Programming Language :: Python :: Implementation :: CPython&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;Programming Language :: Python :: Implementation :: PyPy&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;dependencies&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;dynamic&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;version&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;project&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;urls&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Documentation&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;https://github.com/unknown/hatch-init#readme&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Issues&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;https://github.com/unknown/hatch-init/issues&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Source&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;https://github.com/unknown/hatch-init&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;hatch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;path&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hatch_init/__about__.py&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;hatch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;envs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;dependencies&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;pytest&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;pytest-cov&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;hatch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;envs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;scripts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;cov&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pytest --cov-report=term-missing --cov-config=pyproject.toml --cov=hatch_init --cov=tests&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;no-cov&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;cov --no-cov&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;hatch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;envs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;matrix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;python&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;37&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;38&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;39&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;310&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;311&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;coverage&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;branch&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;parallel&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;omit&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;hatch_init/__about__.py&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;coverage&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;report&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;exclude_lines&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;no cov&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;if __name__ == .__main__.:&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;if TYPE_CHECKING:&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;cli&#34;&gt;cli &lt;a href=&#34;#cli&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;hatch new&lt;/code&gt; does not stop there, it also has a &lt;code&gt;--cli&lt;/code&gt; flag to give you a cli&#xA;out of the box as well.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ pipx run hatch new &lt;span class=&#34;s2&#34;&gt;&amp;#34;new cli&amp;#34;&lt;/span&gt; --cli&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;new-cli&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── new_cli&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── cli&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   │   └── __init__.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── __about__.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── __init__.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── __main__.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── tests&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── __init__.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── LICENSE.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── README.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── pyproject.toml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;When you use the &lt;code&gt;--cli&lt;/code&gt; flag you also get &lt;code&gt;click&lt;/code&gt; as a dependency and&#xA;&lt;code&gt;project.scripts&lt;/code&gt; setup automatically.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[project]&#xA;name = &amp;#34;new-cli&amp;#34;&#xA;&#xA;# ...&#xA;&#xA;dependencies = [&#xA;  &amp;#34;click&amp;#34;,&#xA;]&#xA;&#xA;# ...&#xA;&#xA;[project.scripts]&#xA;new-cli = &amp;#34;new_cli.cli:new_cli&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000130.98801549.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000130.98801549.webp&#34; alt=&#34;“An astronaut working in a lab, there is a series of eggs ready to hatch baby snakes on the table, experiments running, beakers, test tubes, cyberpunk trending on artstation” -s50 -W800 -H450 -C7.5 -Ak_lms -S98801549&#xA;&#34;/ data-glightbox=&#34;description: “An astronaut working in a lab, there is a series of eggs ready to hatch baby snakes on the table, experiments running, beakers, test tubes, cyberpunk trending on artstation” -s50 -W800 -H450 -C7.5 -Ak_lms -S98801549&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;whats-in-the-cli&#34;&gt;what’s in the cli &lt;a href=&#34;#whats-in-the-cli&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It’s a hello-world click application.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# SPDX-FileCopyrightText: 2022-present Waylon S. Walker &amp;lt;waylon@waylonwalker.com&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# SPDX-License-Identifier: MIT&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;click&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;..__about__&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;__version__&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@click.group&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;context_settings&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;help_option_names&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;-h&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;--help&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]},&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;invoke_without_command&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@click.version_option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__version__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;prog_name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;new cli&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@click.pass_context&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;new_cli&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ctx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;click&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;click&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Hello world!&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;sneak-peek&#34;&gt;sneak peek &lt;a href=&#34;#sneak-peek&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’ll dive more into environments and the run command later, but we can run the&#xA;cli pretty damn quick with two commands. In under 5s I was able to run this cli&#xA;that it created.  This is a pretty incredible startup time.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/608b7c9c-3cff-4659-87d4-6e5618f6dbcb.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/608b7c9c-3cff-4659-87d4-6e5618f6dbcb.webp&#34; alt=&#34;pipx-run-hatch-hello-world.webp&#34;/ data-glightbox=&#34;description: pipx-run-hatch-hello-world.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000136.2274808816.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000136.2274808816.webp&#34; alt=&#34;“An astronaut working in a lab, there is a series of eggs ready to hatch baby snakes on the table, experiments running, beakers, test tubes, cyberpunk trending on artstation, neon lighting, volumetric lighting, pink lighting” -s50 -W800 -H450 -C7.5 -Ak_lms -S2274808816&#34;/ data-glightbox=&#34;description: “An astronaut working in a lab, there is a series of eggs ready to hatch baby snakes on the table, experiments running, beakers, test tubes, cyberpunk trending on artstation, neon lighting, volumetric lighting, pink lighting” -s50 -W800 -H450 -C7.5 -Ak_lms -S2274808816&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Versioning Python Projects with Hatch</title>
    <id>https://waylonwalker.com/hatch-version/</id>
    <updated>2022-09-01T13:19:22Z</updated>
    <published>2022-09-01T13:19:22Z</published>
    <link href="https://waylonwalker.com/hatch-version/" rel="alternate" type="text/html"></link>
    <summary type="text">Hatch has an amazing versioning cli for python packages that just works. It takes very little config to get going and you can start bumping versions without...</summary>
    <content type="html">&lt;p&gt;Hatch has an amazing versioning cli for python packages that just works.  It&#xA;takes very little config to get going and you can start bumping versions&#xA;without worry.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://images.waylonwalker.com/hatch-version.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img src=&#34;https://images.waylonwalker.com/hatch-version.png&#34; alt=&#34;Hatch version cover image&#34; class=&#34;more-cinematic glightbox&#34;/ data-glightbox=&#34;description: Hatch version cover image&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;creating new versions created by myself with stable diffusion&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;project-layout&#34;&gt;project layout &lt;a href=&#34;#project-layout&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;For trying out the &lt;code&gt;hatch version&lt;/code&gt; cli let’s make a simple project with the&#xA;terrible name &lt;code&gt;pkg&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ tree .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── pkg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── __about__.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── __init__.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── pyproject.toml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── README.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; directory, &lt;span class=&#34;m&#34;&gt;4&lt;/span&gt; files&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;pyprojecttoml&#34;&gt;pyproject.toml &lt;a href=&#34;#pyprojecttoml&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The main hero of this post is the &lt;code&gt;pyproject.toml&lt;/code&gt;.  This is what defines all&#xA;of our &lt;a href=&#34;https://peps.python.org/pep-0517/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/peps.python.org.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/peps.python.org.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;PEP 517&lt;/a&gt; style project setup.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;project&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pkg&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;description&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Show how to version packages with hatch&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;readme&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;README.md&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;dynamic&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;version&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;build-system&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;requires&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hatchling&amp;gt;=1.4.1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;build-backend&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hatchling.build&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;hatch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;path&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pkg/__about__.py&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;statically-versioning&#34;&gt;statically versioning &lt;a href=&#34;#statically-versioning&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;project.version&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;It is possible to set the version number inside the &lt;code&gt;pyproject.toml&lt;/code&gt;&#xA;statically.  This is fine if you just want to version your package manually,&#xA;and not through the &lt;code&gt;hatch&lt;/code&gt; cli.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;project&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pkg&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;version&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;0.0.0&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# ...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Statically versioning in pyproject.toml will not work with &lt;code&gt;hatch version&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/5e0db9e0-e60a-4a50-8f96-02f194347b2c.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/5e0db9e0-e60a-4a50-8f96-02f194347b2c.webp&#34; alt=&#34;hatch-static-version-error.webp&#34;/ data-glightbox=&#34;description: hatch-static-version-error.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Cannot &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; version when it is statically defined by the &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;project.version&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt; field&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;dynamically-versioning&#34;&gt;dynamically Versioning &lt;a href=&#34;#dynamically-versioning&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;project.dynamic&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Setting the project verion dynamically can be done by changing up the following&#xA;to your &lt;code&gt;pyproject.toml&lt;/code&gt;.  Hatch only accepts a path to store your version.  If&#xA;you need to reference  it elsewhere in your project you can grab it from the&#xA;package metadata for that file.  I would not put anything else that could&#xA;possibly clash with the version, as you might accidently change both things.&lt;/p&gt;&#xA;&lt;p&gt;If you really need to set it in more places use a package like bump2version.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;project&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pkg&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;dynamic&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;version&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# ...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;tool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;hatch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;path&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pkg/__about__.py&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Note: you can configure hatch to use a different pattern&#xA;&lt;a href=&#34;https://hatch.pypa.io/1.2/version/#configuration&#34;&gt;https://hatch.pypa.io/1.2/version/#configuration&lt;/a&gt;, but I have not found it to&#xA;be something that I need.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;--about--py&#34;&gt;&lt;strong&gt;about&lt;/strong&gt;.py &lt;a href=&#34;#--about--py&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://github.com/pypa/hatch/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;hatch&lt;/a&gt; project itself uses a&#xA;&lt;a href=&#34;https://github.com/pypa/hatch/blob/master/src/hatch/__about__.py&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;&lt;strong&gt;about&lt;/strong&gt;.py&lt;/a&gt;&#xA;to store it’s version. It’s sole content is a single &lt;code&gt;__version__&lt;/code&gt; variable.  I&#xA;don’t have any personal issues with this so I am going to be following this in&#xA;my projects that use hatch.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;__version__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;0.0.0&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;versioning&#34;&gt;versioning &lt;a href=&#34;#versioning&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;a href=&#34;https://hatch.pypa.io/1.2/version/#updating&#34;&gt;hatch version docs&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Hatch has a pretty intuitive versioning api.  &lt;code&gt;hatch version&lt;/code&gt; gives you the&#xA;version.  If you pass in a version like &lt;code&gt;hatch version &amp;#34;0.0.1&amp;#34;&lt;/code&gt; it will set it&#xA;to that version as long as it is in the future, otherwise it will error.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# print the current version&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hatch version&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# set the version to 0.0.1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hatch version &lt;span class=&#34;s2&#34;&gt;&amp;#34;0.0.1&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;bumping&#34;&gt;bumping &lt;a href=&#34;#bumping&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can bump parts of the &lt;a href=&#34;https://semver.org/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/semver.org.jpg&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/semver.org.jpg&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;semver&lt;/a&gt; version.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# minor bump&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hatch version minor&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# beta pre-release bump&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# If published to pypi this can be installed with the --pre flag to pip&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hatch version b&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# bump minor and beta&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hatch version minor,b&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# release all of the --pre-release flags such as alpha beta rc&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hatch release&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;example&#34;&gt;Example &lt;a href=&#34;#example&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is a screenshot of bumping a projet along.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/322a0310-0cea-4320-9f13-955bcd6b5e17.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/322a0310-0cea-4320-9f13-955bcd6b5e17.webp&#34; alt=&#34;hatch-version-cli.webp&#34;/ data-glightbox=&#34;description: hatch-version-cli.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;gitops&#34;&gt;GitOps &lt;a href=&#34;#gitops&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;In my github actions flow I will be utilizing this to automate my versions. In&#xA;my side projects I use the &lt;code&gt;develop&lt;/code&gt; branch to release –pre releases.  I have&#xA;all of my own dependent projets running on these –pre releases, this allows me&#xA;to cut myself in my own projects before anyone else.  Then on main I&#xA;automatically release this beta version.&lt;/p&gt;&#xA;&lt;h2 id=&#34;github-actions&#34;&gt;GitHub Actions &lt;a href=&#34;#github-actions&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is what the ci/cd for &lt;code&gt;markata&lt;/code&gt; looks like. There  might be a better&#xA;workflow strategy, but I use a single github actions workflow and cut branches&#xA;to release –pre releases and full release.  These steps will bump, tag,&#xA;commit, and deploy for me.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;automatically pre-release develop branch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;github.ref == &amp;#39;refs/heads/develop&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sd&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;          git config --global user.name &amp;#39;autobump&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;          git config --global user.email &amp;#39;autobump@markata.dev&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;          VERSION=`hatch version`&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;          # if current version is not already beta then bump minor and beta&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;          [ -z &amp;#34;${b##*`hatch version`*}&amp;#34; ] &amp;amp;&amp;amp; hatch version b || hatch version minor,b&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;          NEW_VERSION=`hatch version`&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;          git add markta/__about__.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;          git commit -m &amp;#34;Bump version: $VERSION → $NEW_VERSION&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;          git tag $VERSION&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;          git push&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;          git push --tags&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;automatically release main branch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;github.ref == &amp;#39;refs/heads/main&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sd&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;          git config --global user.name &amp;#39;autobump&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;          git config --global user.email &amp;#39;autobump@markata.dev&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;          VERSION=`hatch version`&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;          hatch version release&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;          NEW_VERSION=`hatch version`&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;          git add markta/__about__.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;          git commit -m &amp;#34;Bump version: $VERSION → $NEW_VERSION&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;          git tag $VERSION&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;          git push&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;          git push --tags&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;build&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sd&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;          python -m build&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pypi-publish&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;github.ref == &amp;#39;refs/heads/develop&amp;#39; || github.ref == &amp;#39;refs/heads/main&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pypa/gh-action-pypi-publish@v1.1.0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;password&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${{ secrets.pypi_password }}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;hatch-version-action&#34;&gt;Hatch Version Action &lt;a href=&#34;#hatch-version-action&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I am setting up a github custom action&#xA;&lt;a href=&#34;https://github.com/WaylonWalker/hatch-version-action&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;waylonwalker/hatch-version-action&lt;/a&gt;&#xA;that will lint, test, bump, and publish for me in one step.  More on that in&#xA;the future.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ laytan cloak.nvim</title>
    <id>https://waylonwalker.com/laytan-cloak-nvim/</id>
    <updated>2022-08-31T14:46:49Z</updated>
    <published>2022-08-31T14:46:49Z</published>
    <link href="https://waylonwalker.com/laytan-cloak-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred cloak.nvim by laytan. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/laytan/cloak.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cloak.nvim&lt;/a&gt; by &lt;a href=&#34;https://github.com/laytan&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;laytan&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;Cloak allows you to overlay *’s over defined patterns in defined files.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>From Markdown to Blog with Markata | lightning talk | python web conf 2022</title>
    <id>https://waylonwalker.com/from-markdown-to-blog-with-markata/</id>
    <updated>2022-08-31T10:01:09Z</updated>
    <published>2022-08-31T10:01:09Z</published>
    <link href="https://waylonwalker.com/from-markdown-to-blog-with-markata/" rel="alternate" type="text/html"></link>
    <summary type="text">Markata is a great python framework that allows you to go from markdown to a full website very quickly. You can get up and running with nothing more than...</summary>
    <content type="html">&lt;p&gt;Markata is a great python framework that allows you to go from markdown to a&#xA;full website very quickly.  You can get up and running with nothing more than&#xA;Markdown.  It is also built on a full plugin architecture, so if there is extra&#xA;functionality that you want to add, you can create a plugin to make it behave&#xA;like you want.&lt;/p&gt;&#xA;&lt;p&gt;Full transparancy… I built markata.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-talk&#34;&gt;The talk &lt;a href=&#34;#the-talk&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The talk is live on YouTube.  Make sure you check out the other videos from the&#xA;conference.  There were quite a few quality talks that deserve a watch as well.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/Wq9YBamSgs0&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://youtu.be/Wq9YBamSgs0&lt;/a&gt;&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000221.1721400243.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000221.1721400243.webp&#34; alt=&#34;“An astronaut working in a lab, hacking on a computer terminal, htop is running, shallow depth of field beakers, test tubes, volumetric lighting, pink lighting, by victo ngai, killian eng vibrant colours, dynamic lighting, digital art” -s50 -W768 -H448 -C7.5 -Ak_lms -S3617210203&#34;/ data-glightbox=&#34;description: “An astronaut working in a lab, hacking on a computer terminal, htop is running, shallow depth of field beakers, test tubes, volumetric lighting, pink lighting, by victo ngai, killian eng vibrant colours, dynamic lighting, digital art” -s50 -W768 -H448 -C7.5 -Ak_lms -S3617210203&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Packages I Maintain</title>
    <id>https://waylonwalker.com/packages-i-maintain/</id>
    <updated>2022-08-30T20:02:38Z</updated>
    <published>2022-08-30T20:02:38Z</published>
    <link href="https://waylonwalker.com/packages-i-maintain/" rel="alternate" type="text/html"></link>
    <summary type="text">I open sourced the static site framework that I use to build my-blog among other side projects. It&#39;s a plugins all the way down static site generator, that...</summary>
    <content type="html">&lt;h2 id=&#34;markata&#34;&gt;Markata &lt;a href=&#34;#markata&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I open sourced the static site framework that I use to build&#xA;&lt;a href=&#34;https://waylonwalker.com/&#34;&gt;my-blog&lt;/a&gt; among other side projects. It’s a plugins&#xA;all the way down static site generator, that makes me happy to use.&lt;/p&gt;&#xA;&lt;p&gt;{% gh_repo_list_topic “waylonwalker”, “markata” %}&lt;/p&gt;&#xA;&lt;h2 id=&#34;repos-used-to-build-this-blog&#34;&gt;Repos used to build this blog &lt;a href=&#34;#repos-used-to-build-this-blog&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/&#34;&gt;my-blog&lt;/a&gt; is built on a number of small repos. I&#xA;set it up this way so that creating content is fast and easy to do. I don’t&#xA;have to worry about carrying around large images with my lightweight text&#xA;files just to make some posts.&lt;/p&gt;&#xA;&lt;p&gt;{% gh_repo_list_topic “waylonwalker”, “personal-website” %}&lt;/p&gt;&#xA;&lt;h2 id=&#34;kedro&#34;&gt;Kedro &lt;a href=&#34;#kedro&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I am a heavy user of the &lt;a href=&#34;https://kedro.org&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro&lt;/a&gt; framework, and a big&#xA;advocate for using some sort of DAG framework for your data pipelines. kedro&#xA;is built all in python which makes it easy for a python dev like me to extend,&#xA;run, maintain, and deploy.&lt;/p&gt;&#xA;&lt;p&gt;{% gh_repo_list_topic “waylonwalker”, “kedro” %}&lt;/p&gt;&#xA;&lt;h2 id=&#34;neovim-plugins&#34;&gt;Neovim Plugins &lt;a href=&#34;#neovim-plugins&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I use vim for all of my text editing needs. It brings me joy to make any part&#xA;of it just a bit smoother. I have written a few plugins that help me achieve&#xA;that silky smooth workflow.&lt;/p&gt;&#xA;&lt;p&gt;{% gh_repo_list_topic “waylonwalker”, “neovim-plugin” %}&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>I spoke at Python Web Conf 2022</title>
    <id>https://waylonwalker.com/i-spoke-at-python-web-conf-2022/</id>
    <updated>2022-08-30T08:40:22Z</updated>
    <published>2022-08-30T08:40:22Z</published>
    <link href="https://waylonwalker.com/i-spoke-at-python-web-conf-2022/" rel="alternate" type="text/html"></link>
    <summary type="text">I spoke at python webconf in March 2022 about how I deploy this blog on a continuous basis.</summary>
    <content type="html">&lt;p&gt;I spoke at python webconf in March 2022 about how I deploy this blog on a&#xA;continuous basis.&lt;/p&gt;&#xA;&lt;p&gt;Building this blog has brought me a lot of benefits.  I have&#xA;a set of custom curated notes to help describe a problem and how to solve it to&#xA;me.  At theis point it’s not uncommon to google an Issue I am having and&#xA;finding my own blog with exactly the solution I need at the top.&lt;/p&gt;&#xA;&lt;p&gt;I also bump into people from time to time that recognize me from the blog, its&#xA;a nice conversation starter, and street cred.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-talk&#34;&gt;The Talk &lt;a href=&#34;#the-talk&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The talk recently released on Youtube, you can watch it without having a ticket&#xA;to the conference for free.  There were a bunch of other talks that you should&#xA;check out too!&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/JDZVjDCTKHE&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://youtu.be/JDZVjDCTKHE&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ P3rf rofi-network-manager</title>
    <id>https://waylonwalker.com/p3rf-rofi-network-manager/</id>
    <updated>2022-08-29T14:56:45Z</updated>
    <published>2022-08-29T14:56:45Z</published>
    <link href="https://waylonwalker.com/p3rf-rofi-network-manager/" rel="alternate" type="text/html"></link>
    <summary type="text">rofi-network-manager by P3rf is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/P3rf/rofi-network-manager&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rofi-network-manager&lt;/a&gt; by &lt;a href=&#34;https://github.com/P3rf&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;P3rf&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;A manager for network connections using bash, rofi, nmcli,qrencode.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>I turned on 2FA for all of my pypi packages</title>
    <id>https://waylonwalker.com/pypi-2fa/</id>
    <updated>2022-08-29T07:51:54Z</updated>
    <published>2022-08-29T07:51:54Z</published>
    <link href="https://waylonwalker.com/pypi-2fa/" rel="alternate" type="text/html"></link>
    <summary type="text">I got all the pypi packages that I own behind 2 factor authentication. 💪</summary>
    <content type="html">&lt;p&gt;I got all the pypi packages that I own behind 2 factor authentication. 💪&lt;/p&gt;&#xA;&lt;p&gt;Recently this really made it’s rounds in the python news since pypi was&#xA;requiring critical package maintainers to have 2FA on and even offering them&#xA;hardware tokens to help them turn this on.&lt;/p&gt;&#xA;&lt;p&gt;I feel like this caused a bit of confusion as turning on 2FA does not mean that&#xA;you need to do anything different to deploy a package, and it &lt;strong&gt;DOES NOT&lt;/strong&gt;&#xA;require a hardware token.  You can continue using your favorite 2FA app.&lt;/p&gt;&#xA;&lt;p&gt;You might wonder what this means for my projects. It means that to edit any&#xA;&lt;em&gt;sensitive content&lt;/em&gt; such as pull a new api token, add/remove maintainers, or&#xA;deleting a release I need to use a TOPT (time based one time password)&#xA;application such as Google Authenticator, Microsoft Authenticator, Authy, or&#xA;FreeOTP.&lt;/p&gt;&#xA;&lt;p&gt;This has very little change to my overall workflow as my CI system still&#xA;automatically deploys for me with the same api token as before.&lt;/p&gt;&#xA;&lt;p&gt;This is one small thing that maintainers can do to prevent supply chain attacks&#xA;on their projects that they put so much work into.&lt;/p&gt;&#xA;&lt;h2 id=&#34;login&#34;&gt;Login &lt;a href=&#34;#login&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;When I log in I now get this extra screen asking for an auth token.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/ba6d1b7b-ea84-4b03-b53f-53ef7b1e9174.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/ba6d1b7b-ea84-4b03-b53f-53ef7b1e9174.webp&#34; alt=&#34;pypi-2fa-code.webp&#34;/ data-glightbox=&#34;description: pypi-2fa-code.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;my-packages&#34;&gt;My packages &lt;a href=&#34;#my-packages&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Once I turned on 2FA for my account I could then turn on 2FA requirement for&#xA;each project.  I am not sure how much safety there is in pypi, it might require&#xA;all maintainers to have it turned on before it allows packages to have it&#xA;turned on.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/8a8c66d5-61a0-4a89-a23c-09976b8e95ae.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/8a8c66d5-61a0-4a89-a23c-09976b8e95ae.webp&#34; alt=&#34;my-pypi-packages-aug-2022.webp&#34;/ data-glightbox=&#34;description: my-pypi-packages-aug-2022.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Once turned on it requires anyone who maintains the project to have 2FA on to&#xA;be able to edit any sensitive content.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pypa build</title>
    <id>https://waylonwalker.com/pypa-build/</id>
    <updated>2022-08-28T19:57:27Z</updated>
    <published>2022-08-28T19:57:27Z</published>
    <link href="https://waylonwalker.com/pypa-build/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? build by pypa.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/pypa/build&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;build&lt;/a&gt; by &lt;a href=&#34;https://github.com/pypa&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pypa&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A simple, correct Python build frontend&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>I was on Talk Python</title>
    <id>https://waylonwalker.com/talk-python-kedro/</id>
    <updated>2022-08-27T20:52:02Z</updated>
    <published>2022-08-27T20:52:02Z</published>
    <link href="https://waylonwalker.com/talk-python-kedro/" rel="alternate" type="text/html"></link>
    <summary type="text">After years of listening to talkpython.fm I had the honor to be part of episode-337 to talk about Kedro for maintainable data science.</summary>
    <content type="html">&lt;p&gt;After years of listening to &lt;a href=&#34;https://talkpython.fm/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/talkpython.fm.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/talkpython.fm.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;talkpython.fm&lt;/a&gt; I had the&#xA;honor to be part of&#xA;&lt;a href=&#34;https://talkpython.fm/episodes/show/337/kedro-for-maintainable-data-science&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/talkpython.fm.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/talkpython.fm.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;episode-337&lt;/a&gt;&#xA;to talk about Kedro for maintainable data science.&lt;/p&gt;&#xA;&lt;p&gt;I was quite nervous to talk on a show that I helped shape my career in such a&#xA;profound way. I started my journey towards software engineering near Michaels&#xA;first few episodes. His discussions with such great developers over the years&#xA;has made an huge impact on my skill. It has always given me great advice and&#xA;topics to go deeper on.&lt;/p&gt;&#xA;&lt;p&gt;During the episode I tried my best to let Yetu and Ivan take the spotlight as&#xA;the maintainer and chime in with my experience as a user of kedro.&lt;/p&gt;&#xA;&lt;h2 id=&#34;video-version&#34;&gt;Video Version &lt;a href=&#34;#video-version&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/WTcjvwkXoY0&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/WTcjvwkXoY0&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Michael made the call available on youtube as well as the audio only&#xA;&lt;a href=&#34;https://talkpython.fm/episodes/show/337/kedro-for-maintainable-data-science&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/talkpython.fm.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/talkpython.fm.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;podcast&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ squidfunk mkdocs-material</title>
    <id>https://waylonwalker.com/squidfunk-mkdocs-material/</id>
    <updated>2022-08-25T23:50:45Z</updated>
    <published>2022-08-25T23:50:45Z</published>
    <link href="https://waylonwalker.com/squidfunk-mkdocs-material/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out squidfunk and their project mkdocs-material.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/squidfunk&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;squidfunk&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/squidfunk/mkdocs-material&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mkdocs-material&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Documentation that simply works&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>use vim to remove duplicates</title>
    <id>https://waylonwalker.com/vim-sort-u/</id>
    <updated>2022-08-25T06:50:32Z</updated>
    <published>2022-08-25T06:50:32Z</published>
    <link href="https://waylonwalker.com/vim-sort-u/" rel="alternate" type="text/html"></link>
    <summary type="text">I just love how some features of vim are so discoverable and memorable once you really start to grasp it. Sorting and uniqing your files or ranges is one of...</summary>
    <content type="html">&lt;p&gt;I just love how some features of vim are so discoverable and memorable once you&#xA;really start to grasp it.  Sorting and uniqing your files or ranges is one of&#xA;those examples for me.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;#34; sort the file&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sort&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;#34; sort the file only keeping unique lines&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sort&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;u&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;#34; sort a range&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;,&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sort&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;#34; sort a range only keeping unique lines&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;,&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sort&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;u&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I recently used this to dedupe my autogenerated links section for&#xA;&lt;a href=&#34;https://waylonwalker.com/rich-syntax-range-style/&#34;&gt;rich-syntax-range-style&lt;/a&gt;.&#xA;More often I am using it to sort and uniqify objects like arrays and lists.&lt;/p&gt;&#xA;&lt;p&gt;Here is what the markdown looks like.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; [&lt;span class=&#34;nt&#34;&gt;py-tree-sitter&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://github.com/tree-sitter/py-tree-sitter&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; [&lt;span class=&#34;nt&#34;&gt;rich&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://github.com/Textualize/rich&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; [&lt;span class=&#34;nt&#34;&gt;@textualizeio&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://twitter.com/textualizeio&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; [&lt;span class=&#34;nt&#34;&gt;rich&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://github.com/Textualize/rich&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; [&lt;span class=&#34;nt&#34;&gt;another post&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://waylonwalker.com/designing-kedro-router&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; [&lt;span class=&#34;nt&#34;&gt;print-register-pipelines&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://screenshots.waylonwalker.com/print-register-pipelines.webp&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; [&lt;span class=&#34;nt&#34;&gt;rich&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://github.com/Textualize/rich&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; [&lt;span class=&#34;nt&#34;&gt;console-print-register-pipelines&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://screenshots.waylonwalker.com/console-print-register-pipelines.webp&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; [&lt;span class=&#34;nt&#34;&gt;rich&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://github.com/Textualize/rich&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; [&lt;span class=&#34;nt&#34;&gt;syntax-print-register-pipelines&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://screenshots.waylonwalker.com/syntax-print-register-pipelines.webp&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; [&lt;span class=&#34;nt&#34;&gt;rich&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://github.com/Textualize/rich&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; [&lt;span class=&#34;nt&#34;&gt;syntax-print-register-pipelines-highlight-line&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://screenshots.waylonwalker.com/syntax-print-register-pipelines-highlight-line.webp&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; [&lt;span class=&#34;nt&#34;&gt;py-tree-sitter&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://github.com/tree-sitter/py-tree-sitter&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then typing &lt;code&gt;vap:sort u&lt;/code&gt; yields a uniqly sorted list of links.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; [&lt;span class=&#34;nt&#34;&gt;@textualizeio&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://twitter.com/textualizeio&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; [&lt;span class=&#34;nt&#34;&gt;another post&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://waylonwalker.com/designing-kedro-router&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; [&lt;span class=&#34;nt&#34;&gt;console-print-register-pipelines&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://screenshots.waylonwalker.com/console-print-register-pipelines.webp&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; [&lt;span class=&#34;nt&#34;&gt;print-register-pipelines&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://screenshots.waylonwalker.com/print-register-pipelines.webp&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; [&lt;span class=&#34;nt&#34;&gt;py-tree-sitter&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://github.com/tree-sitter/py-tree-sitter&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; [&lt;span class=&#34;nt&#34;&gt;rich&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://github.com/Textualize/rich&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; [&lt;span class=&#34;nt&#34;&gt;syntax-print-register-pipelines-highlight-line&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://screenshots.waylonwalker.com/syntax-print-register-pipelines-highlight-line.webp&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; [&lt;span class=&#34;nt&#34;&gt;syntax-print-register-pipelines&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://screenshots.waylonwalker.com/syntax-print-register-pipelines.webp&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/vim-sort-u.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Highlighting text ranges with Rich | python</title>
    <id>https://waylonwalker.com/rich-syntax-range-style/</id>
    <updated>2022-08-24T20:06:34Z</updated>
    <published>2022-08-24T20:06:34Z</published>
    <link href="https://waylonwalker.com/rich-syntax-range-style/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I&#39;ve been playing with py-tree-sitter a bit and I wanted to highlight match ranges, but was unable to figure out how to do it with rich, so I reached...</summary>
    <content type="html">&lt;p&gt;Today I’ve been playing with&#xA;&lt;a href=&#34;https://github.com/tree-sitter/py-tree-sitter&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;py-tree-sitter&lt;/a&gt; a bit and I&#xA;wanted to highlight match ranges, but was unable to figure out how to do it&#xA;with &lt;a href=&#34;https://github.com/Textualize/rich&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rich&lt;/a&gt;, so I reached out to&#xA;&lt;a href=&#34;https://twitter.com/textualizeio&#34;&gt;@textualizeio&lt;/a&gt; for help.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://twitter.com/_WaylonWalker/status/1562469770766589952&#34;&gt;https://twitter.com/_WaylonWalker/status/1562469770766589952&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;While waiting for that reply let’s show how we got this far.&lt;/p&gt;&#xA;&lt;h2 id=&#34;imports&#34;&gt;imports &lt;a href=&#34;#imports&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Lets import all the classes that we need from &lt;a href=&#34;https://github.com/Textualize/rich&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rich&lt;/a&gt; and setup a console to print&#xA;to.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;rich.console&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Console&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;rich.syntax&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Syntax&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;rich.style&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Style&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;console&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;some-code&#34;&gt;some code &lt;a href=&#34;#some-code&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now we need some code to highlight. I am going to rip my &lt;code&gt;register_pipeline&lt;/code&gt;&#xA;from &lt;a href=&#34;https://waylonwalker.com/designing-kedro-router&#34;&gt;another post&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;code&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;from find_kedro import find_kedro&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;def register_pipelines(self) -&amp;gt; Dict[str, Pipeline]:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    &amp;#34;&amp;#34;&amp;#34;Register the project&amp;#39;s pipeline.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    Returns:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;        A mapping from a pipeline name to a ``Pipeline`` object.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    &amp;#34;&amp;#34;&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    return find_kedro()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;print&#34;&gt;print &lt;a href=&#34;#print&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;We could simply print out the code we have as a variable, but thats a bit hard&#xA;to read.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/765c471d-990f-4c7c-9c99-7a039c4db900.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/765c471d-990f-4c7c-9c99-7a039c4db900.webp&#34; alt=&#34;print-register-pipelines.webp&#34;/ data-glightbox=&#34;description: print-register-pipelines.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;consoleprint&#34;&gt;console.print &lt;a href=&#34;#consoleprint&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;printing with &lt;a href=&#34;https://github.com/Textualize/rich&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rich&lt;/a&gt;’s console makes it a little better, but not much by default.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/b946c8b4-c1f0-4d58-8709-90c8f95a1f77.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/b946c8b4-c1f0-4d58-8709-90c8f95a1f77.webp&#34; alt=&#34;console-print-register-pipelines.webp&#34;/ data-glightbox=&#34;description: console-print-register-pipelines.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;syntax&#34;&gt;Syntax &lt;a href=&#34;#syntax&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;We can pull from &lt;a href=&#34;https://github.com/Textualize/rich&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rich&lt;/a&gt;’s syntax module to really pretty this up.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;syntax&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Syntax&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;code&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;python&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line_numbers&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;syntax&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/f9329423-c0f5-4263-b241-b8f470fc758c.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/f9329423-c0f5-4263-b241-b8f470fc758c.webp&#34; alt=&#34;syntax-print-register-pipelines.webp&#34;/ data-glightbox=&#34;description: syntax-print-register-pipelines.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Now we are getting some really impressive print outs right in the terminal!&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;note that I have ipython set to use &lt;a href=&#34;https://github.com/Textualize/rich&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rich&lt;/a&gt;, you will need to console.print() in scripts&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;highlight-lines&#34;&gt;highlight lines &lt;a href=&#34;#highlight-lines&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now we can start highlighting lines right when we initialize our &lt;code&gt;Syntax&lt;/code&gt;&#xA;instance.  It looks ok.  It’s not super visible, but more importantly its not&#xA;granular enough.  I want to highlight specific ranges like the word&#xA;register_pipelines.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;syntax&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Syntax&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;code&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;python&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line_numbers&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;highlight_lines&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;syntax&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/20b4564e-3a08-4e5a-9bed-cda07779c8fb.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/20b4564e-3a08-4e5a-9bed-cda07779c8fb.webp&#34; alt=&#34;syntax-print-register-pipelines-highlight-line.webp&#34;/ data-glightbox=&#34;description: syntax-print-register-pipelines-highlight-line.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;This hows the line, but still is not very accurate.&lt;/p&gt;&#xA;&lt;h2 id=&#34;highlight-text&#34;&gt;highlight text &lt;a href=&#34;#highlight-text&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;[@textualizeio] got back to me, let’s see if What we can do with stylize_range!&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://twitter.com/textualizeio/status/1562487302274043904&#34;&gt;https://twitter.com/textualizeio/status/1562487302274043904&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;syntax&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Syntax&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;code&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;python&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line_numbers&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;style&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bgcolor&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;deep_pink4&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;syntax&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stylize_range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;syntax&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This gives us the final result we are looking for, we can easily see what is&#xA;being targeted here.  In this case the function name &lt;code&gt;register_pipelines&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/b5f27c34-6ffe-425c-b2df-8ade7c5b6f8b.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/b5f27c34-6ffe-425c-b2df-8ade7c5b6f8b.webp&#34; alt=&#34;syntax-highlight-range-register-pipelines.webp&#34;/ data-glightbox=&#34;description: syntax-highlight-range-register-pipelines.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;This turns out to be exacly what I am looking for.  Now I have an easy way to&#xA;print out highlighted code wtih my&#xA;&lt;a href=&#34;https://github.com/tree-sitter/py-tree-sitter&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;py-tree-sitter&lt;/a&gt; query results.&lt;/p&gt;&#xA;&lt;h2 id=&#34;links&#34;&gt;Links &lt;a href=&#34;#links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://twitter.com/textualizeio&#34;&gt;@textualizeio&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/designing-kedro-router&#34;&gt;another post&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tree-sitter/py-tree-sitter&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;py-tree-sitter&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/Textualize/rich&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rich&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>vimgrep open buffers</title>
    <id>https://waylonwalker.com/vimgrep-open-buffers/</id>
    <updated>2022-08-22T13:17:32Z</updated>
    <published>2022-08-22T13:17:32Z</published>
    <link href="https://waylonwalker.com/vimgrep-open-buffers/" rel="alternate" type="text/html"></link>
    <summary type="text">How to vimgrep over hidden files.</summary>
    <content type="html">&lt;p&gt;How to vimgrep over hidden files.&lt;/p&gt;&#xA;&lt;p&gt;I needed to delete all build pipeline steps that were named &lt;code&gt;upload docs&lt;/code&gt;.  I&#xA;currently have about 60 projects running from the same template all running&#xA;very similar builds.  In the past I’ve scripted out migrations for large&#xA;changes like this, they involved writing a python script that would load the&#xA;yaml file into a dictionary, find the corresponding steps make the change and&#xA;write it back out.&lt;/p&gt;&#xA;&lt;p&gt;Today’s job was much simplar, just delete the step, were all steps are&#xA;surrounded by newlines.  My first thought was to just open all files in vim and&#xA;run &lt;code&gt;dap&lt;/code&gt;.  I just needed to get these files:positions into my quickfix.  My&#xA;issue is that all the builds reside within hidden directories by convention.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-issue&#34;&gt;The issue &lt;a href=&#34;#the-issue&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;variability&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;After searching through all the projects it was clear that all the steps were&#xA;in their own paragraph, though I was not 100% confident enough to completely&#xA;automate it, and the word &lt;code&gt;upload docs&lt;/code&gt; was in the paragraph.&lt;/p&gt;&#xA;&lt;p&gt;some were a two liner&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;upload docs&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;aws s3 ...&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Some had a variation in the name&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;upload docs to s3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;aws s3 ...&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;some were more than 2 lines.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;upload docs&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sd&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;    aws s3 ...&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;some used a different command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;upload docs&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sd&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;    python ...&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;templates-are-great&#34;&gt;Templates are great &lt;a href=&#34;#templates-are-great&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;but they change&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Templates are amazing, and tools like cookiecutter and copier are essential in&#xA;my workflow, but those templates change over time. Some things are a constant,&#xA;and others like this one are an ever evolving beast until they are tamed into&#xA;something the team is happy with.&lt;/p&gt;&#xA;&lt;h2 id=&#34;vimgrep-over-hidden-files&#34;&gt;vimgrep over hidden files &lt;a href=&#34;#vimgrep-over-hidden-files&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I know all the files that I care to search for are called build.yml, and they&#xA;are in a hidden directory.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;:args `fd -H build.yml`&#xA;:vimgrep /upload docs/ ##&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Once opened as a buffer by using args, and a handy fd command I can vimgrep&#xA;over all the open buffers using &lt;code&gt;##&lt;/code&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Open buffers are represented by ##&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Now I can just &lt;code&gt;dap&lt;/code&gt; and &lt;code&gt;:cnext&lt;/code&gt; my way through the list of changes that I&#xA;have, and know that I hit every one of them when I am at the end of my list.&#xA;And can double check this in about 10s by scrolling back through the quickfix&#xA;list.&lt;/p&gt;&#xA;&lt;h2 id=&#34;vim-points-achieved&#34;&gt;Vim points achieved &lt;a href=&#34;#vim-points-achieved&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You’re not a true vim enthusiast until you have spent 10 minutes writing a blog&#xA;post about how vim saved you 5 minutes.  Check out all the other times this has&#xA;happened to me in the &lt;a href=&#34;https://waylonwalker.com/vim/&#34;&gt;vim&lt;/a&gt; tag.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>markata 0.3.0 is 15-20% faster</title>
    <id>https://waylonwalker.com/markata-0-3-0/</id>
    <updated>2022-08-21T13:53:20Z</updated>
    <published>2022-08-21T13:53:20Z</published>
    <link href="https://waylonwalker.com/markata-0-3-0/" rel="alternate" type="text/html"></link>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://images.waylonwalker.com/DALL%C2%B7E%202022-08-21%2015.03.04%20-%20An%20expressive%20oil%20painting%20of%20a%20sprinter%20edging%20out%20their%20component%20at%20the%20finish%20line,%20depicted%20as%20an%20explosion%20of%20a%20nebula.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img src=&#34;https://images.waylonwalker.com/DALL%C2%B7E%202022-08-21%2015.03.04%20-%20An%20expressive%20oil%20painting%20of%20a%20sprinter%20edging%20out%20their%20component%20at%20the%20finish%20line,%20depicted%20as%20an%20explosion%20of%20a%20nebula.png&#34; alt=&#34;image from Dall-e&#34; class=&#34;more-cinematic glightbox&#34;/ data-glightbox=&#34;description: image from Dall-e&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;a sprinter edging out his opponent by Dall-e&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It’s about time to release Markata 0.3.0.  I’ve had 8 pre-releases since the&#xA;last release, but more importantly it has about 3 months of updates.  Many of&#xA;which are just cleaning up bad practices that were showing up as hot spots on&#xA;my &lt;code&gt;pyinstrument&lt;/code&gt; reports&lt;/p&gt;&#xA;&lt;p&gt;Markata started off partly as a python developer frustrated with using nodejs&#xA;for everything, and a desire to learn how to make frameworks in pluggy. Little&#xA;did I know how flexible pluggy would make it.  It started out just as my blog&#xA;generator, but has turned into quite a bit more.&lt;/p&gt;&#xA;&lt;p&gt;Over time this side project has grown some warts and some of them were now&#xA;becoming a big enough issue it was time to cut them out.&lt;/p&gt;&#xA;&lt;h2 id=&#34;lets-compare&#34;&gt;Let’s compare &lt;a href=&#34;#lets-compare&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I like to use my tils articles for examples and tests like this as there are&#xA;enough articles for a good test, but they are pretty short and quick to render.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir ~/git/tils/tils&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp  ~/git/waylonwalker.com/pages/til/ ~/tils/tils -r&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ~/git/tils/tils&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;running-tils-on-020&#34;&gt;running tils on 0.2.0 &lt;a href=&#34;#running-tils-on-020&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;At the time of writing this is the current version of markata, so just make a&#xA;new venv and run it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python3 -m venv .venv --prompt &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;basename &lt;span class=&#34;nv&#34;&gt;$PWD&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install markata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;markata clean&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;markata build&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;cold tils: 14.523&#xA;warm tils:  1.028&lt;/p&gt;&#xA;&lt;h2 id=&#34;running-tils-on-030b8&#34;&gt;running tils on 0.3.0b8 &lt;a href=&#34;#running-tils-on-030b8&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python3 -m venv .venv --prompt &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;basename &lt;span class=&#34;nv&#34;&gt;$PWD&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# --pre installs pre-releases that include a b in their version name&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install markata --pre&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;markata clean&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;markata build&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;cold tils: 11.551 (+20%)&#xA;warm tils:  0.860 (+16%)&lt;/p&gt;&#xA;&lt;h2 id=&#34;pyinstrument&#34;&gt;pyinstrument &lt;a href=&#34;#pyinstrument&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;These measurements were taken with pyinstrument mostly out of convenience since&#xA;there is already a pyinstrument hook built in, but also because I like&#xA;pyinstrument.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/4dca6bd0-8b81-4260-a303-b062f7152a8c.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/4dca6bd0-8b81-4260-a303-b062f7152a8c.webp&#34; alt=&#34;pyinstrument-markata==0.3.0b8-tils-hot.webp&#34;/ data-glightbox=&#34;description: pyinstrument-markata==0.3.0b8-tils-hot.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Here is the pyinstrument report from the last run.&lt;/p&gt;&#xA;&lt;h2 id=&#34;my-machine&#34;&gt;My Machine &lt;a href=&#34;#my-machine&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This comparison was not very exhaustive. It was ran on my pretty new to me&#xA;Ryzen 5 3600 machine.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/80cd2f7a-8cf0-42ae-a235-d537478d00a7.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/80cd2f7a-8cf0-42ae-a235-d537478d00a7.webp&#34; alt=&#34;neofetch-8-21-2022.webp&#34;/ data-glightbox=&#34;description: neofetch-8-21-2022.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;the-changes&#34;&gt;The changes &lt;a href=&#34;#the-changes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Most of these changes revolve in how the lifecycle is ran.  It was trying to be&#xA;extra cautious and run previous steps for you if it thought it might be&#xA;needes, in reality it was rerunning a few steps multiple times no matter what.&lt;/p&gt;&#xA;&lt;p&gt;The other thing I turned off by default, but can be opted into, is&#xA;beautifulasoup’s prettify.  That was one of the slower steps ran on my site.&lt;/p&gt;&#xA;&lt;h2 id=&#34;030&#34;&gt;0.3.0 &lt;a href=&#34;#030&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It should be out by the time you see this, I wanted to compare the changes I&#xA;had made and make sure that it was still making forward progress and thought I&#xA;would share the results.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ CompVis stable-diffusion</title>
    <id>https://waylonwalker.com/compvis-stable-diffusion/</id>
    <updated>2022-08-20T18:39:09Z</updated>
    <published>2022-08-20T18:39:09Z</published>
    <link href="https://waylonwalker.com/compvis-stable-diffusion/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out stable-diffusion by CompVis. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/CompVis/stable-diffusion&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;stable-diffusion&lt;/a&gt; by &lt;a href=&#34;https://github.com/CompVis&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;CompVis&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;A latent text-to-image diffusion model&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>name it claim it aim it</title>
    <id>https://waylonwalker.com/name-it-claim-it-aim-it/</id>
    <updated>2022-08-04T14:28:30Z</updated>
    <published>2022-08-04T14:28:30Z</published>
    <link href="https://waylonwalker.com/name-it-claim-it-aim-it/" rel="alternate" type="text/html"></link>
    <summary type="text">People exceptionally talented in the Deliberative theme are best described by &gt; the serious care they take in making decisions or choices. They anticipate &gt;...</summary>
    <content type="html">&lt;h2 id=&#34;deliberative&#34;&gt;Deliberative &lt;a href=&#34;#deliberative&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;People exceptionally talented in the Deliberative theme are best described by&#xA;the serious care they take in making decisions or choices. They anticipate&#xA;obstacles.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I am risk-adverse.  I want everything well thought out and calculated before I&#xA;make any sort of change.  I have never gambled in my life and just the thought&#xA;of it makes me anxious.&lt;/p&gt;&#xA;&lt;h2 id=&#34;aim-it&#34;&gt;Aim it &lt;a href=&#34;#aim-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I can use this as a strength to plan out potential issues and prevent them.  I&#xA;do this quite often with my role in infrastructure.&lt;/p&gt;&#xA;&lt;p&gt;I need to make sure that I use deadlines to keep this as a strength and not&#xA;hinderence.&lt;/p&gt;&#xA;&lt;h2 id=&#34;automation&#34;&gt;Automation &lt;a href=&#34;#automation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;One of the biggest ways that I utilize this skill is automation.  I am all&#xA;about automating things, not just because I don’t want to do the manual work,&#xA;but I am not sure when I am going to need to do something again.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ archlinux aur</title>
    <id>https://waylonwalker.com/archlinux-aur/</id>
    <updated>2022-07-30T03:13:41Z</updated>
    <published>2022-07-30T03:13:41Z</published>
    <link href="https://waylonwalker.com/archlinux-aur/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out archlinux and their project aur.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/archlinux&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;archlinux&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/archlinux/aur&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;aur&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;⚠️⚠️Experimental &lt;a href=&#34;/aur/&#34; class=&#34;glossary-term&#34; title=&#34;Arch User Repository, a collection of community maintained packages for archlinux.&#34;&gt;aur&lt;/a&gt;.&lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; mirror⚠️⚠️ (read-only mirror)&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>get the version of any python package | python api</title>
    <id>https://waylonwalker.com/get-python-package-versions/</id>
    <updated>2022-07-29T15:48:36Z</updated>
    <published>2022-07-29T15:48:36Z</published>
    <link href="https://waylonwalker.com/get-python-package-versions/" rel="alternate" type="text/html"></link>
    <summary type="text">A common meta thing that I need in python is to find the version of a package. Most of the time I reach for , but that does not always work.</summary>
    <content type="html">&lt;p&gt;A common meta thing that I need in python is to find the version of a package.&#xA;Most of the time I reach for &lt;code&gt;package_name.__version__&lt;/code&gt;, but that does not&#xA;always work.&lt;/p&gt;&#xA;&lt;h2 id=&#34;but-not-all-projects-have-a---version--&#34;&gt;but not all projects have a &lt;code&gt;__version__&lt;/code&gt; &lt;a href=&#34;#but-not-all-projects-have-a---version--&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;In searching the internet for an answer nearly every one of them pointed me to&#xA;&lt;code&gt;__version__&lt;/code&gt;.  This works for most projects, but is simply a convention, its&#xA;not required.  Not all projects implement a &lt;code&gt;__version__&lt;/code&gt;, but most do.  I’ve&#xA;never seen it lie to me, but there is nothing stopping someone from shipping&#xA;mismatched versions.&lt;/p&gt;&#xA;&lt;h2 id=&#34;if-you-maintain-a-project-ship-a---version--&#34;&gt;If you maintain a project ship a &lt;code&gt;__version__&lt;/code&gt; &lt;a href=&#34;#if-you-maintain-a-project-ship-a---version--&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;I appreciate it&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;While its not required its super handy and easy for anyone to remember off the&#xA;top of their head.  It makes it easy to start debugging differences between&#xA;what you have vs what you see somewhere else. You can do this by dropping a&#xA;&lt;code&gt;__version__&lt;/code&gt; variable inside your  &lt;code&gt;__init__.py&lt;/code&gt; file.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;## __init__.py&#xA;__version__ = 1.0.0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;so&#34;&gt;SO &lt;a href=&#34;#so&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;stack overflow saves the day&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Special thanks to this&#xA;&lt;a href=&#34;https://stackoverflow.com/questions/20180543/how-do-i-check-the-versions-of-python-modules/32965521#32965521&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/stackoverflow.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/stackoverflow.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Stack Overflow post&lt;/a&gt;&#xA;for answering this question for me.&lt;/p&gt;&#xA;&lt;h2 id=&#34;so-what-do-you-do&#34;&gt;So what do you do… &lt;a href=&#34;#so-what-do-you-do&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;importlib&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Your next option is to reach into the package metadata of the package that you&#xA;are interested in, and this has changed over time as highlighted in the stack&#xA;overflow post.&lt;/p&gt;&#xA;&lt;p&gt;for Python &amp;gt;= 3.8:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;from importlib.metadata import version&#xA;&#xA;version(&amp;#39;markata&amp;#39;)&#xA;# `0.3.0.b4`&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I only really use python &amp;gt;= 3.8 these days, but if you need to implement it for&#xA;an older version check out the stack overflow post.&lt;/p&gt;&#xA;&lt;h2 id=&#34;another-option&#34;&gt;Another option.. &lt;a href=&#34;#another-option&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;use the command line&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Another common option uses pip at the command line.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ pip show markata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Name: markata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Version: 0.3.0b4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Summary: Static site generator plugins all the way down.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Home-page: https://markata.dev&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Author: Waylon Walker&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Author-email: waylon@waylonwalker.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;License: MIT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Location: /home/waylon/git/waylonwalker.com/.venv/lib/python3.11/site-packages&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Requires: anyconfig, beautifulsoup4, checksumdir, diskcache, feedgen, jinja2, more-itertools, pathspec, pillow, pluggy, pymdown-extensions, python-frontmatter, pytz, rich, textual, toml, typer&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Required-by:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;And if the package implements a command line its common to ship a version&#xA;command such as &lt;code&gt;--version&lt;/code&gt; or &lt;code&gt;-V&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ markata --version&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Markata CLI Version: 0.3.0.b4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;why-did-i-need-to-do-this&#34;&gt;Why did I need to do this? &lt;a href=&#34;#why-did-i-need-to-do-this&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Well we have a cli tool that wraps around piptools and we wanted to include the&#xA;version of piptools in the comments that it produces dynamically.  This is why&#xA;I wanted to dynamically grab the version inside python without shelling out to&#xA;&lt;code&gt;pip show&lt;/code&gt;.  Now along with the version of our internal tool you will get the&#xA;version of &lt;code&gt;piptools&lt;/code&gt; even though &lt;code&gt;piptools&lt;/code&gt; does not ship a &lt;code&gt;__version__&lt;/code&gt;&#xA;variable.&lt;/p&gt;&#xA;&lt;h2 id=&#34;fin&#34;&gt;Fin &lt;a href=&#34;#fin&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;In the end, I am glad I learned that its so easy to use the more accurate&#xA;package metadata, but still appreciate packages shipping &lt;code&gt;__version__&lt;/code&gt; for all&#xA;of us n00b’s out here.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ charmbracelet gum</title>
    <id>https://waylonwalker.com/charmbracelet-gum/</id>
    <updated>2022-07-28T16:11:45Z</updated>
    <published>2022-07-28T16:11:45Z</published>
    <link href="https://waylonwalker.com/charmbracelet-gum/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out gum by charmbracelet. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/charmbracelet/gum&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gum&lt;/a&gt; by &lt;a href=&#34;https://github.com/charmbracelet&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;charmbracelet&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;A tool for glamorous shell scripts 🎀&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Mr-Destructive crossposter</title>
    <id>https://waylonwalker.com/mr-destructive-crossposter/</id>
    <updated>2022-07-23T14:42:46Z</updated>
    <published>2022-07-23T14:42:46Z</published>
    <link href="https://waylonwalker.com/mr-destructive-crossposter/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out crossposter by Mr-Destructive. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/Mr-Destructive/crossposter&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;crossposter&lt;/a&gt; by &lt;a href=&#34;https://github.com/Mr-Destructive&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Mr-Destructive&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;Crosspost your articles to dev.to, codenewbie.org, medium.com and hashnode.com with a single shellscript / python package&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>The one reason I switched to arch</title>
    <id>https://waylonwalker.com/switched-to-arch/</id>
    <updated>2022-07-23T12:05:55Z</updated>
    <published>2022-07-23T12:05:55Z</published>
    <link href="https://waylonwalker.com/switched-to-arch/" rel="alternate" type="text/html"></link>
    <summary type="text">The community, that&#39;s it, end of post, roll the credits.</summary>
    <content type="html">&lt;p&gt;The community, that’s it, end of post, roll the credits.&lt;/p&gt;&#xA;&lt;h2 id=&#34;im-a-tinkerer&#34;&gt;I’m a tinkerer &lt;a href=&#34;#im-a-tinkerer&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I am a tinkerer, I am not going to run a stock desktop manager, mostly becuase&#xA;that’s just not how my brain works.  I need to tweak everything to fit my&#xA;needs.  Grantid I have not spent much time in many full fledged linux desktop&#xA;environments.  They are far more customizable than windows ever will be, I&#xA;absolutely love that about them.  Inevitibly I end up in a situation where I&#xA;hit a wall, it just won’t do what I want it to do, or my lack of understanding&#xA;what came wtih it holds me back.&lt;/p&gt;&#xA;&lt;h2 id=&#34;minimal&#34;&gt;minimal &lt;a href=&#34;#minimal&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I love minimal installs.  I love just building up my system from the bottom up&#xA;with things that I like, I understand, and that I can script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;im-a-noob&#34;&gt;I’m a noob &lt;a href=&#34;#im-a-noob&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I spend a lot of my time in the terminal.  I’d like to think I know how to use&#xA;a linux command line for software development really well, but there are a lot&#xA;of things that I still dont know all that well, mostly because I don’t need to.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-&lt;a href=&#34;/aur/&#34; class=&#34;glossary-term&#34; title=&#34;Arch User Repository, a collection of community maintained packages for archlinux.&#34;&gt;aur&lt;/a&gt;&#34;&gt;The AUR &lt;a href=&#34;#the-aur&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Arch’s &lt;strong&gt;community&lt;/strong&gt; maintained repo&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now by far this is the thing that really kicked me over the edge and made arch&#xA;feel like something that I needed to use.  While on any Debian based distro it&#xA;was inevitible that I would stumble accross a bug that was fixed in a newer&#xA;version, not available in the standard repos, want new features that are not&#xA;available in the standard repos, or want software that is not packaged into one&#xA;of the standard repos.&lt;/p&gt;&#xA;&lt;p&gt;This makes creating scripted installs/updates difficult.  I have to pull&#xA;releses from github, or some random website, or clone and build packages&#xA;myself.  It’s not too hard, but since I am the only one that maintains my&#xA;personal install script it’s inevitible that something changes in the build&#xA;process or release on something and breaks it over time.&lt;/p&gt;&#xA;&lt;p&gt;PPA’s are not the same.  Well maintained ppa’s are fine, but many of them are&#xA;not.  PPA’s are just deb files that someone hosts and their quality can be hit&#xA;or miss depending on if the maintainer still uses it or not.  While the AUR is&#xA;not completely absent of stale packages it’s rolling release nature tends to&#xA;keep them always up to date, and when it doesn’t the community helps out by&#xA;flagging these packages in the AUR and upvoting maintained packages.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-arch-wiki&#34;&gt;The Arch Wiki &lt;a href=&#34;#the-arch-wiki&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have underutilized the arch wiki in the past, but dang it has some really&#xA;good guides.  For me (at my level) they edge on being to brief, generally I find wiki’s&#xA;overly versose and hard to find what you are looking for.  The arch wiki gives&#xA;you what you need and no more.  The articles and forum really have answered&#xA;many of my questions and depened my understanding of linux.&lt;/p&gt;&#xA;&lt;h2 id=&#34;i-am-learning&#34;&gt;I am learning &lt;a href=&#34;#i-am-learning&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;While I am still a noob to a lot of this I am learning, and a combination of&#xA;the minimal install with the arch wiki have really helped me learn a lot about&#xA;lower level things like partitioning, grub, systemd, xorg.  On most other&#xA;systems these were just taken care of out of the box.&lt;/p&gt;&#xA;&lt;h2 id=&#34;arch-is-not-hardcore&#34;&gt;Arch is not hardcore &lt;a href=&#34;#arch-is-not-hardcore&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I think there is an old sentimate that arch is for hardcore users only.  Their&#xA;typical install process really gatekeeps it this way, but there are other&#xA;installers such as &lt;code&gt;archinstall&lt;/code&gt;, which I used and now ships with the arch iso,&#xA;that make it not much harder than any other distro.&lt;/p&gt;&#xA;&lt;p&gt;If you are a tinkerer who likes to try different things, likes to set you&#xA;machine up just the way you like it, and script it, arch really feels much&#xA;easier to do this with.  I’d even stand behind it being a distro for noob&#xA;tinkerers.&lt;/p&gt;&#xA;&lt;h2 id=&#34;does-distro-matter&#34;&gt;Does distro matter?? &lt;a href=&#34;#does-distro-matter&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Idk if it really matters all that much in the end, but the community behind the&#xA;aur and arch wiki make setting up an up to date machine so much easier than on&#xA;any lts based distro.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ moonlight-stream moonlight-qt</title>
    <id>https://waylonwalker.com/moonlight-stream-moonlight-qt/</id>
    <updated>2022-07-20T14:29:13Z</updated>
    <published>2022-07-20T14:29:13Z</published>
    <link href="https://waylonwalker.com/moonlight-stream-moonlight-qt/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred moonlight-qt by moonlight-stream. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/moonlight-stream/moonlight-qt&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;moonlight-qt&lt;/a&gt; by &lt;a href=&#34;https://github.com/moonlight-stream&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;moonlight-stream&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;GameStream client for PCs (Windows, Mac, Linux, and Steam Link)&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ moonlight-stream moonlight-docs</title>
    <id>https://waylonwalker.com/moonlight-stream-moonlight-docs/</id>
    <updated>2022-07-20T14:29:01Z</updated>
    <published>2022-07-20T14:29:01Z</published>
    <link href="https://waylonwalker.com/moonlight-stream-moonlight-docs/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered moonlight-docs by moonlight-stream, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/moonlight-stream/moonlight-docs&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;moonlight-docs&lt;/a&gt; by &lt;a href=&#34;https://github.com/moonlight-stream&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;moonlight-stream&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;Moonlight Documentation&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ deresmos xrandr-manager</title>
    <id>https://waylonwalker.com/deresmos-xrandr-manager/</id>
    <updated>2022-07-12T17:09:12Z</updated>
    <published>2022-07-12T17:09:12Z</published>
    <link href="https://waylonwalker.com/deresmos-xrandr-manager/" rel="alternate" type="text/html"></link>
    <summary type="text">I like deresmos&#39;s project xrandr-manager.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/deresmos&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;deresmos’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/deresmos/xrandr-manager&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;xrandr-manager&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Manage dual display  on Linux&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ atar-axis xpadneo</title>
    <id>https://waylonwalker.com/atar-axis-xpadneo/</id>
    <updated>2022-07-05T15:22:20Z</updated>
    <published>2022-07-05T15:22:20Z</published>
    <link href="https://waylonwalker.com/atar-axis-xpadneo/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on xpadneo, created by atar-axis.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/atar-axis/xpadneo&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;xpadneo&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/atar-axis&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;atar-axis&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Advanced Linux Driver for Xbox One Wireless Controller (shipped with Xbox One S)&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ShayBox Launcher-Curseforge</title>
    <id>https://waylonwalker.com/shaybox-launcher-curseforge/</id>
    <updated>2022-07-05T00:40:27Z</updated>
    <published>2022-07-05T00:40:27Z</published>
    <link href="https://waylonwalker.com/shaybox-launcher-curseforge/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across Launcher-Curseforge from ShayBox, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/ShayBox/Launcher-Curseforge&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Launcher-Curseforge&lt;/a&gt; from &lt;a href=&#34;https://github.com/ShayBox&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ShayBox&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;Integrates the CF Modpack install button to any MMC based launcher&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Two new shell aliases for git</title>
    <id>https://waylonwalker.com/two-new-aliases-for-git/</id>
    <updated>2022-06-28T12:31:10Z</updated>
    <published>2022-06-28T12:31:10Z</published>
    <link href="https://waylonwalker.com/two-new-aliases-for-git/" rel="alternate" type="text/html"></link>
    <summary type="text">Recently I added two new bash/zsh aliases to make my git experience just a tad better.</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000172.3260819219.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000172.3260819219.webp&#34; alt=&#34;Astronaut doing a mic drop with explosion&#34;/ data-glightbox=&#34;description: Astronaut doing a mic drop with explosion&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Recently I added two new bash/zsh aliases to make my &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; experience just a tad&#xA;better.&lt;/p&gt;&#xA;&lt;h2 id=&#34;trackme&#34;&gt;trackme &lt;a href=&#34;#trackme&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Most of our work repos were recently migrated to new remote urls, we scriped&#xA;out the update to all of the repos, but I was left with a tracking error for&#xA;all of my open branches.  To easily resolve this I just made an alias so that I&#xA;can just run &lt;code&gt;trackme&lt;/code&gt; anytime I see this error.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;There is no tracking information for the current branch.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Please specify which branch you want to merge with.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    See git-pull(1) for details&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    git pull &amp;lt;remote&amp;gt; &amp;lt;branch&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;If you wish to set tracking information for this branch you can do so with:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    git branch --set-upstream develop origin/&amp;lt;branch&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;getting-the-branch&#34;&gt;getting the branch &lt;a href=&#34;#getting-the-branch&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;The following command will always return the currently checked out branch name.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git symbolic-ref --short HEAD&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Injecting this into the suggested &lt;code&gt;git&lt;/code&gt; command as a subshell gives us this&#xA;alias that when ran with &lt;code&gt;trackme&lt;/code&gt; will automatically fix tracking for my&#xA;branch.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;trackme&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;git branch --set-upstream-to=origin/$(git symbolic-ref --short HEAD)&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;rebasemain&#34;&gt;rebasemain &lt;a href=&#34;#rebasemain&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I sometimes get a bit lazy at checking main for changes before submitting any&#xA;prs, so again I made a quick shell alias that will rebase main into my branch&#xA;before I open a pr.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;rebasemain&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;git pull origin main --rebase&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;the-aliases&#34;&gt;The Aliases &lt;a href=&#34;#the-aliases&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here are both of the alias’s, feel free to steal and modify them into your&#xA;dotfiles.  If you are uniniatiated a common starting place to put these is&#xA;either in your &lt;code&gt;~/.bashrch&lt;/code&gt; or &lt;code&gt;~/.zshrc&lt;/code&gt; depending on your shell of choice.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;trackme&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;git branch --set-upstream-to=origin/$(git symbolic-ref --short HEAD)&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;rebasemain&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;git pull origin main --rebase&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ jazzband pip-tools</title>
    <id>https://waylonwalker.com/jazzband-pip-tools/</id>
    <updated>2022-06-17T14:39:30Z</updated>
    <published>2022-06-17T14:39:30Z</published>
    <link href="https://waylonwalker.com/jazzband-pip-tools/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out pip-tools by jazzband. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/jazzband/pip-tools&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pip-tools&lt;/a&gt; by &lt;a href=&#34;https://github.com/jazzband&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jazzband&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;A set of tools to keep your pinned Python dependencies fresh.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>IPython q to exit</title>
    <id>https://waylonwalker.com/ipython-q-exit/</id>
    <updated>2022-06-13T10:10:34Z</updated>
    <published>2022-06-13T10:10:34Z</published>
    <link href="https://waylonwalker.com/ipython-q-exit/" rel="alternate" type="text/html"></link>
    <summary type="text">So many terminal applications bind to exit, even the python debugger, its muscle memory for me. But to exit ipython I have to type out . This is fine, but...</summary>
    <content type="html">&lt;p&gt;So many terminal applications bind &lt;code&gt;q&lt;/code&gt; to exit, even the python debugger, its&#xA;muscle memory for me. But to exit ipython I have to type out &lt;code&gt;exit&amp;lt;ENTER&amp;gt;&lt;/code&gt;.&#xA;This is fine, but since q is muscle memory for me I get this error a few times&#xA;per day.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮&#xA;│ &amp;lt;ipython-input-1-2b66fd261ee5&amp;gt;:1 in &amp;lt;module&amp;gt;                                                     │&#xA;╰──────────────────────────────────────────────────────────────────────────────────────────────────╯&#xA;NameError: name &amp;#39;q&amp;#39; is not defined&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;After digging way too deep into how IPython implements its &lt;code&gt;ExitAutoCall&lt;/code&gt; I&#xA;realized there was a very simple solution here. &lt;code&gt;IPython&lt;/code&gt; automatically&#xA;imports all the scripts you put in your profile directory, all I needed was to&#xA;create &lt;code&gt;~/.ipython/profile_default/startup/q.py&lt;/code&gt; with the following.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;q = exit&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;It was that simple. This is not a game changer by any means, but I will now&#xA;see one less error in my workflow. I just press &lt;code&gt;q&amp;lt;Enter&amp;gt;&lt;/code&gt; and I am out,&#xA;without error.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Copier Slugify | python templating | using cookiecutter</title>
    <id>https://waylonwalker.com/copier-slugify/</id>
    <updated>2022-06-11T12:37:50Z</updated>
    <published>2022-06-11T12:37:50Z</published>
    <link href="https://waylonwalker.com/copier-slugify/" rel="alternate" type="text/html"></link>
    <summary type="text">It&#39;s no secret that I love automation, and lately my templating framework of choice has been copier. One hiccup I recently ran into was having spaces in my...</summary>
    <content type="html">&lt;p&gt;It’s no secret that I love automation, and lately my templating framework of&#xA;choice has been copier.  One hiccup I recently ran into was having spaces in my&#xA;templated directory names.  This makes it harder to run commands against as you&#xA;need to escape them, and if they end up in a url you end up with ugly &lt;code&gt;%20&lt;/code&gt; all&#xA;over.&lt;/p&gt;&#xA;&lt;h2 id=&#34;cookiecutter-has-the-solution&#34;&gt;Cookiecutter has the solution &lt;a href=&#34;#cookiecutter-has-the-solution&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Yes the solution comes from a competing templating framework.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I install copier with pipx, so I need to inject cookiecutter in to my copier&#xA;environment to use the slugify filter.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx inject copier cookiecutter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you are using a normal &lt;a href=&#34;/virtual-environment/&#34; class=&#34;glossary-term&#34; title=&#34;Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...&#34;&gt;virtual environment&lt;/a&gt; you can just pip install it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install copier cookiecutter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;add-the-extension-to-your-template&#34;&gt;add the extension to your template &lt;a href=&#34;#add-the-extension-to-your-template&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;copier.yml&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now to enable the extension you need to declare it in your &lt;code&gt;copier.yml&lt;/code&gt; file in&#xA;your template.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;_jinja_extensions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;cookiecutter.extensions.SlugifyExtension&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;use-it--slugify&#34;&gt;Use it | slugify &lt;a href=&#34;#use-it--slugify&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;use-it&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now to use it, anywhere that you want to slugify a variable, you just pipe it&#xA;into slugify.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ tree .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── copier.yml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── README.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── &lt;span class=&#34;o&#34;&gt;{{&lt;/span&gt; site_name&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;slugify &lt;span class=&#34;o&#34;&gt;}}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    └── markata.toml.jinja&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; directory, &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; files&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here is a slimmed down version of what the &lt;code&gt;copier.yml&lt;/code&gt; looks like.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;site_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;What is the name of your site, this shows in seo description and the site title.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Din Djarin&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;_jinja_extensions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;cookiecutter.extensions.SlugifyExtension&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;results&#34;&gt;Results &lt;a href=&#34;#results&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Running the template looks a bit like this.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/ffd34b52-cef7-4de8-b451-4426989fb70c.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/ffd34b52-cef7-4de8-b451-4426989fb70c.webp&#34; alt=&#34;copier-cookiecutter-slugify.webp&#34;/ data-glightbox=&#34;description: copier-cookiecutter-slugify.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;straight-from-their-docs&#34;&gt;straight from their docs &lt;a href=&#34;#straight-from-their-docs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The next section is straight from the &lt;a href=&#34;https://cookiecutter.readthedocs.io/en/latest/advanced/template_extensions.html#slugify-extension&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/cookiecutter.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/cookiecutter.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cookiecutter docs&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;slugify-extension&#34;&gt;Slugify extension &lt;a href=&#34;#slugify-extension&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;The &lt;code&gt;cookiecutter.extensions.SlugifyExtension&lt;/code&gt; extension provides a &lt;code&gt;slugify&lt;/code&gt;&#xA;filter in templates that converts string into its dashed (“slugified”) version:&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;x&#34;&gt;{% &amp;#34;It&amp;#39;s a random version&amp;#34; | slugify %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Would output:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;it-s-a-random-version&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;It is different from a mere replace of spaces since it also treats some special&#xA;characters differently such as &lt;code&gt;&amp;#39;&lt;/code&gt; in the example above. The function accepts&#xA;all arguments that can be passed to the &lt;code&gt;slugify&lt;/code&gt; function of&#xA;&lt;code&gt;python-slugify&lt;/code&gt;_. For example to change the output from&#xA;&lt;code&gt;it-s-a-random-version&lt;/code&gt; to &lt;code&gt;it_s_a_random_version&lt;/code&gt;, the &lt;code&gt;separator&lt;/code&gt; parameter&#xA;would be passed: &lt;code&gt;slugify(separator=&amp;#39;_&amp;#39;)&lt;/code&gt;.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ box-cli-maker box-cli-maker</title>
    <id>https://waylonwalker.com/box-cli-maker-box-cli-maker/</id>
    <updated>2022-06-10T17:48:47Z</updated>
    <published>2022-06-10T17:48:47Z</published>
    <link href="https://waylonwalker.com/box-cli-maker-box-cli-maker/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across box-cli-maker from box-cli-maker, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/box-cli-maker/box-cli-maker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;box-cli-maker&lt;/a&gt; from &lt;a href=&#34;https://github.com/box-cli-maker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;box-cli-maker&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;Render highly customizable boxes in the terminal&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Delta456 box-cli-maker</title>
    <id>https://waylonwalker.com/delta456-box-cli-maker/</id>
    <updated>2022-06-10T17:48:47Z</updated>
    <published>2022-06-10T17:48:47Z</published>
    <link href="https://waylonwalker.com/delta456-box-cli-maker/" rel="alternate" type="text/html"></link>
    <summary type="text">box-cli-maker by Delta456 is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/Delta456/box-cli-maker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;box-cli-maker&lt;/a&gt; by &lt;a href=&#34;https://github.com/Delta456&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Delta456&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;Make Highly Customized Boxes for CLI&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Textual has devtools</title>
    <id>https://waylonwalker.com/textual-has-devtools/</id>
    <updated>2022-06-09T21:21:11Z</updated>
    <published>2022-06-09T21:21:11Z</published>
    <link href="https://waylonwalker.com/textual-has-devtools/" rel="alternate" type="text/html"></link>
    <summary type="text">Textual has devtools in the upcoming css branch, and its pretty awesome!</summary>
    <content type="html">&lt;p&gt;Textual has devtools in the upcoming css branch, and its pretty awesome!&lt;/p&gt;&#xA;&lt;h2 id=&#34;its-still-early&#34;&gt;It’s still early &lt;a href=&#34;#its-still-early&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Textual is still very early and not really ready for prime time, but it’s quite&#xA;amazing how easy some things such as creating keybindings is. The docs are&#xA;coming, but missing right now so if you want to use textual be ready for&#xA;reading source code and examples.&lt;/p&gt;&#xA;&lt;h2 id=&#34;on-to-the-devtools&#34;&gt;On to the devtools &lt;a href=&#34;#on-to-the-devtools&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As &lt;a href=&#34;https://twitter.com/willmcgugan&#34;&gt;&lt;/a&gt;&lt;a href=&#34;https://willmcgugan.github.io&#34; class=&#34;mention  has-avatar has-avatar-before&#34; data-name=&#34;Will McGugan&#34; data-bio=&#34;Will McGugan’s essays&#34; data-avatar=&#34;http://willmcgugan.github.io/images/will2025.jpeg&#34; data-handle=&#34;@willmcgugan&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/willmcgugan.github.io.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/willmcgugan.github.io.png&#34;&gt;@willmcgugan&lt;/a&gt; shows in this tweet it’s&#xA;pretty easy to setup, it requires having two terminals open, or using tmux, and&#xA;currently you have to use the css branch.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://twitter.com/willmcgugan/status/1531294412696956930&#34; class=&#34;hoverlink&#34;&gt;https://twitter.com/willmcgugan/status/1531294412696956930&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-does-textual-need-its-own-devtools&#34;&gt;Why does textual need its own devtools &lt;a href=&#34;#why-does-textual-need-its-own-devtools&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Textual is a tui application framework. Unlike when you are building cli&#xA;applications, when the tui takes over the terminal in full screen there is no&#xA;where to print statement debug, and breakpoints don’t work.&lt;/p&gt;&#xA;&lt;h2 id=&#34;getting-the-css-branch&#34;&gt;getting the css branch &lt;a href=&#34;#getting-the-css-branch&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;In the future it will likely be in main and not need this, but for now you need&#xA;to get the css branch to get devtools.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/Textualize/textual&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git fetch --alll&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout css&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;install-in-a-virtual-environment&#34;&gt;install in a &lt;a href=&#34;/virtual-environment/&#34; class=&#34;glossary-term&#34; title=&#34;Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...&#34;&gt;virtual environment&lt;/a&gt; &lt;a href=&#34;#install-in-a-virtual-environment&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now you can create a virtual environment, feel free to use whatever virtual&#xA;environment tool you want, venv is built in to most python distributions&#xA;though, and should just be there.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python3 -m venv .venv --prompt textual&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; .venv/bin/activate&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;now-that-we-have-textual-installed&#34;&gt;Now that we have textual installed &lt;a href=&#34;#now-that-we-have-textual-installed&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Once textual is installed you can open up the devtools by running textual console.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;textual console&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/9a528fd8-7f06-4a6d-b46e-26165e4a0e93.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/9a528fd8-7f06-4a6d-b46e-26165e4a0e93.webp&#34; alt=&#34;textual-console.webp&#34;/ data-glightbox=&#34;description: textual-console.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ NotUnlikeTheWaves minesweeper</title>
    <id>https://waylonwalker.com/notunlikethewaves-minesweeper/</id>
    <updated>2022-06-07T17:53:27Z</updated>
    <published>2022-06-07T17:53:27Z</published>
    <link href="https://waylonwalker.com/notunlikethewaves-minesweeper/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about minesweeper, an amazing project by NotUnlikeTheWaves. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/NotUnlikeTheWaves/minesweeper&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;minesweeper&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/NotUnlikeTheWaves&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;NotUnlikeTheWaves&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;A minesweeper in the terminal written in Golang with Bubbletea&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ jrnxf gh-eco</title>
    <id>https://waylonwalker.com/jrnxf-gh-eco/</id>
    <updated>2022-06-04T16:44:49Z</updated>
    <published>2022-06-04T16:44:49Z</published>
    <link href="https://waylonwalker.com/jrnxf-gh-eco/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on gh-eco by jrnxf.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/jrnxf/gh-eco&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gh-eco&lt;/a&gt; by &lt;a href=&#34;https://github.com/jrnxf&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jrnxf&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;🦎 gh cli extension to explore the ecosystem&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Using Different versions of python with pipx | pyenv</title>
    <id>https://waylonwalker.com/pyenv-pipx/</id>
    <updated>2022-05-28T20:38:42Z</updated>
    <published>2022-05-28T20:38:42Z</published>
    <link href="https://waylonwalker.com/pyenv-pipx/" rel="alternate" type="text/html"></link>
    <summary type="text">I love using pipx for automatic virtual environment management of my globally installed python cli applications, but sometimes the application is not...</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000363.70567464.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000363.70567464.webp&#34; alt=&#34;“cell shaded, long, full body, shot of a cybernetic blue soldier with glowing pink eyes, llustration, post grunge, cinebatic dramatic atmosphere, sharp focus, pink glowing volumetric lighting, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem” -s50 -W832 -H416 -C7.5 -Ak_lms -S70567464&#34;/ data-glightbox=&#34;description: “cell shaded, long, full body, shot of a cybernetic blue soldier with glowing pink eyes, llustration, post grunge, cinebatic dramatic atmosphere, sharp focus, pink glowing volumetric lighting, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem” -s50 -W832 -H416 -C7.5 -Ak_lms -S70567464&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;I love using pipx for automatic &lt;a href=&#34;/virtual-environment/&#34; class=&#34;glossary-term&#34; title=&#34;Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...&#34;&gt;virtual environment&lt;/a&gt; management of my globally&#xA;installed python cli applications, but sometimes the application is not&#xA;compatible with your globally installed &lt;code&gt;pipx&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;which-version-of-python-is-pipx-using&#34;&gt;Which version of python is &lt;code&gt;pipx&lt;/code&gt; using?? &lt;a href=&#34;#which-version-of-python-is-pipx-using&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This one took me a minute to figure out at first, please let me know if there&#xA;is a better way. I am pretty certain that this is not the ideal way, but it&#xA;works.&lt;/p&gt;&#xA;&lt;p&gt;My first technique was to make a package that printed out &lt;code&gt;sys.version&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# what version of python does the global pipx use?&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx run --spec git+https://github.com/waylonwalker/pyvers pyvers&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# what version of python does the local pipx use?&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python -m pipx run --spec git+https://github.com/waylonwalker/pyvers pyvers&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;lets-setup-some-other-versions-of-python-with-pyenv&#34;&gt;Let’s setup some other versions of python with pyenv &lt;a href=&#34;#lets-setup-some-other-versions-of-python-with-pyenv&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If you don’t already have &lt;a href=&#34;https://github.com/pyenv/pyenv&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pyenv&lt;/a&gt; installed,&#xA;you can follow their &lt;a href=&#34;https://github.com/pyenv/pyenv#installation&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;install&#xA;instructions&lt;/a&gt; to get it.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pyenv install 3.8.13&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pyenv install 3.10.5&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;i-usually-require-a-virtual-environment&#34;&gt;I usually require a virtual environment &lt;a href=&#34;#i-usually-require-a-virtual-environment&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I set the &lt;code&gt;PIP_REQUIRE_VIRTUALENV&lt;/code&gt; environment variable to &lt;code&gt;true&lt;/code&gt; to ensure&#xA;that the virtual environment is activated when pip installing, this makes it so&#xA;that I can’t accidentally use the global env, which is typically not what I&#xA;want to do.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;PIP_REQUIRE_VIRTUALENV&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# for windows users&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;PIP_REQUIRE_VIRTUALENV&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;This goes right into my shell startup script &lt;code&gt;~/.bashrc&lt;/code&gt; or &lt;code&gt;~/.zshrc&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;exceptions-happen&#34;&gt;Exceptions happen &lt;a href=&#34;#exceptions-happen&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is my one exception. I’ve had better luck putting pipx right in the&#xA;global python environment. Not the system python, but each python version that&#xA;I install with pyenv.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;PIP_REQUIRE_VIRTUALENV&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# for windows users&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;PIP_REQUIRE_VIRTUALENV&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;lets-install-pipx&#34;&gt;Let’s install pipx &lt;a href=&#34;#lets-install-pipx&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;First up is python 3.10.5&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pyenv global 3.10.5&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install pipx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx run --spec git+https://github.com/waylonwalker/pyvers pyvers&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3.10.5 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;main, Jun  &lt;span class=&#34;m&#34;&gt;6&lt;/span&gt; 2022, 18:49:26&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;GCC 12.1.0&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Next is python 3.8.13j&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pyenv global 3.8.13&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install pipx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx run --spec git+https://github.com/waylonwalker/pyvers pyvers&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3.8.13 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;default, Aug  &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 2022, 21:06:56&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;GCC 12.1.0&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now once I close this shell I will always end up with&#xA;&lt;code&gt;PYTHON_REQUIRE_VIRTUALENV=true&lt;/code&gt;, since it’s in my shell startup script. So&#xA;make sure that you reset it or kill this shell before doing any damage.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Cveinnt LiveTerm</title>
    <id>https://waylonwalker.com/cveinnt-liveterm/</id>
    <updated>2022-05-17T23:51:29Z</updated>
    <published>2022-05-17T23:51:29Z</published>
    <link href="https://waylonwalker.com/cveinnt-liveterm/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out Cveinnt and their project LiveTerm.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/Cveinnt&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Cveinnt&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/Cveinnt/LiveTerm&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;LiveTerm&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;💻 Build terminal styled websites in minutes!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ curl curl</title>
    <id>https://waylonwalker.com/curl-curl/</id>
    <updated>2022-05-16T13:55:22Z</updated>
    <published>2022-05-16T13:55:22Z</published>
    <link href="https://waylonwalker.com/curl-curl/" rel="alternate" type="text/html"></link>
    <summary type="text">curl has done a fantastic job with curl. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/curl&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;curl&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/curl/curl&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;curl&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;A command line tool and library for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS. libcurl offers a myriad of powerful features&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>LIVE-REPLAY - Python dev | Markata todoui | 4/6/2022</title>
    <id>https://waylonwalker.com/markata-todoui-live-replay-4-6-2022/</id>
    <updated>2022-05-12T19:28:20Z</updated>
    <published>2022-05-12T19:28:20Z</published>
    <link href="https://waylonwalker.com/markata-todoui-live-replay-4-6-2022/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/-42A5210HYo</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/-42A5210HYo&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://youtu.be/-42A5210HYo&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Super fun steam Broadcasted live on Twitch – Watch live at &lt;a href=&#34;https://www.twitch.tv/waylonwalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.twitch.tv.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.twitch.tv.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://www.twitch.tv/waylonwalker&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;We worked on markata todoui, a command tui trello board written in python using only markdown files to store the data.  I love markdown and I want to make this my workflow.&lt;/p&gt;&#xA;&lt;p&gt;During this stream we get RAIDED by TEEJ_DV! and chat about tmux a bit before calling the changes to markata-tui good and signing off.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;dotfiles: &lt;a href=&#34;https://github.com/WaylonWalker/devtainer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/WaylonWalker/devtainer&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;today’s project: &lt;a href=&#34;https://github.com/WaylonWalker/markata-todoui&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/WaylonWalker/markata-todoui&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;website: &lt;a href=&#34;https://waylonwalker.com/&#34;&gt;https://waylonwalker.com/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ joshmedeski fish-lf-icons</title>
    <id>https://waylonwalker.com/joshmedeski-fish-lf-icons/</id>
    <updated>2022-05-11T16:44:26Z</updated>
    <published>2022-05-11T16:44:26Z</published>
    <link href="https://waylonwalker.com/joshmedeski-fish-lf-icons/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on fish-lf-icons by joshmedeski.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/joshmedeski/fish-lf-icons&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fish-lf-icons&lt;/a&gt; by &lt;a href=&#34;https://github.com/joshmedeski&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;joshmedeski&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Fish plugin to add Nerd Font icon support to the lf terminal file manager&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pypeaday wish-lists</title>
    <id>https://waylonwalker.com/pypeaday-wish-lists/</id>
    <updated>2022-05-07T14:36:01Z</updated>
    <published>2022-05-07T14:36:01Z</published>
    <link href="https://waylonwalker.com/pypeaday-wish-lists/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on wish-lists, created by pypeaday.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/pypeaday/wish-lists&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;wish-lists&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/pypeaday&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pypeaday&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;amazon wish lists replacement&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ python typeshed</title>
    <id>https://waylonwalker.com/python-typeshed/</id>
    <updated>2022-05-07T01:31:40Z</updated>
    <published>2022-05-07T01:31:40Z</published>
    <link href="https://waylonwalker.com/python-typeshed/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about typeshed, an amazing project by python. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/python/typeshed&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;typeshed&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/python&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;python&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Collection of library stubs for Python, with static types&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ python mypy</title>
    <id>https://waylonwalker.com/python-mypy/</id>
    <updated>2022-05-07T01:31:35Z</updated>
    <published>2022-05-07T01:31:35Z</published>
    <link href="https://waylonwalker.com/python-mypy/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on mypy, created by python.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/python/mypy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mypy&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/python&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;python&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Optional static typing for Python&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ numtide devshell</title>
    <id>https://waylonwalker.com/numtide-devshell/</id>
    <updated>2022-05-03T12:06:20Z</updated>
    <published>2022-05-03T12:06:20Z</published>
    <link href="https://waylonwalker.com/numtide-devshell/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by devshell from numtide.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/numtide/devshell&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;devshell&lt;/a&gt; from &lt;a href=&#34;https://github.com/numtide&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;numtide&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Per project developer environments&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pyscript pyscript</title>
    <id>https://waylonwalker.com/pyscript-pyscript/</id>
    <updated>2022-05-03T03:32:30Z</updated>
    <published>2022-05-03T03:32:30Z</published>
    <link href="https://waylonwalker.com/pyscript-pyscript/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on pyscript by pyscript.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/pyscript/pyscript&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pyscript&lt;/a&gt; by &lt;a href=&#34;https://github.com/pyscript&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pyscript&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;PyScript is an open source platform for Python in the browser. Try PyScript: &lt;a href=&#34;https://pyscript.com&#34;&gt;https://pyscript.com&lt;/a&gt;  Examples: &lt;a href=&#34;https://tinyurl.com/pyscript-examples&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/tinyurl.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/tinyurl.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://tinyurl.com/pyscript-examples&lt;/a&gt;  Community: &lt;a href=&#34;https://discord.gg/HxvBtukrg2&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/discord.gg.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/discord.gg.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://discord.gg/HxvBtukrg2&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pypeaday tdarr</title>
    <id>https://waylonwalker.com/pypeaday-tdarr/</id>
    <updated>2022-05-02T13:04:29Z</updated>
    <published>2022-05-02T13:04:29Z</published>
    <link href="https://waylonwalker.com/pypeaday-tdarr/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out pypeaday and their project tdarr.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/pypeaday&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pypeaday&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/pypeaday/tdarr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tdarr&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;tdarr setup&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ koaning skedulord</title>
    <id>https://waylonwalker.com/koaning-skedulord/</id>
    <updated>2022-05-01T16:52:45Z</updated>
    <published>2022-05-01T16:52:45Z</published>
    <link href="https://waylonwalker.com/koaning-skedulord/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on skedulord, created by koaning.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/koaning/skedulord&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;skedulord&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/koaning&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;koaning&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;captures logs and makes cron more fun&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>How I Quickly Capture Screenshots directly into My Blog</title>
    <id>https://waylonwalker.com/screenshot-to-blog/</id>
    <updated>2022-04-30T14:05:49Z</updated>
    <published>2022-04-30T14:05:49Z</published>
    <link href="https://waylonwalker.com/screenshot-to-blog/" rel="alternate" type="text/html"></link>
    <summary type="text">When I am creating blog posts it&#39;s often helpful to add screenshots to them to illustrate what I see on my screen. Sometimes I lack good screenshots in my...</summary>
    <content type="html">&lt;p&gt;When I am creating blog posts it’s often helpful to add screenshots to them to&#xA;illustrate what I see on my screen. Sometimes I lack good screenshots in my&#xA;posts because it just takes more effort than I have in the moment, and I&#xA;prioritize making content over making perfect content.&lt;/p&gt;&#xA;&lt;h2 id=&#34;making-screenshots&#34;&gt;Making Screenshots &lt;a href=&#34;#making-screenshots&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;When I have something to take a screenshot of, I need to take the shot,&#xA;optimize the image, often convert it to a better format, publish it, and&#xA;create a the img tag in my blog.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;take screenshot&lt;/li&gt;&#xA;&lt;li&gt;optimize&lt;/li&gt;&#xA;&lt;li&gt;conversion&lt;/li&gt;&#xA;&lt;li&gt;publish&lt;/li&gt;&#xA;&lt;li&gt;create img tag&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;created-in-python&#34;&gt;Created in 🐍Python &lt;a href=&#34;#created-in-python&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I created this tool for myself in python because that is what I am most&#xA;familiar with, but realistically most of what I am calling are shell scripts&#xA;that I could do in just about any language.&lt;/p&gt;&#xA;&lt;h2 id=&#34;install-my-screenshot-tool&#34;&gt;Install my screenshot tool &lt;a href=&#34;#install-my-screenshot-tool&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;My screenshot tool is quite hacky and not configurable, but works wonderfully&#xA;for me. If you like it and want to use it, make it configurable or fork it.&#xA;For now it lives on GitHub and since it has a setup.py with entrypoints we can&#xA;install it with pipx.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx install git+https://github.com/WaylonWalker/screenshots.waylonwalker.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;This is just a tool for me, it does not need to be in a package manager like pip.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;calling-screenshot&#34;&gt;calling screenshot &lt;a href=&#34;#calling-screenshot&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now that screenshot is installed we can call it and make a screenshot. I’ll&#xA;take a screenshot of the frontmatter of this exact post.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/6ffe0670-fb5d-4fb2-bfe2-04f5cf6ff844.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/6ffe0670-fb5d-4fb2-bfe2-04f5cf6ff844.webp&#34; alt=&#34;screenshot-to-blog.webp&#34;/ data-glightbox=&#34;description: screenshot-to-blog.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;I have this tool exposed as a command that can be ran in the command line by&#xA;calling &lt;code&gt;screenshot&lt;/code&gt;. I will rarely use it this way, but makes it easy to&#xA;create a hotkey for later.&lt;/p&gt;&#xA;&lt;h2 id=&#34;success&#34;&gt;Success &lt;a href=&#34;#success&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Once the screenshot is successful, I get a &lt;code&gt;notify-send&lt;/code&gt; message popup telling me so.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/1aff2331-ac42-4796-b60c-1b58e7bd15f6.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/1aff2331-ac42-4796-b60c-1b58e7bd15f6.webp&#34; alt=&#34;screenshot-success.webp&#34;/ data-glightbox=&#34;description: screenshot-success.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;xbindkeys&#34;&gt;xbindkeys &lt;a href=&#34;#xbindkeys&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let’s make this workflow just a bit smoother. I want a desktop hotkey that I&#xA;can press at any time without opening a split or making sure I’m in zsh or vim,&#xA;I want it always there. For hotkeys like this I use the Desktop manager&#xA;agnostic keybinding tool xbindkeys. I can add the &lt;code&gt;screenshot&lt;/code&gt; command and the&#xA;corresponding keybinding I want to my &lt;code&gt;~/.xbindkeysrc&lt;/code&gt; file and restart with&#xA;&lt;code&gt;xbindkeys -f ~/.xbindkeysrc&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;#34;screenshot&amp;#34;&#xA;    Shift + Mod4 + alt + p&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now when I press &lt;code&gt;Shift + Mod4 + alt + p&lt;/code&gt; I am presented with a little &lt;code&gt;zenity&lt;/code&gt;&#xA;box asking me what I want to name my screenshot, followed by flameshot.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;xbindkeys allows me to bind this hotkey to my system so that no matter where&#xA;I am it will work.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;name-it&#34;&gt;Name it &lt;a href=&#34;#name-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The one question I ask myself when creating the hotkey is for a filename. On&#xA;my ubuntu machine I do that with a simple gui application called zenity. It&#xA;looks like this when I open it up.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/36bb612f-c0a5-402e-9891-af24e7b95a14.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/36bb612f-c0a5-402e-9891-af24e7b95a14.webp&#34; alt=&#34;screenshot-zenity-window.webp&#34;/ data-glightbox=&#34;description: screenshot-zenity-window.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Under the hood my screenshot tool is running the following command in a subprocess.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;zenity --entry --text&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;filename&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Copier &lt; 6.0.0b0 considered dangerous</title>
    <id>https://waylonwalker.com/update-copier/</id>
    <updated>2022-04-30T10:05:45Z</updated>
    <published>2022-04-30T10:05:45Z</published>
    <link href="https://waylonwalker.com/update-copier/" rel="alternate" type="text/html"></link>
    <summary type="text">Copier is a fantastic templating library written in python, but older versions have a dangerous bug if you are using it inside of existing directories.</summary>
    <content type="html">&lt;p&gt;Copier is a fantastic templating library written in python, but older versions&#xA;have a dangerous bug if you are using it inside of existing directories.&lt;/p&gt;&#xA;&lt;h2 id=&#34;update&#34;&gt;!!UPDATE &lt;a href=&#34;#update&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As of May 15, 2022, the stable release of copier now includes these changes, if&#xA;you have not already make sure you update.&lt;/p&gt;&#xA;&lt;h2 id=&#34;this-is-a-psa&#34;&gt;This is a PSA &lt;a href=&#34;#this-is-a-psa&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I Use copier several times per day and get fantastic benefit from this project,&#xA;this post is not intended to crap all over copier in any way, but is rather a&#xA;PSA for other users who do use copier like I do so that they know the dangers&#xA;of using copier inside an existing directory.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-issue&#34;&gt;The issue &lt;a href=&#34;#the-issue&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;the-fix&#34;&gt;The fix &lt;a href=&#34;#the-fix&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/copier-org/copier/pull/273&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/copier-org/copier/pull/273&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;As of the time of writing this version is still in beta, if you still want to&#xA;use copier with existing directtories, I’d strongly encourage you to install&#xA;the &lt;code&gt;--pre&lt;/code&gt; release.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;pipx&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;install&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;copier&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pip&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;--pre&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;confirm&#34;&gt;confirm &lt;a href=&#34;#confirm&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;copier --version&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# copier 6.0.0b0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;my-update-commit&#34;&gt;My update commit &lt;a href=&#34;#my-update-commit&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/WaylonWalker/devtainer/commit/a06e47462e2c6d26ad69fbdc2e7990a1a73ab4b7&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/WaylonWalker/devtainer/commit/a06e47462e2c6d26ad69fbdc2e7990a1a73ab4b7&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ rcarriga nvim-notify</title>
    <id>https://waylonwalker.com/rcarriga-nvim-notify/</id>
    <updated>2022-04-29T00:31:23Z</updated>
    <published>2022-04-29T00:31:23Z</published>
    <link href="https://waylonwalker.com/rcarriga-nvim-notify/" rel="alternate" type="text/html"></link>
    <summary type="text">nvim-notify by rcarriga is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/rcarriga/nvim-notify&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-notify&lt;/a&gt; by &lt;a href=&#34;https://github.com/rcarriga&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rcarriga&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;A fancy, configurable, notification manager for NeoVim&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ scottbarnesg smart-sec-cam</title>
    <id>https://waylonwalker.com/scottbarnesg-smart-sec-cam/</id>
    <updated>2022-04-19T02:54:21Z</updated>
    <published>2022-04-19T02:54:21Z</published>
    <link href="https://waylonwalker.com/scottbarnesg-smart-sec-cam/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across smart-sec-cam from scottbarnesg, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/scottbarnesg/smart-sec-cam&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;smart-sec-cam&lt;/a&gt; from &lt;a href=&#34;https://github.com/scottbarnesg&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;scottbarnesg&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;A privacy-focused, intelligent security camera system.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ httpie cli</title>
    <id>https://waylonwalker.com/httpie-cli/</id>
    <updated>2022-04-14T18:49:57Z</updated>
    <published>2022-04-14T18:49:57Z</published>
    <link href="https://waylonwalker.com/httpie-cli/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across cli from httpie, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/httpie/cli&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cli&lt;/a&gt; from &lt;a href=&#34;https://github.com/httpie&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;httpie&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;🥧 HTTPie CLI  — modern, user-friendly command-line HTTP client for the API era. JSON support, colors, sessions, downloads, plugins &amp;amp; more.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>PyOhio CFP&#39;s</title>
    <id>https://waylonwalker.com/pyohio-cfp/</id>
    <updated>2022-04-12T12:47:52Z</updated>
    <published>2022-04-12T12:47:52Z</published>
    <link href="https://waylonwalker.com/pyohio-cfp/" rel="alternate" type="text/html"></link>
    <summary type="text">Here are some CFP&#39;s that I used for PyOhio 2022.</summary>
    <content type="html">&lt;p&gt;Here are some CFP’s that I used for PyOhio 2022.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://pretalx.com/pyohio-2022/cfp&#34; class=&#34;hoverlink  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/pretalx.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/pretalx.com.ico&#34;&gt;https://pretalx.com/pyohio-2022/cfp&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;idea-to-blog-post-in-minutes---shorter&#34;&gt;Idea to blog post in minutes - Shorter &lt;a href=&#34;#idea-to-blog-post-in-minutes---shorter&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Markata is a plugins all the way down static site generator, that covers all&#xA;the things you need to go from markdown to a blog site out of the box.  Since&#xA;it’s plugins all the way down you can also rip out all the default plugins, and&#xA;do something completely different with the lifecycle.&lt;/p&gt;&#xA;&lt;p&gt;Lets build a whole blog site in 5 minutes.&lt;/p&gt;&#xA;&lt;h2 id=&#34;add-kedro-to-your-pandas-workflow---short&#34;&gt;Add Kedro to your Pandas Workflow - Short &lt;a href=&#34;#add-kedro-to-your-pandas-workflow---short&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Sometimes python scripts/notebooks take a long time to run, let kedro&#xA;automatically save your datasets so that you can maintain your production code&#xA;with ease.  Lets take a pipeline with an issue 30 minutes in and solve the&#xA;issue in 5 mintues.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nbdd0121 wsld</title>
    <id>https://waylonwalker.com/nbdd0121-wsld/</id>
    <updated>2022-04-12T12:23:17Z</updated>
    <published>2022-04-12T12:23:17Z</published>
    <link href="https://waylonwalker.com/nbdd0121-wsld/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out nbdd0121 and their project wsld.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/nbdd0121&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nbdd0121&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/nbdd0121/wsld&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;wsld&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;WSL Daemon - Stable X11 connection and time synchronisation for WSL2&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ darrenburns dunk</title>
    <id>https://waylonwalker.com/darrenburns-dunk/</id>
    <updated>2022-04-02T21:45:11Z</updated>
    <published>2022-04-02T21:45:11Z</published>
    <link href="https://waylonwalker.com/darrenburns-dunk/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred dunk by darrenburns. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/darrenburns/dunk&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dunk&lt;/a&gt; by &lt;a href=&#34;https://github.com/darrenburns&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;darrenburns&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;Prettier &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; diffs in the terminal  🎨&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ dagger dagger</title>
    <id>https://waylonwalker.com/dagger-dagger/</id>
    <updated>2022-04-02T03:41:13Z</updated>
    <published>2022-04-02T03:41:13Z</published>
    <link href="https://waylonwalker.com/dagger-dagger/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on dagger, created by dagger.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/dagger/dagger&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dagger&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/dagger&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dagger&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;An engine to run your pipelines in containers&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ PrithivirajDamodaran Gramformer</title>
    <id>https://waylonwalker.com/prithivirajdamodaran-gramformer/</id>
    <updated>2022-04-01T03:01:38Z</updated>
    <published>2022-04-01T03:01:38Z</published>
    <link href="https://waylonwalker.com/prithivirajdamodaran-gramformer/" rel="alternate" type="text/html"></link>
    <summary type="text">Gramformer by PrithivirajDamodaran is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/PrithivirajDamodaran/Gramformer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Gramformer&lt;/a&gt; by &lt;a href=&#34;https://github.com/PrithivirajDamodaran&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;PrithivirajDamodaran&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;A framework for detecting, highlighting and correcting grammatical errors on natural language text. Created by Prithiviraj Damodaran. Open to pull requests and other forms of collaboration.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ WaylonWalker markata</title>
    <id>https://waylonwalker.com/waylonwalker-markata/</id>
    <updated>2022-03-22T14:13:40Z</updated>
    <published>2022-03-22T14:13:40Z</published>
    <link href="https://waylonwalker.com/waylonwalker-markata/" rel="alternate" type="text/html"></link>
    <summary type="text">I like WaylonWalker&#39;s project markata.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/WaylonWalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;WaylonWalker’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/WaylonWalker/markata&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;markata&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A plugins all the way down static site generator written in python.  Plugins all the way down means that you can completely change the behavior of how it works by swapping plugins, installing new ones, or creating your own all in python.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ eyeseast python-frontmatter</title>
    <id>https://waylonwalker.com/eyeseast-python-frontmatter/</id>
    <updated>2022-03-20T22:20:50Z</updated>
    <published>2022-03-20T22:20:50Z</published>
    <link href="https://waylonwalker.com/eyeseast-python-frontmatter/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out eyeseast and their project python-frontmatter.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/eyeseast&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;eyeseast&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/eyeseast/python-frontmatter&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;python-frontmatter&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Parse and manage posts with YAML (or other) frontmatter&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ rothgar awesome-tuis</title>
    <id>https://waylonwalker.com/rothgar-awesome-tuis/</id>
    <updated>2022-03-19T16:57:54Z</updated>
    <published>2022-03-19T16:57:54Z</published>
    <link href="https://waylonwalker.com/rothgar-awesome-tuis/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across awesome-tuis from rothgar, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/rothgar/awesome-tuis&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;awesome-tuis&lt;/a&gt; from &lt;a href=&#34;https://github.com/rothgar&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rothgar&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;List of projects that provide terminal user interfaces&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ mixu markdown-styles</title>
    <id>https://waylonwalker.com/mixu-markdown-styles/</id>
    <updated>2022-03-11T14:50:46Z</updated>
    <published>2022-03-11T14:50:46Z</published>
    <link href="https://waylonwalker.com/mixu-markdown-styles/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by markdown-styles from mixu.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/mixu/markdown-styles&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;markdown-styles&lt;/a&gt; from &lt;a href=&#34;https://github.com/mixu&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mixu&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Markdown to static &lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;HTML&lt;/a&gt; generator and multiple CSS themes for Markdown&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nicoddemus pytest-rich</title>
    <id>https://waylonwalker.com/nicoddemus-pytest-rich/</id>
    <updated>2022-03-09T14:51:32Z</updated>
    <published>2022-03-09T14:51:32Z</published>
    <link href="https://waylonwalker.com/nicoddemus-pytest-rich/" rel="alternate" type="text/html"></link>
    <summary type="text">nicoddemus has done a fantastic job with pytest-rich. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/nicoddemus&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nicoddemus&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/nicoddemus/pytest-rich&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pytest-rich&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;pytest + rich integration (proof of concept)&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ patrick-kidger mkposters</title>
    <id>https://waylonwalker.com/patrick-kidger-mkposters/</id>
    <updated>2022-03-08T02:00:44Z</updated>
    <published>2022-03-08T02:00:44Z</published>
    <link href="https://waylonwalker.com/patrick-kidger-mkposters/" rel="alternate" type="text/html"></link>
    <summary type="text">patrick-kidger has done a fantastic job with mkposters. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/patrick-kidger&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;patrick-kidger&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/patrick-kidger/mkposters&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mkposters&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Make posters from Markdown files.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pypeaday pype.dev</title>
    <id>https://waylonwalker.com/pypeaday-pype-dev/</id>
    <updated>2022-03-04T21:19:25Z</updated>
    <published>2022-03-04T21:19:25Z</published>
    <link href="https://waylonwalker.com/pypeaday-pype-dev/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by pype.dev from pypeaday.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/pypeaday/pype.dev&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pype.dev&lt;/a&gt; from &lt;a href=&#34;https://github.com/pypeaday&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pypeaday&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;my blog?&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ datajoely kedro-rich</title>
    <id>https://waylonwalker.com/datajoely-kedro-rich/</id>
    <updated>2022-03-04T20:58:39Z</updated>
    <published>2022-03-04T20:58:39Z</published>
    <link href="https://waylonwalker.com/datajoely-kedro-rich/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred kedro-rich by datajoely. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/datajoely/kedro-rich&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-rich&lt;/a&gt; by &lt;a href=&#34;https://github.com/datajoely&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;datajoely&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;Make your Kedro experience snazzy&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ samuelcolvin dirty-equals</title>
    <id>https://waylonwalker.com/samuelcolvin-dirty-equals/</id>
    <updated>2022-02-26T02:28:50Z</updated>
    <published>2022-02-26T02:28:50Z</published>
    <link href="https://waylonwalker.com/samuelcolvin-dirty-equals/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about dirty-equals, an amazing project by samuelcolvin. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/samuelcolvin/dirty-equals&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dirty-equals&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/samuelcolvin&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;samuelcolvin&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Doing dirty (but extremely useful) things with equals.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ charmbracelet bubbletea</title>
    <id>https://waylonwalker.com/charmbracelet-bubbletea/</id>
    <updated>2022-02-21T21:15:03Z</updated>
    <published>2022-02-21T21:15:03Z</published>
    <link href="https://waylonwalker.com/charmbracelet-bubbletea/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? bubbletea by charmbracelet.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/charmbracelet/bubbletea&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;bubbletea&lt;/a&gt; by &lt;a href=&#34;https://github.com/charmbracelet&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;charmbracelet&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A powerful little TUI framework 🏗&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ bashbunni pjs</title>
    <id>https://waylonwalker.com/bashbunni-pjs/</id>
    <updated>2022-02-19T19:38:10Z</updated>
    <published>2022-02-19T19:38:10Z</published>
    <link href="https://waylonwalker.com/bashbunni-pjs/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on pjs, created by bashbunni.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/bashbunni/pjs&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pjs&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/bashbunni&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;bashbunni&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A basic CLI for regularly updating your project’s status&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ norcalli nvim-terminal.lua</title>
    <id>https://waylonwalker.com/norcalli-nvim-terminal-lua/</id>
    <updated>2022-02-12T03:06:40Z</updated>
    <published>2022-02-12T03:06:40Z</published>
    <link href="https://waylonwalker.com/norcalli-nvim-terminal-lua/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred nvim-terminal.lua by norcalli. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/norcalli/nvim-terminal.lua&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-terminal.lua&lt;/a&gt; by &lt;a href=&#34;https://github.com/norcalli&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;norcalli&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;A high performance filetype mode for Neovim which leverages conceal and highlights your buffer with the correct color codes.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ BurntSushi xsv</title>
    <id>https://waylonwalker.com/burntsushi-xsv/</id>
    <updated>2022-02-11T02:45:39Z</updated>
    <published>2022-02-11T02:45:39Z</published>
    <link href="https://waylonwalker.com/burntsushi-xsv/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on xsv by BurntSushi.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/BurntSushi/xsv&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;xsv&lt;/a&gt; by &lt;a href=&#34;https://github.com/BurntSushi&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;BurntSushi&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A fast CSV command line toolkit written in Rust.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tbillington kondo</title>
    <id>https://waylonwalker.com/tbillington-kondo/</id>
    <updated>2022-02-08T02:33:12Z</updated>
    <published>2022-02-08T02:33:12Z</published>
    <link href="https://waylonwalker.com/tbillington-kondo/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about kondo, an amazing project by tbillington. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/tbillington/kondo&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kondo&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/tbillington&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tbillington&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Cleans dependencies and build artifacts from your projects.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ SnapDrop snapdrop</title>
    <id>https://waylonwalker.com/snapdrop-snapdrop/</id>
    <updated>2022-02-08T00:32:04Z</updated>
    <published>2022-02-08T00:32:04Z</published>
    <link href="https://waylonwalker.com/snapdrop-snapdrop/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out snapdrop by SnapDrop. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/SnapDrop/snapdrop&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;snapdrop&lt;/a&gt; by &lt;a href=&#34;https://github.com/SnapDrop&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;SnapDrop&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;A Progressive Web App for local file sharing&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ linuxserver Heimdall</title>
    <id>https://waylonwalker.com/linuxserver-heimdall/</id>
    <updated>2022-02-07T23:22:59Z</updated>
    <published>2022-02-07T23:22:59Z</published>
    <link href="https://waylonwalker.com/linuxserver-heimdall/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on Heimdall by linuxserver.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/linuxserver/Heimdall&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Heimdall&lt;/a&gt; by &lt;a href=&#34;https://github.com/linuxserver&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;linuxserver&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;An Application dashboard and launcher&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tinysearch tinysearch</title>
    <id>https://waylonwalker.com/tinysearch-tinysearch/</id>
    <updated>2022-02-06T15:29:48Z</updated>
    <published>2022-02-06T15:29:48Z</published>
    <link href="https://waylonwalker.com/tinysearch-tinysearch/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on tinysearch by tinysearch.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/tinysearch/tinysearch&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tinysearch&lt;/a&gt; by &lt;a href=&#34;https://github.com/tinysearch&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tinysearch&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;🔍 Tiny, full-text search engine for static websites built with Rust and Wasm&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ zevaverbach templates</title>
    <id>https://waylonwalker.com/zevaverbach-templates/</id>
    <updated>2022-02-05T16:45:02Z</updated>
    <published>2022-02-05T16:45:02Z</published>
    <link href="https://waylonwalker.com/zevaverbach-templates/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? templates by zevaverbach.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/zevaverbach/templates&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;templates&lt;/a&gt; by &lt;a href=&#34;https://github.com/zevaverbach&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;zevaverbach&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ lukas-reineke cmp-rg</title>
    <id>https://waylonwalker.com/lukas-reineke-cmp-rg/</id>
    <updated>2022-02-05T16:10:46Z</updated>
    <published>2022-02-05T16:10:46Z</published>
    <link href="https://waylonwalker.com/lukas-reineke-cmp-rg/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out lukas-reineke and their project cmp-rg.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/lukas-reineke&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lukas-reineke&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/lukas-reineke/cmp-rg&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cmp-rg&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;ripgrep source for nvim-cmp&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ photoview photoview</title>
    <id>https://waylonwalker.com/photoview-photoview/</id>
    <updated>2022-02-03T03:49:29Z</updated>
    <published>2022-02-03T03:49:29Z</published>
    <link href="https://waylonwalker.com/photoview-photoview/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out photoview and their project photoview.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/photoview&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;photoview&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/photoview/photoview&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;photoview&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Photo gallery for &lt;a href=&#34;/self-host/&#34; class=&#34;glossary-term&#34; title=&#34;Self hosting is the act of hosting your own applications and services without using a SAS provider. This is typically done with your own hardware, but there...&#34;&gt;self-hosted&lt;/a&gt; personal servers&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ mizlan iswap.nvim</title>
    <id>https://waylonwalker.com/mizlan-iswap-nvim/</id>
    <updated>2022-02-03T03:49:00Z</updated>
    <published>2022-02-03T03:49:00Z</published>
    <link href="https://waylonwalker.com/mizlan-iswap-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">I like mizlan&#39;s project iswap.nvim.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/mizlan&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mizlan’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/mizlan/iswap.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;iswap.nvim&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Interactively select and swap function arguments, list elements, and much more. Powered by tree-sitter.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ rhysd conflict-marker.vim</title>
    <id>https://waylonwalker.com/rhysd-conflict-marker-vim/</id>
    <updated>2022-02-01T20:38:21Z</updated>
    <published>2022-02-01T20:38:21Z</published>
    <link href="https://waylonwalker.com/rhysd-conflict-marker-vim/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out rhysd and their project conflict-marker.vim.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/rhysd&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rhysd&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/rhysd/conflict-marker.vim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;conflict-marker.vim&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Weapon to fight against conflicts in Vim.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Textualize rich-cli</title>
    <id>https://waylonwalker.com/textualize-rich-cli/</id>
    <updated>2022-02-01T04:40:17Z</updated>
    <published>2022-02-01T04:40:17Z</published>
    <link href="https://waylonwalker.com/textualize-rich-cli/" rel="alternate" type="text/html"></link>
    <summary type="text">I like Textualize&#39;s project rich-cli.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/Textualize&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Textualize’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/Textualize/rich-cli&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rich-cli&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Rich-cli is a command line toolbox for fancy output in the terminal&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ jupyterlite jupyterlite</title>
    <id>https://waylonwalker.com/jupyterlite-jupyterlite/</id>
    <updated>2022-01-27T17:32:50Z</updated>
    <published>2022-01-27T17:32:50Z</published>
    <link href="https://waylonwalker.com/jupyterlite-jupyterlite/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on jupyterlite, created by jupyterlite.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/jupyterlite/jupyterlite&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jupyterlite&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/jupyterlite&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jupyterlite&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Wasm powered Jupyter running in the browser 💡&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ davidbrochart nbterm</title>
    <id>https://waylonwalker.com/davidbrochart-nbterm/</id>
    <updated>2022-01-27T17:14:56Z</updated>
    <published>2022-01-27T17:14:56Z</published>
    <link href="https://waylonwalker.com/davidbrochart-nbterm/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about nbterm, an amazing project by davidbrochart. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/davidbrochart/nbterm&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nbterm&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/davidbrochart&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;davidbrochart&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Jupyter Notebooks in the terminal.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ sunjon stylish.nvim</title>
    <id>https://waylonwalker.com/sunjon-stylish-nvim/</id>
    <updated>2022-01-26T14:52:55Z</updated>
    <published>2022-01-26T14:52:55Z</published>
    <link href="https://waylonwalker.com/sunjon-stylish-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across stylish.nvim from sunjon, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/sunjon/stylish.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;stylish.nvim&lt;/a&gt; from &lt;a href=&#34;https://github.com/sunjon&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sunjon&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;Stylish UI components for Neovim&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ dynaconf dynaconf</title>
    <id>https://waylonwalker.com/dynaconf-dynaconf/</id>
    <updated>2022-01-22T21:08:16Z</updated>
    <published>2022-01-22T21:08:16Z</published>
    <link href="https://waylonwalker.com/dynaconf-dynaconf/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on dynaconf, created by dynaconf.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/dynaconf/dynaconf&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dynaconf&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/dynaconf&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dynaconf&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Configuration Management for Python ⚙&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ alanwsmith neovim-grimoire</title>
    <id>https://waylonwalker.com/alanwsmith-neovim-grimoire/</id>
    <updated>2022-01-15T01:08:20Z</updated>
    <published>2022-01-15T01:08:20Z</published>
    <link href="https://waylonwalker.com/alanwsmith-neovim-grimoire/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out neovim-grimoire by alanwsmith. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/alanwsmith/neovim-grimoire&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;neovim-grimoire&lt;/a&gt; by &lt;a href=&#34;https://github.com/alanwsmith&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;alanwsmith&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>python functools total ordering</title>
    <id>https://waylonwalker.com/python-functools-total-ordering/</id>
    <updated>2022-01-14T23:43:42Z</updated>
    <published>2022-01-14T23:43:42Z</published>
    <link href="https://waylonwalker.com/python-functools-total-ordering/" rel="alternate" type="text/html"></link>
    <summary type="text">functools.total_ordering makes adding all of six of the rich comparison operators to your custom classes much easier, and more likely that you remember all...</summary>
    <content type="html">&lt;p&gt;functools.total_ordering makes adding all of six of the rich comparison&#xA;operators to your custom classes much easier, and more likely that you&#xA;remember all of them.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;From the Docs: The class must define one of __lt__(), __le__(),&#xA;__gt__(), or __ge__ In addition, the class should supply an&#xA;__eq__() method.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;one of these&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;lt&lt;/strong&gt;()&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;le&lt;/strong&gt;()&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;gt&lt;/strong&gt;()&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;ge&lt;/strong&gt;()&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;and required to have this one&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;eq&lt;/strong&gt;()&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://docs.python.org/3/library/functools.html#functools.total_ordering&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/docs.python.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/docs.python.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Total Ordering Docs&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Here is an example using the Enum I was working on the other day.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;enum&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Enum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;auto&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;functools&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;total_ordering&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@total_ordering&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;LifeCycle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Enum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;configure&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;auto&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;glob&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;auto&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;load&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;auto&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;pre_render&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;auto&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;render&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;auto&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;post_render&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;auto&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;save&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;auto&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__lt__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;other&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;other&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;except&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;AttributeError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;other&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__eq__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;other&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;other&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;except&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;AttributeError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;other&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ipython ipython</title>
    <id>https://waylonwalker.com/ipython-ipython/</id>
    <updated>2022-01-14T01:53:53Z</updated>
    <published>2022-01-14T01:53:53Z</published>
    <link href="https://waylonwalker.com/ipython-ipython/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out ipython and their project ipython.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/ipython&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ipython&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/ipython/ipython&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ipython&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Official repository for IPython itself. Other repos in the IPython organization contain things like the website, documentation builds, etc.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ sharkdp pastel</title>
    <id>https://waylonwalker.com/sharkdp-pastel/</id>
    <updated>2022-01-08T04:11:41Z</updated>
    <published>2022-01-08T04:11:41Z</published>
    <link href="https://waylonwalker.com/sharkdp-pastel/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out sharkdp and their project pastel.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/sharkdp&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sharkdp&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/sharkdp/pastel&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pastel&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A command-line tool to generate, analyze, convert and manipulate colors&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ asdf-vm asdf</title>
    <id>https://waylonwalker.com/asdf-vm-asdf/</id>
    <updated>2022-01-08T04:01:31Z</updated>
    <published>2022-01-08T04:01:31Z</published>
    <link href="https://waylonwalker.com/asdf-vm-asdf/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on asdf, created by asdf-vm.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/asdf-vm/asdf&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;asdf&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/asdf-vm&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;asdf-vm&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Extendable version manager with support for Ruby, Node.js, Elixir, Erlang &amp;amp; more&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ delestro outputformat</title>
    <id>https://waylonwalker.com/delestro-outputformat/</id>
    <updated>2021-12-30T04:55:29Z</updated>
    <published>2021-12-30T04:55:29Z</published>
    <link href="https://waylonwalker.com/delestro-outputformat/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across outputformat from delestro, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/delestro/outputformat&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;outputformat&lt;/a&gt; from &lt;a href=&#34;https://github.com/delestro&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;delestro&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;Python library to decorate and beautify strings&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pyenv pyenv</title>
    <id>https://waylonwalker.com/pyenv-pyenv/</id>
    <updated>2021-12-29T16:09:12Z</updated>
    <published>2021-12-29T16:09:12Z</published>
    <link href="https://waylonwalker.com/pyenv-pyenv/" rel="alternate" type="text/html"></link>
    <summary type="text">pyenv has done a fantastic job with pyenv. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/pyenv&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pyenv&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/pyenv/pyenv&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pyenv&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Simple Python version management&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pyenv pyenv-installer</title>
    <id>https://waylonwalker.com/pyenv-pyenv-installer/</id>
    <updated>2021-12-29T16:09:00Z</updated>
    <published>2021-12-29T16:09:00Z</published>
    <link href="https://waylonwalker.com/pyenv-pyenv-installer/" rel="alternate" type="text/html"></link>
    <summary type="text">pyenv has done a fantastic job with pyenv-installer. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/pyenv&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pyenv&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/pyenv/pyenv-installer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pyenv-installer&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;This tool is used to install &lt;code&gt;pyenv&lt;/code&gt; and friends.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tpope vim-abolish</title>
    <id>https://waylonwalker.com/tpope-vim-abolish/</id>
    <updated>2021-12-24T21:06:22Z</updated>
    <published>2021-12-24T21:06:22Z</published>
    <link href="https://waylonwalker.com/tpope-vim-abolish/" rel="alternate" type="text/html"></link>
    <summary type="text">vim-abolish by tpope is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/tpope/vim-abolish&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vim-abolish&lt;/a&gt; by &lt;a href=&#34;https://github.com/tpope&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tpope&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;abolish.vim: Work with several variants of a word at once&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ xandrade Talkpython.fm-Notable-Packages</title>
    <id>https://waylonwalker.com/xandrade-talkpython-fm-notable-packages/</id>
    <updated>2021-12-21T22:56:58Z</updated>
    <published>2021-12-21T22:56:58Z</published>
    <link href="https://waylonwalker.com/xandrade-talkpython-fm-notable-packages/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across Talkpython.fm-Notable-Packages from xandrade, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/xandrade/Talkpython.fm-Notable-Packages&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Talkpython.fm-Notable-Packages&lt;/a&gt; from &lt;a href=&#34;https://github.com/xandrade&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;xandrade&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;[unofficial] Talkpython.fm podcast notable PyPI packages compilation&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Smoother Python with automatic imports | pyflyby</title>
    <id>https://waylonwalker.com/pyflyby/</id>
    <updated>2021-12-20T11:34:47Z</updated>
    <published>2021-12-20T11:34:47Z</published>
    <link href="https://waylonwalker.com/pyflyby/" rel="alternate" type="text/html"></link>
    <summary type="text">This is not a flaky works half the time kind of plugin, it&#39;s a seriously smooth editing experience. I&#39;ve just started using pyflyby, and it is solid so far....</summary>
    <content type="html">&lt;p&gt;This is not a flaky works half the time kind of plugin, it’s a seriously smooth&#xA;editing experience.  I’ve just started using pyflyby, and it is solid so far.&#xA;I have automatic imports on every save of a python file in neovim, and&#xA;automatic imports on every command in ipython.&lt;/p&gt;&#xA;&lt;p&gt;I can’t tell you how pumped I am for this, and how good its felt to use over&#xA;the past few weeks.  It’s glorious.&lt;/p&gt;&#xA;&lt;h2 id=&#34;youtube-video&#34;&gt;YouTube video &lt;a href=&#34;#youtube-video&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Listen to me rant on how great pyflyby is&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/2QW5DJiEJH4&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/2QW5DJiEJH4&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Give the video a watch, I did not have noise-cancelling on in obs. My&#xA;apologies for the background hum and the mic stand bumps. I did my best to fix&#xA;them up.&lt;/p&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation &lt;a href=&#34;#installation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;How to install pyflyby for automatic python imports&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;pyflyby is hosted on pypi, so you can get it with pip.  I have had no issues&#xA;installing it on 3.8+ so far.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install pyflyby&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;configuration-setup-with-stow&#34;&gt;Configuration setup with stow &lt;a href=&#34;#configuration-setup-with-stow&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;always stow your dotfiles&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you’re going to configure any of your tools the first thing you should do is&#xA;set it up with stow, seriously don’t sleep on the stow.  If you don’t have stow&#xA;installed or choose not to use stow you can skip this part.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ~/dotfiles&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir ipython&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;touch ipython/.pyflyby&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stow ipython&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Seriously don’t sleep on the stow.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;how-to-configure-pyflyby&#34;&gt;How to Configure pyflyby &lt;a href=&#34;#how-to-configure-pyflyby&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;it’s just a file full of import statements&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;pyflyby&lt;/code&gt; is configured simply by putting all of your import statements that you&#xA;want to automatically import into your &lt;code&gt;~/.pyflyby&lt;/code&gt; file.  You can &lt;code&gt;import pandas&lt;/code&gt;, &lt;code&gt;from pandas import DataFrame&lt;/code&gt;, or even &lt;code&gt;import pandas as pd&lt;/code&gt;, and all&#xA;of these will work pretty much as expected.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# comments start with a #&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# import your favorite libraries&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;visidata&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;vd&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;fsspec&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;difflib&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;s3fs&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;seaborn&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;sns&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;plotly&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# also supports from imports&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;rich.layout&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Layout&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;rich.live&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Live&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# duplicates are allowed&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;plotly&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;plotly&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# duplicate names from different libraries are not allowed&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;copy&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;numpy&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;copy&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Add all the things you would like to be imported automatically, just as you&#xA;would import them.  I went kinda crazy and added over 200 to mine based on&#xA;packages that I use.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;commas-are-even-supported&#34;&gt;Commas are even supported &lt;a href=&#34;#commas-are-even-supported&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;yep all the import styles are supported&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;This following example will set up auto import for both DataFrame and Series,&#xA;they will both work separately.  I removed these from my config as I felt it&#xA;was cleaner without, but it works with them.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pandas&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DataFrame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Series&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Even imports with a comma will be treated separately.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;jupyter-note&#34;&gt;Jupyter note &lt;a href=&#34;#jupyter-note&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Both work the same, use what your comfortable with&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I only really mention ipython here, but the same all applies to Jupyter as&#xA;well.  I just really like ipython itself, c’mon its right there in the terminal&#xA;integrating with the rest of your terminal experience so well.&lt;/p&gt;&#xA;&lt;h2 id=&#34;ipython-setup&#34;&gt;Ipython setup &lt;a href=&#34;#ipython-setup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Automatically import python libraries in ipython with pyflyby&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The recommended way to set uppyflybyfrom the docs is to run the following&#xA;magic command.  This works well, but I want even less typing, I want pyflyby&#xA;automatically installed and importing things without me even thinking about it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load_ext&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pyflyby&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/load_ext_pyflyby.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/load_ext_pyflyby.gif&#34; alt=&#34;basic example of pyflyby&#34;/ data-glightbox=&#34;description: basic example of pyflyby&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;ipython-setup-next-level&#34;&gt;Ipython setup next level &lt;a href=&#34;#ipython-setup-next-level&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;automatically import modules in python &lt;strong&gt;without %load_ext&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I really want pyflyby to just work in every environment without me thinking&#xA;much about it.  I want it to load automatically, and even to attempt to install&#xA;itself if it’s missing.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;IPython&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_ipython&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;subprocess&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ipython&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_ipython&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;ipython&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;magic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;load_ext pyflyby&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;except&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;ModuleNotFoundError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;installing pyflyby&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;subprocess&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Popen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;pip&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;install&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pyflyby&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;stdout&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;subprocess&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DEVNULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;stderr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;subprocess&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DEVNULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wait&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;ipython&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;magic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;load_ext pyflyby&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Note: if installation fails you will still make it into ipython, there will&#xA;just be a traceback to the failed command as you enter.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I’ve had zero issues with this, but if there ever comes a time when it does&#xA;not work in certain environments for you.  I’d strongly suggest you to add this&#xA;to a separate profile.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/ipython-config/&#34; class=&#34;wikilink&#34; data-title=&#34;Ipython-Config&#34; data-description=&#34;I use my ipython terminal daily. It&amp;#39;s my go to way of running python most of the time. After you use it for a little bit you will probably want to setup a...&#34; data-date=&#34;2020-12-20&#34; data-preview=&#34;I use my ipython terminal daily. It&amp;#39;s my go to way of running python most of the time. After you use it for a little bit you will probably want to setup a...&#34;&gt;Ipython-Config&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Check out this article for a bit more in depth ipython configuration&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;ipython-auto-import-examples&#34;&gt;ipython auto import examples &lt;a href=&#34;#ipython-auto-import-examples&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;pyflyby can import all the various import types just fine.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;import something&lt;/li&gt;&#xA;&lt;li&gt;from module import something&lt;/li&gt;&#xA;&lt;li&gt;import something as alias&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read_csv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://waylonwalker.com/cars.csv&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PYFLYBY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pandas&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pd&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;getting-help&#34;&gt;Getting Help &lt;a href=&#34;#getting-help&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Want help on something that you have in your pyflyby config, just give it the&#xA;&lt;code&gt;?&lt;/code&gt;, &lt;code&gt;??&lt;/code&gt;, or &lt;code&gt;help&lt;/code&gt; and pyflyby will import it for you.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Popen&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;?&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/ipython-help/&#34; class=&#34;wikilink&#34; data-title=&#34;Just Ask Ipython for help&#34; data-description=&#34;We can&amp;#39;t all remember every single function signature out there, it&amp;#39;s just not possible. If you want to stay productive while coding without the temptation...&#34; data-date=&#34;2021-10-10&#34; data-preview=&#34;We can&amp;#39;t all remember every single function signature out there, it&amp;#39;s just not possible. If you want to stay productive while coding without the temptation...&#34;&gt;Just Ask Ipython for help&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;autocomplete&#34;&gt;Autocomplete &lt;a href=&#34;#autocomplete&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;This is next level python auto-import&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;pyflyby even goes as far as helping tab completion.  If you try to tab complete&#xA;&lt;code&gt;Pop&lt;/code&gt; it will complete to &lt;code&gt;Popen&lt;/code&gt; without even adding &lt;code&gt;Popen&lt;/code&gt; to your local&#xA;namespace.  If you ask for something inside of a module i.e. &lt;code&gt;requests.&amp;lt;tab&amp;gt;&lt;/code&gt;,&#xA;then it will import requests.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# does not populate the namespace&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Pop&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tab&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# !!does populate the local namespace&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;requests&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tab&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;what-happens-when-a-module-is-not-installed&#34;&gt;What happens when a module is not installed &lt;a href=&#34;#what-happens-when-a-module-is-not-installed&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;ModuleNotFoundError&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;When you are in an environment where you do not have a module installed that is&#xA;in your pyflyby config, it will throw a &lt;code&gt;ModuleNotFoundError&lt;/code&gt; when it tries to&#xA;import, and it will not import or try to install for you.  You will have to&#xA;change environments or install that module.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;❯&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;?&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PYFLYBY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pandas&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pd&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PYFLYBY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Error&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;attempting&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;import pandas as pd&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;ModuleNotFoundError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;No&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;module&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;named&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pandas&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PYFLYBY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Traceback&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;most&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;recent&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;call&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;last&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PYFLYBY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/u_walkews/.local/lib/python3.8/site-packages/pyflyby/_autoimp.py&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1610&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_try_import&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PYFLYBY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;     &lt;span class=&#34;n&#34;&gt;exec_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stmt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;scratch_namespace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PYFLYBY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;string&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;module&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PYFLYBY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;ModuleNotFoundError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;No&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;module&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;named&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pandas&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Object&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;`&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;found&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;❯&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;df&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read_csv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://waylonwalker.com/cars.csv&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ipython&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;69&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b040434562&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;module&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;ne&#34;&gt;NameError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pd&amp;#39;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;defined&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;nvim-pyflyby-setup&#34;&gt;nvim pyflyby setup &lt;a href=&#34;#nvim-pyflyby-setup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;automatically importing python modules in vim, neovim, nvim&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is by far the best part of this article.  It makes development so fluid.&#xA;It’s not necessarily all about the speed.  It really helps you move at the&#xA;speed of your thoughts, without needing to worry about imports.  Remembering&#xA;where deeply nested modules are does not need to be a thing.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;!&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt;:&lt;span class=&#34;nx&#34;&gt;PyPreSave&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;Black&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;endfunction&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;!&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt;:&lt;span class=&#34;nx&#34;&gt;PyPostSave&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;execute&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;silent !tidy-imports --black --quiet --replace-star-imports --action REPLACE &amp;#34;&lt;/span&gt; . &lt;span class=&#34;nx&#34;&gt;bufname&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;%&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;execute&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;e&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;endfunction&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;!&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;PyPreSave&lt;/span&gt; :&lt;span class=&#34;nx&#34;&gt;call&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt;:&lt;span class=&#34;nx&#34;&gt;PyPreSave&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;!&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;PyPostSave&lt;/span&gt; :&lt;span class=&#34;nx&#34;&gt;call&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt;:&lt;span class=&#34;nx&#34;&gt;PyPostSave&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;augroup&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;waylonwalker&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;!&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufwritepre&lt;/span&gt; *.&lt;span class=&#34;nx&#34;&gt;py&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;execute&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;PyPreSave&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufwritepost&lt;/span&gt; *.&lt;span class=&#34;nx&#34;&gt;py&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;execute&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;PyPostSave&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufwritepost&lt;/span&gt; .&lt;span class=&#34;nx&#34;&gt;tmux&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;conf&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;execute&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;:!tmux source-file %&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufwritepost&lt;/span&gt; .&lt;span class=&#34;nx&#34;&gt;tmux&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;local&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;conf&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;execute&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;:!tmux source-file %&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufwritepost&lt;/span&gt; *.&lt;span class=&#34;nx&#34;&gt;vim&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;execute&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;:source %&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;augroup&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/pyflyby-nvim.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/pyflyby-nvim.gif&#34; alt=&#34;running pyflyby on save in nvim&#34;/ data-glightbox=&#34;description: running pyflyby on save in nvim&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;refactoring&#34;&gt;refactoring &lt;a href=&#34;#refactoring&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;This is where it really shines&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;This setup really shines when you are refactoring.  You can freely move modules&#xA;and classes around without worrying about bringing imports with them. Often&#xA;when refactoring some modules from one file to another the most tedious part is&#xA;editing the imports.  Often you can’t even grab whole lines because there are&#xA;several imports and some are needed in both places but not all.  pyflyby&#xA;handles all this like a champ.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/pyflyby-refactoring.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/pyflyby-refactoring.gif&#34; alt=&#34;simple refactoring example with pyflyby&#34;/ data-glightbox=&#34;description: simple refactoring example with pyflyby&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;where-to-install-for-vim&#34;&gt;Where to install for vim &lt;a href=&#34;#where-to-install-for-vim&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;just make sure the tidy-imports command is available to vim&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;pyflyby goes into the environment that you have active at the time that you&#xA;start neovim.  Typically, this is the &lt;a href=&#34;/virtual-environment/&#34; class=&#34;glossary-term&#34; title=&#34;Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...&#34;&gt;virtual environment&lt;/a&gt; that I am using for&#xA;the project I am editing.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-gets-importedremoved&#34;&gt;What gets imported/removed &lt;a href=&#34;#what-gets-importedremoved&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;only give me what I actually use&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Anything within the base config of pyflyby or your own config specified in&#xA;&lt;code&gt;~/.pyflyby&lt;/code&gt; will get automatically imported if it is used within the&#xA;file/console.  If you are working in a file, and stop using a module, it will&#xA;automatically get removed.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Anything that is used, and found in the config is added&lt;/li&gt;&#xA;&lt;li&gt;Anything that is unused gets removed&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;where-does-it-put-imports&#34;&gt;Where does it put imports &lt;a href=&#34;#where-does-it-put-imports&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;after the last import&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;pyflyby&lt;/code&gt; does not sort imports into paragraphs or by category.  When it needs&#xA;to add new imports.  It will find the last paragraph of imports in your file,&#xA;add the new one, and sort that paragraph alphabetically.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;collections&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Counter&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;requests&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;plugins.custom_seo&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;post_render&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# &amp;lt;-- pyflyby will put the import here&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;what-about-isort&#34;&gt;What about isort &lt;a href=&#34;#what-about-isort&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;put those imports where they go&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I did not like that I was getting pre-commit issues when using pyflyby, so I&#xA;added isort to my chain of autocommands to automatically run isort and make my&#xA;pre-commit happy.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;!&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt;:&lt;span class=&#34;nx&#34;&gt;PyPostSave&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;execute&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;silent !tidy-imports --black --quiet --replace-star-imports --action REPLACE &amp;#34;&lt;/span&gt; . &lt;span class=&#34;nx&#34;&gt;bufname&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;%&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;execute&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;silent !isort &amp;#34;&lt;/span&gt; . &lt;span class=&#34;nx&#34;&gt;bufname&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;%&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;execute&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;e&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;endfunction&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Let’s write some code&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    Get all the posts from waylonwalker.com.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    Yes theres an rss feed, you should be subscribed if your not already.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    Oh, and we don&amp;#39;t need no stinkin error handing because it&amp;#39;s always live&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;r&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;requests&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://waylonwalker.com/rss.xml&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;content&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Save it and pyflyby will inject requests into our file automatically, no need&#xA;to type that out anymore.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;requests&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    Get all the posts from waylonwalker.com.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    Yes theres an rss feed, you should be subscribed if your not already.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    Oh, and we don&amp;#39;t need no stinkin error handing because it&amp;#39;s always live&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;r&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;requests&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://waylonwalker.com/rss.xml&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;content&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;what-about-init--apis&#34;&gt;What about &lt;strong&gt;init&lt;/strong&gt; / api’s &lt;a href=&#34;#what-about-init--apis&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;careful to fill in the &lt;code&gt;__all__&lt;/code&gt; like you are supposed to&lt;/em&gt;&lt;/p&gt;&#xA;&lt;!-- ` --&gt;&#xA;&lt;p&gt;Files such as &lt;strong&gt;init&lt;/strong&gt;.py often import things they do not need, this is simply&#xA;there for a convenience of the library user and to make the api cleaner.  These&#xA;type of modules should implement a &lt;code&gt;__all__&lt;/code&gt; list of all the unused things that&#xA;are imported according to pep8.  Pyflyby will remove any unused modules unless&#xA;they are in the &lt;code&gt;__all__&lt;/code&gt; list.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# snippet from kedro.extras.datasets.pandas&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;__all__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;CSVDataSet&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;ExcelDataSet&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;FeatherDataSet&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;GBQTableDataSet&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;ExcelDataSet&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;AppendableExcelDataSet&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;HDFDataSet&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;JSONDataSet&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;ParquetDataSet&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;SQLQueryDataSet&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;SQLTableDataSet&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/pyflyby-__all__.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/pyflyby-__all__.gif&#34; alt=&#34;pyflyby in init files&#34;/ data-glightbox=&#34;description: pyflyby in init files&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;py-command&#34;&gt;py command &lt;a href=&#34;#py-command&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;one liners that need imports&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;pyflyby also comes with a cli command to run one liners.  It’s pretty genius,&#xA;I’m sure I will find a use or two for it, but so far it’s been more of a novelty&#xA;for me.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;py &lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt; pd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;py &lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt; pd.DataFrame&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;py pd.read_csv &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://waylonwalker.com/cars.csv&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/pyflyby-py.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/pyflyby-py.gif&#34; alt=&#34;pyflyby’s py command can run one liners from bash or zsh even with imports&#34;/ data-glightbox=&#34;description: pyflyby’s py command can run one liners from bash or zsh even with imports&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;links&#34;&gt;Links &lt;a href=&#34;#links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/deshaw/pyflyby&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pyflyby repo&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://deshaw.github.io/pyflyby/&#34;&gt;docs&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://youtu.be/2QW5DJiEJH4&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;My YouTube Video for pyflyby&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/ipython-config/&#34;&gt;configuring ipython&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/ipython-help/&#34;&gt;asking ipython for help??&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/cars.csv&#34;&gt;sample data I used with pandas&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/rss.xml&#34;&gt;my rss feed&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pypeaday aoc-2021-kedro-playground</title>
    <id>https://waylonwalker.com/pypeaday-aoc-2021-kedro-playground/</id>
    <updated>2021-12-17T21:05:51Z</updated>
    <published>2021-12-17T21:05:51Z</published>
    <link href="https://waylonwalker.com/pypeaday-aoc-2021-kedro-playground/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out aoc-2021-kedro-playground by pypeaday. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/pypeaday/aoc-2021-kedro-playground&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;aoc-2021-kedro-playground&lt;/a&gt; by &lt;a href=&#34;https://github.com/pypeaday&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pypeaday&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ elnappo dotfiles</title>
    <id>https://waylonwalker.com/elnappo-dotfiles/</id>
    <updated>2021-12-11T06:03:43Z</updated>
    <published>2021-12-11T06:03:43Z</published>
    <link href="https://waylonwalker.com/elnappo-dotfiles/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? dotfiles by elnappo.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/elnappo/dotfiles&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dotfiles&lt;/a&gt; by &lt;a href=&#34;https://github.com/elnappo&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;elnappo&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;my .files - powered by Ansible&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>You must use augroup with autocmd in vim | Here&#39;s how</title>
    <id>https://waylonwalker.com/vim-augroup/</id>
    <updated>2021-12-08T08:43:43Z</updated>
    <published>2021-12-08T08:43:43Z</published>
    <link href="https://waylonwalker.com/vim-augroup/" rel="alternate" type="text/html"></link>
    <summary type="text">If you are running vim autocmd&#39;s without a group, you&#39;re killing your performance. Granted your probably not sourcing your vimscript files with autocmd&#39;s too...</summary>
    <content type="html">&lt;p&gt;If you are running vim autocmd’s without a group, you’re killing your&#xA;performance.  Granted your probably not sourcing your vimscript files with&#xA;autocmd’s too often, but every time you source that vimscript you are adding&#xA;another command that needs to run redundantly.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/2ITTn4Dl0lc&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://youtu.be/2ITTn4Dl0lc&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;this-is-what-i-had&#34;&gt;This is what I had &lt;a href=&#34;#this-is-what-i-had&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Not silky smooth&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;For &lt;strong&gt;WAAY&lt;/strong&gt; too long I have had something like this in my  vimrc or init.vim.&#xA;It formats my python for me on every save, works great except if I source my&#xA;dotfiles more than once I start adding how many times black runs.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufwritepre&lt;/span&gt; *.&lt;span class=&#34;nx&#34;&gt;py&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;execute&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Black&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;why-is-a-bare-autocmd-bad&#34;&gt;Why is a bare autocmd bad &lt;a href=&#34;#why-is-a-bare-autocmd-bad&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;let me demonstrate&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Lets create a new file called &lt;code&gt;format.vim&lt;/code&gt; and give it the &lt;code&gt;:so %&lt;/code&gt;. Works&#xA;great, it starts telling me that its formatting.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufwritepre&lt;/span&gt; *.&lt;span class=&#34;nx&#34;&gt;py&lt;/span&gt; :&lt;span class=&#34;nx&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;formatting with black&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/vim-augroups-too-many-formats.GIF&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/vim-augroups-too-many-formats.GIF&#34; alt=&#34;too-many-formats&#34;/ data-glightbox=&#34;description: too-many-formats&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;&lt;strong&gt;BUT&lt;/strong&gt; as every time I give it the &lt;code&gt;:so %&lt;/code&gt; it formats an extra time on every&#xA;single save.&lt;/p&gt;&#xA;&lt;h2 id=&#34;setting-up-an-augroup&#34;&gt;Setting up an augroup &lt;a href=&#34;#setting-up-an-augroup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’ve been told I need an &lt;code&gt;augroup&lt;/code&gt; to prevent duplicates. So I did it, and&#xA;nothing changes, it still ran as many times as it was sources on every save.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;augroup&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;black&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufwritepre&lt;/span&gt; *.&lt;span class=&#34;nx&#34;&gt;py&lt;/span&gt; :&lt;span class=&#34;nx&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;formatting with black&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;augroup&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;clearing-out-the-augroup&#34;&gt;Clearing out the augroup &lt;a href=&#34;#clearing-out-the-augroup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;What you need to do is clear out all commands in the augroup with &lt;code&gt;autocmd!&lt;/code&gt;&#xA;right at the beginning of the group.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;augroup&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;black&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;!&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufwritepre&lt;/span&gt; *.&lt;span class=&#34;nx&#34;&gt;py&lt;/span&gt; :&lt;span class=&#34;nx&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;formatting with black&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;augroup&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;my-final-silky-smooth-setup&#34;&gt;My Final silky smooth setup &lt;a href=&#34;#my-final-silky-smooth-setup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now this is what I have in my dotfiles for a silky smooth setup that does not&#xA;run automds like crazy as I am making changes to my dotfiles.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;augroup&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;waylonwalker&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;!&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufwritepre&lt;/span&gt; *.&lt;span class=&#34;nx&#34;&gt;py&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;execute&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;PyPreSave&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufwritepost&lt;/span&gt; *.&lt;span class=&#34;nx&#34;&gt;py&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;execute&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;PyPostSave&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufwritepost&lt;/span&gt; .&lt;span class=&#34;nx&#34;&gt;tmux&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;conf&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;execute&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;:!tmux source-file %&amp;#39;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufwritepost&lt;/span&gt; .&lt;span class=&#34;nx&#34;&gt;tmux&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;local&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;conf&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;execute&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;:!tmux source-file %&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufwritepost&lt;/span&gt; *.&lt;span class=&#34;nx&#34;&gt;vim&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;execute&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;:source %&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;augroup&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;related-links&#34;&gt;Related Links &lt;a href=&#34;#related-links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://vimhelp.org/autocmd.txt.html#%3Aaugroup&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/vimhelp.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/vimhelp.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vim-help&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://youtu.be/2ITTn4Dl0lc&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;youtube video&lt;/a&gt; for this article&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Code Review from the comfort of vim | Diffurcate</title>
    <id>https://waylonwalker.com/diffurcate/</id>
    <updated>2021-12-04T11:34:47Z</updated>
    <published>2021-12-04T11:34:47Z</published>
    <link href="https://waylonwalker.com/diffurcate/" rel="alternate" type="text/html"></link>
    <summary type="text">I often review Pull requests from the browser as it just makes it so easy to see the diffs and navigate through them, but there comes a time when the diffs...</summary>
    <content type="html">&lt;p&gt;I often review Pull requests from the browser as it just makes it so easy to see&#xA;the diffs and navigate through them, but there comes a time when the diffs get&#xA;really big and hard to follow.  That’s when its time to bring in the comforts of&#xA;vim.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/5NKaZFavM0E&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://youtu.be/5NKaZFavM0E&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;plugins-needed&#34;&gt;Plugins needed &lt;a href=&#34;#plugins-needed&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This all stems from the great plugin by&#xA;&lt;a href=&#34;https://github.com/AndrewRadev&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;AndrewRadev&lt;/a&gt;.  It breaks a down&#xA;into a project.  So rather than poping into a pager from &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; diff,&#xA;you can pipe to diffurcate and it will setup a project in a tmp&#xA;directory for you and you  can browse this project just like any&#xA;other except it’s just a diff.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Plug&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;AndrewRadev/diffurcate.vim&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;my-aliases&#34;&gt;My aliases &lt;a href=&#34;#my-aliases&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;First to quickly checkout PR’s from azure devops I have setup an alias to fuzzy&#xA;select a pr and let the &lt;code&gt;az&lt;/code&gt; command do the checkout.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;azcheckout&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;az repos pr checkout --id $(az repos pr list --output table | tail -n -2 | fzf | cut -d &amp;#34; &amp;#34; -f1)&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Next I have a few aliases setup for checking diffs.  The first one checks what&#xA;is staged vs the current branch, the others check the current branch vs main or&#xA;master.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;alias diffstaged=&amp;#34;git diff --staged | nvim - +Diffurcate &amp;#39;+Telescope find_files&amp;#39;&amp;#34;&#xA;alias diffmain=&amp;#34;git diff main.. | nvim - +Diffurcate &amp;#39;+Telescope find_files&amp;#39;&amp;#34;&#xA;alias diffmaster=&amp;#34;git diff master.. | nvim - +Diffurcate &amp;#39;+Telescope find_files&amp;#39;&amp;#34;&#xA;&#xA;diffcommit() {&#xA;    git diff $1 | nvim - +Diffurcate &amp;#39;+Telescope find_files&amp;#39;&#xA;}&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;links&#34;&gt;Links &lt;a href=&#34;#links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/AndrewRadev/diffurcate.vim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;diffurcte.vim&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Setup a yaml schema | yamlls for a silky smooth setup</title>
    <id>https://waylonwalker.com/setup-yamlls/</id>
    <updated>2021-12-03T23:24:52Z</updated>
    <published>2021-12-03T23:24:52Z</published>
    <link href="https://waylonwalker.com/setup-yamlls/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve gone far too long without a good setup for editing yaml files, I am missing out on autocomplete and proper diagnostics. This ends today as I setup...</summary>
    <content type="html">&lt;p&gt;I’ve gone far too long without a good setup for editing yaml&#xA;files, I am missing out on autocomplete and proper diagnostics.&#xA;This ends today as I setup yaml-language-server in neovim.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/xo4HrFoKF4c&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/xo4HrFoKF4c&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The video for this one is part of a&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETAj0nR_WYAxxGjd7kXch5zj&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;challenge-playlist&lt;/a&gt;&#xA;I put out for myself to constantly improve my dotfiles for all of December.&lt;/p&gt;&#xA;&lt;h2 id=&#34;initvim&#34;&gt;init.vim &lt;a href=&#34;#initvim&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have my &lt;code&gt;init.vim&lt;/code&gt; setup to only source other modules, if you want everything&#xA;in a single config, feel free to do as you wish. I broke mine up earlier this&#xA;year as I doubled into nvim and am not going back.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;source&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;~&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/.config/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;nvim&lt;/span&gt;/&lt;span class=&#34;nx&#34;&gt;plugins&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;vim&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;lua&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;waylonwalker.cmp&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;lua&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;waylonwalker.lsp-config&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;plugin-setup&#34;&gt;Plugin setup &lt;a href=&#34;#plugin-setup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You will need the following plugins. I use plug, if you don’t you will have to&#xA;convert the syntax over to the plugin manager you use.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/neovim/nvim-lspconfig&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;neovim/nvim-lspconfig&lt;/a&gt; is for&#xA;configuring the lsp. It comes with a bunch of sane defaults for most servers,&#xA;so you pretty much just have to call setup on that server unless you want to&#xA;change the defaults.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/hrsh7th/nvim-cmp&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;hrsh7th/nvim-cmp&lt;/a&gt; is what I use for&#xA;autocomplete. If you are using something else you might need to set that up in&#xA;a different way in order to get the autocomplete to work. You will still get&#xA;the diagnostics with just lsp-config.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/kabouzeid/nvim-lspinstall&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kabouzeid/nvim-lspinstall&lt;/a&gt; will&#xA;aide in installing lsp’s if you want. I have chosen not to because I want to&#xA;have my full setup scripted so when I setup any new machine I just run my&#xA;ansible-playbook. This library is nice to just set things up quick and play&#xA;with them.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;#34; /home/u_walkews/.config/nvim/plugins.vim&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Plug&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;neovim/nvim-lspconfig&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;#34; if you want to use nvim-cmp&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Plug&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;hrsh7th/nvim-cmp&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Plug&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;hrsh7th/cmp-nvim-lsp&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;#34; if you want to use lsp-install&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Plug&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;kabouzeid/nvim-lspinstall&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;cmp-config&#34;&gt;cmp config &lt;a href=&#34;#cmp-config&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Make sure that you have nvim_lsp as a source in your cmp config. This is my&#xA;config as of now, its likely to change in the future, set yours up how you&#xA;like. hrsh7th has a really good readme if you want help configuring cmp.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Again if you don’t use cmp you can skip this step, cmp is for autocomplete.&#xA;You can use a different plugin for autocomplete, or not use a plugin at all&#xA;if that’s your thing.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;--  ~/.config/nvim/lua/waylonwalker/lsp-config.lua&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;-- Setup nvim-cmp.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;cmp&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cmp.setup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;snippet&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;expand&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;-- For `vsnip` user.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;vim.fn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;vsnip#anonymous&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;](&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args.body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;-- For `luasnip` user.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;-- require(&amp;#39;luasnip&amp;#39;).lsp_expand(args.body)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;-- For `ultisnips` user.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;-- vim.fn[&amp;#34;UltiSnips#Anon&amp;#34;](args.body)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;mapping&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;C-n&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.mapping&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;select_next_item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;behavior&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.SelectBehavior&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Insert&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;C-p&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.mapping&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;select_prev_item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;behavior&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.SelectBehavior&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Insert&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;Down&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.mapping&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;select_next_item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;behavior&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.SelectBehavior&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Select&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;Up&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.mapping&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;select_prev_item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;behavior&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.SelectBehavior&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Select&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;C-d&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.mapping&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;scroll_docs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;C-f&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.mapping&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;scroll_docs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;C-Space&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.mapping&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;complete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;C-e&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.mapping&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;close&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;CR&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.mapping&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;confirm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;behavior&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.ConfirmBehavior&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Replace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;select&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sources&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;nvim_lsp&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;vsnip&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;path&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;buffer&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;calc&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;tmux&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;lsp-config&#34;&gt;lsp config &lt;a href=&#34;#lsp-config&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Next up is the heart of this post, the lsp-config.lua. This one is pretty&#xA;straight forward, require lspconfig (which you need the plugin for), then set&#xA;it up with cmp and the extra schemas. I’m sure there are yaml schemas for tons&#xA;of things, I’ll probably add more in the future, but for now, this is what I&#xA;have.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;--  ~/.config/nvim/lua/waylonwalker/lsp-config.lua&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;lspconfig&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yamlls.setup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;on_attach&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;on_attach&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;capabilities&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;cmp_nvim_lsp&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;update_capabilities&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vim.lsp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;protocol.make_client_capabilities&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;settings&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;yaml&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;schemas&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://raw.githubusercontent.com/kedro-org/kedro/develop/static/jsonschema/kedro-catalog-0.17.json&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;conf/**/*catalog*&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://json.schemastore.org/github-workflow.json&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/.github/workflows/*&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;related-links&#34;&gt;Related Links &lt;a href=&#34;#related-links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/WaylonWalker/devtainer/tree/main/nvim/.config/nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;my nvim config&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/neovim/nvim-lspconfig&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-lspconfig GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/hrsh7th/nvim-cmp&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-cmp GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/kabouzeid/nvim-lspinstall/blob/main/lua/lspinstall/servers/yaml.lua&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lspinstall yamlls&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.npmjs.com/package/yaml-language-server?activeTab=readme&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.npmjs.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.npmjs.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;yaml-language-server npm&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Follow the &lt;a href=&#34;https://youtube.com/waylonwalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;YouTube channel&lt;/a&gt; or the&#xA;&lt;a href=&#34;https://waylonwalker/rss/&#34;&gt;rss-feed&lt;/a&gt; to stay up to date.&lt;/p&gt;&#xA;&lt;h2 id=&#34;also-check-out-my-python-lsp-setup&#34;&gt;Also Check out My python lsp setup &lt;a href=&#34;#also-check-out-my-python-lsp-setup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/setup-pylsp/&#34; class=&#34;hoverlink&#34;&gt;https://waylonwalker.com/setup-pylsp/&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ borgmanJeremy aoc_2021</title>
    <id>https://waylonwalker.com/borgmanjeremy-aoc_2021/</id>
    <updated>2021-12-03T01:42:54Z</updated>
    <published>2021-12-03T01:42:54Z</published>
    <link href="https://waylonwalker.com/borgmanjeremy-aoc_2021/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred aoc_2021 by borgmanJeremy. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/borgmanJeremy/aoc_2021&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;aoc_2021&lt;/a&gt; by &lt;a href=&#34;https://github.com/borgmanJeremy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;borgmanJeremy&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pypeaday aoc-2021</title>
    <id>https://waylonwalker.com/pypeaday-aoc-2021/</id>
    <updated>2021-12-02T23:20:05Z</updated>
    <published>2021-12-02T23:20:05Z</published>
    <link href="https://waylonwalker.com/pypeaday-aoc-2021/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred aoc-2021 by pypeaday. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/pypeaday/aoc-2021&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;aoc-2021&lt;/a&gt; by &lt;a href=&#34;https://github.com/pypeaday&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pypeaday&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;Advent of Code 2021 repo&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Open files FAST from zsh | or bash if thats your thing</title>
    <id>https://waylonwalker.com/fuzzy-edit-zsh/</id>
    <updated>2021-12-02T11:34:47Z</updated>
    <published>2021-12-02T11:34:47Z</published>
    <link href="https://waylonwalker.com/fuzzy-edit-zsh/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/PQw_is7rQSw</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/PQw_is7rQSw&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://youtu.be/PQw_is7rQSw&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I am often in a set of tmux splits flying back and forth, accidentally close my&#xA;editor, so when I come back to that split and hit my keybinds to edit files I&#xA;enter them into zsh rather than into nvim like I intended.  Today I am going to&#xA;sand off that rough edge and get as similar behavior to nvim as I can with a&#xA;couple of aliases.&lt;/p&gt;&#xA;&lt;p&gt;Make sure you check out the YouTube video to see all of my improvements.&lt;/p&gt;&#xA;&lt;h2 id=&#34;whats-an-alias&#34;&gt;what’s an alias &lt;a href=&#34;#whats-an-alias&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you have never heard of an alias before it’s essentially a shortcut to a&#xA;given command.  You can pass additional flags to the underlying command and&#xA;they will get passed in.  Most of the time they are just shorter versions of&#xA;commands that you run often or even like in this case a common muscle memory&#xA;typo that occurs for you.&lt;/p&gt;&#xA;&lt;h2 id=&#34;my-new-aliass-for-fuzzy-editing-files-from-zsh&#34;&gt;My new alias’s for fuzzy editing files from zsh &lt;a href=&#34;#my-new-aliass-for-fuzzy-editing-files-from-zsh&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here are the new aliases that I came up with to smooth out my workflow.  These&#xA;give me a similar feel to how these keys work in neovim but from zsh.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# fuzzy select file to edit&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;nvim `fzf --preview=&amp;#34;bat --color always {}&amp;#34;`&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# give me the same syntax as edit while in neovim&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; :e&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;nvim &amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Follow the &lt;a href=&#34;https://youtube.com/waylonwalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;YouTube channel&lt;/a&gt; or the &lt;a href=&#34;https://waylonwalker/rss/&#34;&gt;rss&#xA;feed&lt;/a&gt; to stay up to date.&lt;/p&gt;&#xA;&lt;h2 id=&#34;related-links&#34;&gt;Related links &lt;a href=&#34;#related-links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETAj0nR_WYAxxGjd7kXch5zj&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;playlist for my dotfiles challenge&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>How linux users install a text editor</title>
    <id>https://waylonwalker.com/install-nvim-skit/</id>
    <updated>2021-11-30T23:18:24Z</updated>
    <published>2021-11-30T23:18:24Z</published>
    <link href="https://waylonwalker.com/install-nvim-skit/" rel="alternate" type="text/html"></link>
    <summary type="text">In honor of the neovim 0.6.0 release, I decided to do a funny skit installing neovim, and fix up my install script in the process as part of my challenge to...</summary>
    <content type="html">&lt;p&gt;In honor of the neovim 0.6.0 release, I decided to do a funny skit installing&#xA;neovim, and fix up my install script in the process as part of my challenge to&#xA;fix up my dotfiles.  I ran into one snag where I was not updating the repo that&#xA;I cloned.  I moved it to the directory I now keep third-party &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; repos and set&#xA;it to update with ansible.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/64oKLphhBuo&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://youtu.be/64oKLphhBuo&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The thing that took me the longest to realize was…. I had a path issue&#xA;pointing me to an old install of the appimage over the fresh build,  fixed that&#xA;up and now we are on 0.7.0 nightly.&lt;/p&gt;&#xA;&lt;h2 id=&#34;related-links&#34;&gt;Related Links &lt;a href=&#34;#related-links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://neovim.io/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/neovim.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/neovim.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://neovim.io/&lt;/a&gt;&#xA;&lt;a href=&#34;https://github.com/neovim/neovim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/neovim/neovim&lt;/a&gt;&#xA;&lt;a href=&#34;https://github.com/neovim/neovim/releases/tag/v0.6.0&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/neovim/neovim/releases/tag/v0.6.0&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ neovim neovim</title>
    <id>https://waylonwalker.com/neovim-neovim/</id>
    <updated>2021-11-30T18:22:35Z</updated>
    <published>2021-11-30T18:22:35Z</published>
    <link href="https://waylonwalker.com/neovim-neovim/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on neovim by neovim.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/neovim/neovim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;neovim&lt;/a&gt; by &lt;a href=&#34;https://github.com/neovim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;neovim&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Vim-fork focused on extensibility and usability&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ lewis6991 gitsigns.nvim</title>
    <id>https://waylonwalker.com/lewis6991-gitsigns-nvim/</id>
    <updated>2021-11-30T17:45:28Z</updated>
    <published>2021-11-30T17:45:28Z</published>
    <link href="https://waylonwalker.com/lewis6991-gitsigns-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">lewis6991 has done a fantastic job with gitsigns.nvim. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/lewis6991&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lewis6991&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/lewis6991/gitsigns.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gitsigns.nvim&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;Git&lt;/a&gt; integration for buffers&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>30 days dotfile ricing</title>
    <id>https://waylonwalker.com/dotfile-rice-challenge-intro/</id>
    <updated>2021-11-29T11:34:47Z</updated>
    <published>2021-11-29T11:34:47Z</published>
    <link href="https://waylonwalker.com/dotfile-rice-challenge-intro/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/Jq1Y48F_rOU</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/Jq1Y48F_rOU&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/Jq1Y48F_rOU&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I am challenging myself to 30 days of dotfile ricing. I have been on linux&#xA;desktop for a few months now and have a pretty good workflow going, I have the&#xA;coarse edits done to my workflow, but it has some rough edges that need sanded&#xA;down. It’s time to squash some of those little annoyances that still exist in&#xA;my setup.&lt;/p&gt;&#xA;&lt;p&gt;This is primarily going to be focused on productivity, but may have a few&#xA;things to just look better. This will comprise heavily of aliases, zsh, and&#xA;nvim config.&lt;/p&gt;&#xA;&lt;p&gt;Follow the &lt;a href=&#34;https://youtube.com/waylonwalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;YouTube channel&lt;/a&gt; or the &lt;a href=&#34;https://waylonwalker/rss/&#34;&gt;rss&#xA;feed&lt;/a&gt; to stay up to date.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>JUT | Read Notebooks in the Terminal</title>
    <id>https://waylonwalker.com/jut/</id>
    <updated>2021-11-20T10:38:00Z</updated>
    <published>2021-11-20T10:38:00Z</published>
    <link href="https://waylonwalker.com/jut/" rel="alternate" type="text/html"></link>
    <summary type="text">Trying to read a .ipynb file without starting a jupyter server? jut has you covered.</summary>
    <content type="html">&lt;p&gt;Trying to read a .ipynb file without starting a jupyter server?  jut has you&#xA;covered.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/t8AvImnwor0&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://youtu.be/t8AvImnwor0&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;watch the video version of this post on &lt;a href=&#34;https://youtu.be/t8AvImnwor0&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;YouTube&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;install&#34;&gt;install &lt;a href=&#34;#install&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;jut&lt;/code&gt; is packaged and available on pypi so installing is as easy as pip installing it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install jut&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/jut-install.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/jut-install.gif&#34; alt=&#34;installing jut with pip&#34;/ data-glightbox=&#34;description: installing jut with pip&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;! This is my first time including snippets of the video in the article like this, let me know what you think!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;examples&#34;&gt;examples &lt;a href=&#34;#examples&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;jut https://cantera.org/examples/jupyter/thermo/flame_temperature.ipynb&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;jut https://cantera.org/examples/jupyter/thermo/flame_temperature.ipynb --head &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;jut https://cantera.org/examples/jupyter/thermo/flame_temperature.ipynb --tail &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/jut-command.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/jut-command.gif&#34; alt=&#34;running jut examples&#34;/ data-glightbox=&#34;description: running jut examples&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;what-are-all-the-commands-available-for-jut&#34;&gt;what are all the commands available for jut? &lt;a href=&#34;#what-are-all-the-commands-available-for-jut&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Take a look at the help of the &lt;code&gt;jut&lt;/code&gt; cli to explore all the options that it&#xA;offers.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;jut --help&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;There is some good information on the projects&#xA;&lt;a href=&#34;https://github.com/kracekumar/jut&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;readme&lt;/a&gt; as well.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/jut-help.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/jut-help.gif&#34; alt=&#34;getting help with jut&#34;/ data-glightbox=&#34;description: getting help with jut&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;without-installing&#34;&gt;without installing &lt;a href=&#34;#without-installing&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;using pipx&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Don’t want jut cluttering up your venv, or want to save yourself from making a&#xA;new one, &lt;a href=&#34;https://github.com/pypa/pipx&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;&lt;code&gt;pipx&lt;/code&gt;&lt;/a&gt; can manage a separate virual&#xA;environment for you.  This is one of the biggest selling points for me.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx run jut https://cantera.org/examples/jupyter/thermo/flame_temperature.ipynb --head &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/jut-pipx.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/jut-pipx.gif&#34; alt=&#34;running jut with pipx&#34;/ data-glightbox=&#34;description: running jut with pipx&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;nbconvert&#34;&gt;nbconvert &lt;a href=&#34;#nbconvert&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;jut&lt;/code&gt; is the lightweight option that I think will fit the bill often for me,&#xA;but it just doesn’t always cut it.  Mostly if there are images in the notebook&#xA;or  large output that is hard to read, its time to pull out the medium guns&#xA;that sit between fulling running jupyter and &lt;code&gt;jut&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install nbconvert&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;nbconvert does not have its own cli, instead it sits under the jupyter command.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;converting-to-&lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;html&lt;/a&gt;&#34;&gt;converting to html &lt;a href=&#34;#converting-to-html&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Need to see images, go here!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://cantera.org/examples/jupyter/thermo/flame_temperature.ipynb&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;jupyter nbconvert flame_temperature.ipynb --to html&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python -m http.server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Note, nb convert does not work with a url, you will need to have the notebook locally.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/jut-nbconvert-html.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/jut-nbconvert-html.gif&#34; alt=&#34;nbconvert to html to see images&#34;/ data-glightbox=&#34;description: nbconvert to html to see images&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;what-other-options-does-nbconvert-offer&#34;&gt;what other options does nbconvert offer? &lt;a href=&#34;#what-other-options-does-nbconvert-offer&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;nbconvert&lt;/code&gt; also offers a standard help flag that you can access by passing in&#xA;the &lt;code&gt;--help&lt;/code&gt; flag&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;jupyter nbconvert --help&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;converting-to-markdown&#34;&gt;converting to markdown &lt;a href=&#34;#converting-to-markdown&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;nbconvert&lt;/code&gt; also supports converting to many other formats, one option that is&#xA;quite interesting for use in the terminal is markdown.  We could simply convert&#xA;the notebook to markdown and cat it out.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;jupyter nbconvert flame_temperature.ipynb --to maarkdown&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat flameflame_temperature.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/jut-nbconvert-markdown-bat.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/jut-nbconvert-markdown-bat.gif&#34; alt=&#34;nbconvert to markdown and displaying in bat&#34;/ data-glightbox=&#34;description: nbconvert to markdown and displaying in bat&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;viewing-markdown-with-glow&#34;&gt;viewing markdown with glow &lt;a href=&#34;#viewing-markdown-with-glow&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Glow is a terminal markdown viewer that looks really good.  These days I use&#xA;&lt;code&gt;bat&lt;/code&gt; as &lt;code&gt;cat&lt;/code&gt; so I don’t get quite as much benefit from &lt;code&gt;glow&lt;/code&gt;, but it still&#xA;looks pretty good.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;glow flameflame_temperature.md&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/jut-nbconvert-markdown-glow.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/jut-nbconvert-markdown-glow.gif&#34; alt=&#34;nbconvert to markdown and displaying in glow&#34;/ data-glightbox=&#34;description: nbconvert to markdown and displaying in glow&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;viewing-markdown-as-slides-with-lookatme&#34;&gt;viewing markdown as slides with lookatme &lt;a href=&#34;#viewing-markdown-as-slides-with-lookatme&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;a href=&#34;https://github.com/d0c-s4vage/lookatme&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lookatme&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Lookatme is my slideshow tool of choice.  Creating slides in markdown is such a&#xA;fantasic user experience,  It realy lets you go from outline to finished slide&#xA;deck fluidly.  Refactoring the whole thing is also so much easier than with gui&#xA;tools.  Once you have your idea fleshed out it does make the process of making&#xA;slides in powerpoint much easier if thats what you need.&lt;/p&gt;&#xA;&lt;p&gt;On to nbconvert, without even changing the notebook we can look at the notebook&#xA;as a slideshow in the terminal.  The only thing that it needs is some markdown&#xA;headers to start new slides from.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lookatme flameflame_temperature.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/jut-nbconvert-markdown-lookatme.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/jut-nbconvert-markdown-lookatme.gif&#34; alt=&#34;nbconvert to markdown and displaying as slides with lookatme&#34;/ data-glightbox=&#34;description: nbconvert to markdown and displaying as slides with lookatme&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;viewing-markdown-with-rich&#34;&gt;viewing markdown with rich &lt;a href=&#34;#viewing-markdown-with-rich&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Bringing this full circle, lets take a look at the converted markdown with&#xA;rich.  Here you will notice a surprising similarity to what we saw with &lt;code&gt;jut&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install rich&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python -m rich.markdown flame_temperature.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Rich still cannot pull directly from a url or display markdown with out being&#xA;installed and managed by yourself.  Unlike how &lt;code&gt;jut&lt;/code&gt; can leverage &lt;a href=&#34;https://github.com/pypa/pipx&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;&lt;code&gt;pipx&lt;/code&gt;&lt;/a&gt; to&#xA;manage the installation sandbox for you.&lt;/p&gt;&#xA;&lt;h2 id=&#34;links&#34;&gt;Links &lt;a href=&#34;#links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/kracekumar/jut&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jut&lt;/a&gt; - View notebooks in the terminal&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://nbconvert.readthedocs.io/en/latest/usage.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/nbconvert.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/nbconvert.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nbconvert&lt;/a&gt; - convert notebooks to other formats&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://cantera.org/examples/jupyter/thermo/flame_temperature.ipynb&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/cantera.org.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/cantera.org.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;flame-temperature notebook&lt;/a&gt; - The sample notebook I used&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/charmbracelet/glow&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;glow&lt;/a&gt; - Terminal Markdown viewer&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/d0c-s4vage/lookatme&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lookatme&lt;/a&gt; - Terminal Markdown slideshow tool&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pypa/pipx&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pipx&lt;/a&gt; - Run python cli’s without maintianing a &lt;a href=&#34;/virtual-environment/&#34; class=&#34;glossary-term&#34; title=&#34;Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...&#34;&gt;virtual environment&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/willmcgugan/rich&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rich&lt;/a&gt; - Beautiful python terminal formatter&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Waylon Walker</title>
    <id>https://waylonwalker.com/about/</id>
    <updated>2021-11-20T10:38:00Z</updated>
    <published>2021-11-20T10:38:00Z</published>
    <link href="https://waylonwalker.com/about/" rel="alternate" type="text/html"></link>
    <summary type="text">👋 Hi, I am Waylon Walker. Husband, Father of two, and creator things on the web, learning, and teaching others. I play lots of Minecraft, make art, and...</summary>
    <content type="html">&lt;p&gt;👋 Hi, I am Waylon Walker.  Husband, Father of two, and creator things on the&#xA;web, learning, and teaching others.  I play lots of Minecraft, make art, and&#xA;skate everyday with my kids.  I finish the day binging episodes of Big Bang&#xA;Theory with my wife.&lt;/p&gt;&#xA;&lt;p&gt;I believe in a decentralized platform where everyone has their own space on&#xA;this internet to share their thoughts and ideas.  I created my blogging&#xA;platform from scratch to learn about building tools with pluggy and diskcache.&#xA;I was frustrated with long build times, black holes of node modules, bloated&#xA;pages, and a lack of built in SEO tools.  Instead I built my own under funded,&#xA;over dreamed, nearly undocumented framework to that I love and maintain.&lt;/p&gt;&#xA;&lt;p&gt;I am a Senior Software Engineer specializing in building data pipelines and web&#xA;platforms with python.&lt;/p&gt;&#xA;&lt;p&gt;If you are wondering what all makes up this site and how I think about it&#xA;see &lt;a href=&#34;/about-this-site/&#34; class=&#34;wikilink&#34; data-title=&#34;about this site&#34; data-description=&#34;I registered waylonwalker.com and started making content for it in 2017 after a big industry downturn in 2016 that left me scared for what would happen if I...&#34; data-date=&#34;2024-05-31&#34; data-preview=&#34;I registered waylonwalker.com and started making content for it in 2017 after a big industry downturn in 2016 that left me scared for what would happen if I...&#34;&gt;about this site&lt;/a&gt; or how the site is built and the specific tech&#xA;stack in &lt;a href=&#34;/colophon/&#34; class=&#34;wikilink&#34; data-title=&#34;/colophon&#34; data-description=&#34;Colophon a page that describes how the site &amp;gt; is made, with what tools, supporting what technologies&#34; data-date=&#34;2025-01-02&#34; data-preview=&#34;Colophon a page that describes how the site &amp;gt; is made, with what tools, supporting what technologies&#34;&gt;/colophon&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;meta-pages&#34;&gt;Meta pages &lt;a href=&#34;#meta-pages&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Some evergreen pages that are more about me or this site.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ thoughtbot dotfiles</title>
    <id>https://waylonwalker.com/thoughtbot-dotfiles/</id>
    <updated>2021-11-17T15:03:00Z</updated>
    <published>2021-11-17T15:03:00Z</published>
    <link href="https://waylonwalker.com/thoughtbot-dotfiles/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? dotfiles by thoughtbot.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/thoughtbot/dotfiles&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dotfiles&lt;/a&gt; by &lt;a href=&#34;https://github.com/thoughtbot&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;thoughtbot&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A set of vim, zsh, &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt;, and tmux configuration files.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>kedro catalog create</title>
    <id>https://waylonwalker.com/kedro-catalog-create-cli/</id>
    <updated>2021-11-15T07:18:55Z</updated>
    <published>2021-11-15T07:18:55Z</published>
    <link href="https://waylonwalker.com/kedro-catalog-create-cli/" rel="alternate" type="text/html"></link>
    <summary type="text">I use to boost my productivity by automatically generating yaml catalog entries for me. It will create new yaml files for each pipeline, fill in missiing...</summary>
    <content type="html">&lt;p&gt;I use &lt;code&gt;kedro catalog create&lt;/code&gt; to boost my productivity by automatically&#xA;generating yaml catalog entries for me.  It will create new yaml files for each&#xA;pipeline, fill in missiing catalog entries, and respect already existing&#xA;catalog entries.  It will reformat the file, and sort it based on catalog key.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/_22ELT4kja4&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/_22ELT4kja4&lt;/a&gt;&lt;/p&gt;&#xA;&lt;!-- syntax highlighting broken after underscore from the link __ --&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/what-is-kedro/&#34; class=&#34;wikilink&#34; data-title=&#34;What is Kedro&#34; data-description=&#34;Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...&#34; data-date=&#34;2021-08-17&#34; data-preview=&#34;Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...&#34;&gt;What is Kedro&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;👆 Unsure what kedro is?  Check out this post.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;running-kedro-catalog-create&#34;&gt;Running Kedro Catalog Create &lt;a href=&#34;#running-kedro-catalog-create&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The command to ensure there are catalog entries for every dataset in the passed&#xA;in pipeline.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro catalog create --pipeline history_nodes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;Create’s new yaml file, if needed&lt;/li&gt;&#xA;&lt;li&gt;Fills in new dataset entries with the default dataset&lt;/li&gt;&#xA;&lt;li&gt;Keeps existing datasets untouched&lt;/li&gt;&#xA;&lt;li&gt;it will reformat your yaml file a bit&#xA;&lt;ul&gt;&#xA;&lt;li&gt;default sorting will be applied&lt;/li&gt;&#xA;&lt;li&gt;empty newlines will be removed&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;conf-root&#34;&gt;CONF_ROOT &lt;a href=&#34;#conf-root&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Kedro will respect your &lt;code&gt;CONF_ROOT&lt;/code&gt; settings when it creates a new catalog&#xA;file, or looks for existing catalog files.  You can change the location of your&#xA;configuration files by editing your &lt;code&gt;CONF_ROOT&lt;/code&gt; variable in your projects.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;settings.py&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# settings.py&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# default settings&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;CONF_ROOT&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;conf&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# I like to package my configuration&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;CONF_ROOT&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;vm&#34;&gt;__file__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parent&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;conf&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;I prefer to keep my configuration packaged inside of my project.  This is&#xA;partly due to how my team operates and deploys pipelines.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;file-location&#34;&gt;File Location &lt;a href=&#34;#file-location&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The &lt;code&gt;kedro catalog create&lt;/code&gt; command will look for a &lt;code&gt;yaml&lt;/code&gt; file based on the&#xA;name of the pipeline (&lt;code&gt;CONF_ROOT/catalog/&amp;lt;pipeline-name&amp;gt;.yml&lt;/code&gt;).  If it does not&#xA;find one it will create one and make entries for each dataset in the pipeline.&#xA;It will not look in all of your existing catalog files for entries, only the&#xA;one in the exact file for your pipeline.  If you are going to use this command&#xA;its important that you follow this pattern or copy what it generates into your&#xA;own catalog file of choice.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;⚠️ It will not look in all of your existing catalog files for entries, only the&#xA;one in the exact file for your pipeline.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;memorydatasets&#34;&gt;MemoryDataSet’s &lt;a href=&#34;#memorydatasets&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;When you run &lt;code&gt;kedro catalog create&lt;/code&gt; you get &lt;code&gt;MemoryDataSet&lt;/code&gt;, that’s it.  As of&#xA;&lt;code&gt;0.17.4&lt;/code&gt; its hard coded into the library and not configurable.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;range12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;MemoryDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;your-free-to-use-what-you-want-though&#34;&gt;Your free to use what you want though &lt;a href=&#34;#your-free-to-use-what-you-want-though&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let’s switch this dataset over to a &lt;code&gt;pandas.CSVDataSet&lt;/code&gt; so that the file gets&#xA;stored and we can pick up  and read the file without re-running the whole&#xA;pipeline.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;range12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/range12.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;continue-adding-nodes&#34;&gt;Continue adding nodes &lt;a href=&#34;#continue-adding-nodes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As we work we will keep adding nodes to our kedro pipeline, in this case we&#xA;added another node that created a dataset called &lt;code&gt;range13&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro catalog create --pipeline history_nodes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;After telling kedro to create new catalog entries for us we will see that it&#xA;left our &lt;code&gt;range12&lt;/code&gt; entry alone and created &lt;code&gt;range13&lt;/code&gt; for us.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;range12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/range12.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;range13&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;MemoryDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;formatting-is-not-worthwhile&#34;&gt;Formatting is not worthwhile &lt;a href=&#34;#formatting-is-not-worthwhile&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If we decide this is too cramped for us we could add some space between&#xA;datasets.  The next time we run &lt;code&gt;kedro catalog create&lt;/code&gt; empty lines will be&#xA;removed.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;range12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;range13&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;MemoryDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;continuing-to-work&#34;&gt;Continuing to work &lt;a href=&#34;#continuing-to-work&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If we coninue adding new nodes, and tell kedro to create catalog entries again,&#xA;all of our effort given to formatting will be lost.  I wouldn’t worry about it&#xA;unless you have an autoformatter that you can run on your yaml files.  The&#xA;productivity gains in an semi-automated catalog are worth it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;range12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/range12.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;range121&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;MemoryDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;range13&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;MemoryDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;sorting-order&#34;&gt;Sorting Order &lt;a href=&#34;#sorting-order&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Notice the sorting order in the last entry, &lt;code&gt;range121&lt;/code&gt; comes before &lt;code&gt;range13&lt;/code&gt;.&#xA;This is all based on how pythons &lt;code&gt;yaml.safe_dump&lt;/code&gt; works, kedro has set the&#xA;&lt;code&gt;default_flow_style&lt;/code&gt; to &lt;code&gt;False&lt;/code&gt;.  You can see where they write your file in the&#xA;source code currently&#xA;&lt;a href=&#34;https://github.com/kedro-org/kedro/blob/master/kedro/framework/cli/catalog.py#L202&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nvim-telescope telescope-media-files.nvim</title>
    <id>https://waylonwalker.com/nvim-telescope-telescope-media-files-nvim/</id>
    <updated>2021-11-08T16:27:08Z</updated>
    <published>2021-11-08T16:27:08Z</published>
    <link href="https://waylonwalker.com/nvim-telescope-telescope-media-files-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">telescope-media-files.nvim by nvim-telescope is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/nvim-telescope/telescope-media-files.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;telescope-media-files.nvim&lt;/a&gt; by &lt;a href=&#34;https://github.com/nvim-telescope&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-telescope&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;Telescope extension to preview media files using Ueberzug.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ sqlfluff sqlfluff</title>
    <id>https://waylonwalker.com/sqlfluff-sqlfluff/</id>
    <updated>2021-11-06T18:22:45Z</updated>
    <published>2021-11-06T18:22:45Z</published>
    <link href="https://waylonwalker.com/sqlfluff-sqlfluff/" rel="alternate" type="text/html"></link>
    <summary type="text">sqlfluff by sqlfluff is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/sqlfluff/sqlfluff&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sqlfluff&lt;/a&gt; by &lt;a href=&#34;https://github.com/sqlfluff&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sqlfluff&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;A modular SQL linter and auto-formatter with support for multiple dialects and templated code.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ hrsh7th cmp-copilot</title>
    <id>https://waylonwalker.com/hrsh7th-cmp-copilot/</id>
    <updated>2021-11-04T20:01:18Z</updated>
    <published>2021-11-04T20:01:18Z</published>
    <link href="https://waylonwalker.com/hrsh7th-cmp-copilot/" rel="alternate" type="text/html"></link>
    <summary type="text">cmp-copilot by hrsh7th is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/hrsh7th/cmp-copilot&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cmp-copilot&lt;/a&gt; by &lt;a href=&#34;https://github.com/hrsh7th&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;hrsh7th&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;copilot.vim source for nvim-cmp&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ JessicaTegner pypandoc</title>
    <id>https://waylonwalker.com/jessicategner-pypandoc/</id>
    <updated>2021-10-30T13:58:12Z</updated>
    <published>2021-10-30T13:58:12Z</published>
    <link href="https://waylonwalker.com/jessicategner-pypandoc/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? pypandoc by JessicaTegner.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/JessicaTegner/pypandoc&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pypandoc&lt;/a&gt; by &lt;a href=&#34;https://github.com/JessicaTegner&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;JessicaTegner&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Thin wrapper for “pandoc” (MIT)&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ abhinavsp0730 kedro-wdbc-tf</title>
    <id>https://waylonwalker.com/abhinavsp0730-kedro-wdbc-tf/</id>
    <updated>2021-10-30T13:56:56Z</updated>
    <published>2021-10-30T13:56:56Z</published>
    <link href="https://waylonwalker.com/abhinavsp0730-kedro-wdbc-tf/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by kedro-wdbc-tf from abhinavsp0730.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/abhinavsp0730/kedro-wdbc-tf&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-wdbc-tf&lt;/a&gt; from &lt;a href=&#34;https://github.com/abhinavsp0730&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;abhinavsp0730&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ chipsenkbeil distant.nvim</title>
    <id>https://waylonwalker.com/chipsenkbeil-distant-nvim/</id>
    <updated>2021-10-29T18:58:53Z</updated>
    <published>2021-10-29T18:58:53Z</published>
    <link href="https://waylonwalker.com/chipsenkbeil-distant-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out chipsenkbeil and their project distant.nvim.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/chipsenkbeil&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;chipsenkbeil&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/chipsenkbeil/distant.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;distant.nvim&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;🚧 (Alpha stage software) Edit files, run programs, and work with LSP on a remote machine from the comfort of your local environment 🚧&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>nvim conf 2021 | IDE&#39;s are slow | Waylon Walker</title>
    <id>https://waylonwalker.com/nvim-ides-are-slow/</id>
    <updated>2021-10-29T00:00:00Z</updated>
    <published>2021-10-29T00:00:00Z</published>
    <link href="https://waylonwalker.com/nvim-ides-are-slow/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/E18m4KkJUnI</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/E18m4KkJUnI&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/E18m4KkJUnI&lt;/a&gt;&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;slides-&#34;&gt;Slides 👇 &lt;a href=&#34;#slides-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;welcome&#34;&gt;welcome &lt;a href=&#34;#welcome&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;other-possible-titles&#34;&gt;Other possible titles &lt;a href=&#34;#other-possible-titles&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Using Vim as a Team Lead&lt;/li&gt;&#xA;&lt;li&gt;I 💜 Tmux&lt;/li&gt;&#xA;&lt;li&gt;Why I stopped using @code&lt;/li&gt;&#xA;&lt;li&gt;Get there fast&lt;/li&gt;&#xA;&lt;li&gt;How I vim&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;its-ok&#34;&gt;It’s ok &lt;a href=&#34;#its-ok&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Use a graphical IDE if it works for you.&lt;/p&gt;&#xA;&lt;h2 id=&#34;trick-it-out&#34;&gt;Trick it out &lt;a href=&#34;#trick-it-out&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;vim is so well integrated into the terminal, take advantage&lt;/p&gt;&#xA;&lt;h2 id=&#34;it-wasnt-working-for-me-anymore&#34;&gt;It wasn’t working for me anymore &lt;a href=&#34;#it-wasnt-working-for-me-anymore&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;dozens-of-instances&#34;&gt;dozens of instances &lt;a href=&#34;#dozens-of-instances&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As a team lead I bounce betweeen a dozen projects a per day&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://pbs.twimg.com/media/FAEmRjYUcAUk2eR?format=jpg&amp;amp;name=large&#34; class=&#34;hoverlink&#34;&gt;https://pbs.twimg.com/media/FAEmRjYUcAUk2eR?format=jpg&amp;amp;name=large&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;move-with-intent&#34;&gt;Move With Intent &lt;a href=&#34;#move-with-intent&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Running vim inside tmux lets me move swiftly between the exact project I need.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://twitter.com/_WaylonWalker/status/1438849269407047686/photo/1&#34; class=&#34;hoverlink&#34;&gt;https://twitter.com/_WaylonWalker/status/1438849269407047686/photo/1&lt;/a&gt;&lt;a href=&#34;&#34; title=&#34;## images&#34;&gt;//&lt;/a&gt;: &amp;lt;&amp;gt; (__)&lt;/p&gt;&#xA;&lt;h2 id=&#34;hub-and-spoke&#34;&gt;Hub and Spoke &lt;a href=&#34;#hub-and-spoke&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;direct link to specific projects&lt;/li&gt;&#xA;&lt;li&gt;fuzzy into all projects&lt;/li&gt;&#xA;&lt;li&gt;fuzzy into open projects&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;#hub-and-spoke&lt;/p&gt;&#xA;&lt;h2 id=&#34;other-things-that-make-this-possible&#34;&gt;Other Things That Make this Possible &lt;a href=&#34;#other-things-that-make-this-possible&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;tmux&lt;/li&gt;&#xA;&lt;li&gt;direnv&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;vim adjacent things&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;yes-vim-is-ugly-make-it-yours&#34;&gt;yes, vim is ugly, make it yours &lt;a href=&#34;#yes-vim-is-ugly-make-it-yours&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;@rook&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;!&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Q&lt;/span&gt; :&lt;span class=&#34;nx&#34;&gt;q&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;@_waylonwalker&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;nnoremap&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;leader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;6&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;^&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;lsp&#34;&gt;lsp &lt;a href=&#34;#lsp&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;lua&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;vim&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;lsp&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;buf&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;definition&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;treesitter&#34;&gt;treesitter &lt;a href=&#34;#treesitter&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Plug&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;nvim-treesitter/nvim-treesitter-textobjects&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;telescope&#34;&gt;telescope &lt;a href=&#34;#telescope&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;fuzzy matching like a boss&lt;/p&gt;&#xA;&lt;p&gt;fzf is ok too&lt;/p&gt;&#xA;&lt;h2 id=&#34;check-messages&#34;&gt;Check Messages &lt;a href=&#34;#check-messages&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tesseract-ocr tesseract</title>
    <id>https://waylonwalker.com/tesseract-ocr-tesseract/</id>
    <updated>2021-10-28T20:35:39Z</updated>
    <published>2021-10-28T20:35:39Z</published>
    <link href="https://waylonwalker.com/tesseract-ocr-tesseract/" rel="alternate" type="text/html"></link>
    <summary type="text">tesseract by tesseract-ocr is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/tesseract-ocr/tesseract&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tesseract&lt;/a&gt; by &lt;a href=&#34;https://github.com/tesseract-ocr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tesseract-ocr&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;Tesseract Open Source OCR Engine (main repository)&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ kkharji sqlite.lua</title>
    <id>https://waylonwalker.com/kkharji-sqlite-lua/</id>
    <updated>2021-10-20T18:54:59Z</updated>
    <published>2021-10-20T18:54:59Z</published>
    <link href="https://waylonwalker.com/kkharji-sqlite-lua/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on sqlite.lua by kkharji.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/kkharji/sqlite.lua&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sqlite.lua&lt;/a&gt; by &lt;a href=&#34;https://github.com/kkharji&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kkharji&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;SQLite LuaJIT binding with a very simple api.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nvim-telescope telescope-frecency.nvim</title>
    <id>https://waylonwalker.com/nvim-telescope-telescope-frecency-nvim/</id>
    <updated>2021-10-20T18:51:16Z</updated>
    <published>2021-10-20T18:51:16Z</published>
    <link href="https://waylonwalker.com/nvim-telescope-telescope-frecency-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by telescope-frecency.nvim from nvim-telescope.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/nvim-telescope/telescope-frecency.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;telescope-frecency.nvim&lt;/a&gt; from &lt;a href=&#34;https://github.com/nvim-telescope&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-telescope&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A telescope.nvim extension that offers intelligent prioritization when selecting files from your editing history.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ cmgriffing flick-it</title>
    <id>https://waylonwalker.com/cmgriffing-flick-it/</id>
    <updated>2021-10-19T21:22:23Z</updated>
    <published>2021-10-19T21:22:23Z</published>
    <link href="https://waylonwalker.com/cmgriffing-flick-it/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out flick-it by cmgriffing. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/cmgriffing/flick-it&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;flick-it&lt;/a&gt; by &lt;a href=&#34;https://github.com/cmgriffing&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cmgriffing&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;An OBS overlay game similar to the !drop game.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ AndrewRadev diffurcate.vim</title>
    <id>https://waylonwalker.com/andrewradev-diffurcate-vim/</id>
    <updated>2021-10-19T13:59:34Z</updated>
    <published>2021-10-19T13:59:34Z</published>
    <link href="https://waylonwalker.com/andrewradev-diffurcate-vim/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out diffurcate.vim by AndrewRadev. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/AndrewRadev/diffurcate.vim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;diffurcate.vim&lt;/a&gt; by &lt;a href=&#34;https://github.com/AndrewRadev&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;AndrewRadev&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;Split a &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; diff into separate files&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ codelucas newspaper</title>
    <id>https://waylonwalker.com/codelucas-newspaper/</id>
    <updated>2021-10-17T20:14:37Z</updated>
    <published>2021-10-17T20:14:37Z</published>
    <link href="https://waylonwalker.com/codelucas-newspaper/" rel="alternate" type="text/html"></link>
    <summary type="text">codelucas has done a fantastic job with newspaper. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/codelucas&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;codelucas&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/codelucas/newspaper&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;newspaper&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;newspaper3k is a news, full-text, and article metadata extraction in Python 3. Advanced docs:&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ delta-io delta-rs</title>
    <id>https://waylonwalker.com/delta-io-delta-rs/</id>
    <updated>2021-10-15T11:59:36Z</updated>
    <published>2021-10-15T11:59:36Z</published>
    <link href="https://waylonwalker.com/delta-io-delta-rs/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered delta-rs by delta-io, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/delta-io/delta-rs&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;delta-rs&lt;/a&gt; by &lt;a href=&#34;https://github.com/delta-io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;delta-io&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;A native Rust library for Delta Lake, with bindings into Python&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ rinx cmp-skkeleton</title>
    <id>https://waylonwalker.com/rinx-cmp-skkeleton/</id>
    <updated>2021-10-12T14:17:06Z</updated>
    <published>2021-10-12T14:17:06Z</published>
    <link href="https://waylonwalker.com/rinx-cmp-skkeleton/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered cmp-skkeleton by rinx, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/rinx/cmp-skkeleton&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cmp-skkeleton&lt;/a&gt; by &lt;a href=&#34;https://github.com/rinx&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rinx&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;skkeleton source for nvim-cmp&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nedbat coveragepy</title>
    <id>https://waylonwalker.com/nedbat-coveragepy/</id>
    <updated>2021-10-11T21:48:18Z</updated>
    <published>2021-10-11T21:48:18Z</published>
    <link href="https://waylonwalker.com/nedbat-coveragepy/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on coveragepy by nedbat.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/nedbat/coveragepy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;coveragepy&lt;/a&gt; by &lt;a href=&#34;https://github.com/nedbat&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nedbat&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The code coverage tool for Python&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ coveragepy coveragepy</title>
    <id>https://waylonwalker.com/coveragepy-coveragepy/</id>
    <updated>2021-10-11T21:48:18Z</updated>
    <published>2021-10-11T21:48:18Z</published>
    <link href="https://waylonwalker.com/coveragepy-coveragepy/" rel="alternate" type="text/html"></link>
    <summary type="text">I like coveragepy&#39;s project coveragepy.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/coveragepy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;coveragepy’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/coveragepy/coveragepy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;coveragepy&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The code coverage tool for Python&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pytest-dev pytest-cov</title>
    <id>https://waylonwalker.com/pytest-dev-pytest-cov/</id>
    <updated>2021-10-11T21:46:17Z</updated>
    <published>2021-10-11T21:46:17Z</published>
    <link href="https://waylonwalker.com/pytest-dev-pytest-cov/" rel="alternate" type="text/html"></link>
    <summary type="text">I like pytest-dev&#39;s project pytest-cov.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/pytest-dev&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pytest-dev’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/pytest-dev/pytest-cov&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pytest-cov&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Coverage plugin for pytest.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Just Ask Ipython for help</title>
    <id>https://waylonwalker.com/ipython-help/</id>
    <updated>2021-10-10T21:38:26Z</updated>
    <published>2021-10-10T21:38:26Z</published>
    <link href="https://waylonwalker.com/ipython-help/" rel="alternate" type="text/html"></link>
    <summary type="text">We can&#39;t all remember every single function signature out there, it&#39;s just not possible. If you want to stay productive while coding without the temptation...</summary>
    <content type="html">&lt;h2 id=&#34;it-happens-to-the-best-of-us&#34;&gt;It happens to the best of us &lt;a href=&#34;#it-happens-to-the-best-of-us&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;We can’t all remember every single function signature out there, it’s just not&#xA;possible.  If you want to stay productive while coding without the temptation&#xA;to hit YouTube or Twitter.  Use the built in help.  Here are 5 ways to get help&#xA;without leaving your terminal.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/TZrRAP-9UMk&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://youtu.be/TZrRAP-9UMk&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;docstrings&#34;&gt;Docstrings &lt;a href=&#34;#docstrings&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;In any python repl you can access the docstring of a function by calling for &lt;code&gt;help&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rolling&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In Ipython we can even get some syntax highlighting with the &lt;code&gt;?&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rolling&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;?&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;source-code&#34;&gt;Source Code &lt;a href=&#34;#source-code&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Sometimes the docstrings are not good enough, and don’t give us the content we&#xA;need, and we just need to look at the source.  Without leaving your terminal&#xA;there are two ways I often use to get to the source of a function I am trying&#xA;to use.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;inspect&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;inspect&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getsource&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rolling&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The more common way I do it is with the ipython &lt;code&gt;??&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;df.rolling??&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;bonus-richinspect&#34;&gt;Bonus rich.inspect &lt;a href=&#34;#bonus-richinspect&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You thought the syntax highlighting was good with ipython, check out what&#xA;&lt;code&gt;rich.inspect&lt;/code&gt; can do! As far as I know there is no way to get to source code,&#xA;but the results are still fantastic.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install rich&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Install rich&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;rich&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inspect&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;inspect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cars&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rolling&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;help&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;then inspect&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;connect-with-me&#34;&gt;Connect with me &lt;a href=&#34;#connect-with-me&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you liked this one, check out the YouTube Channel, catch me live on twitch,&#xA;or connect on twitter, I’d love to hear from you.&lt;/p&gt;&#xA;&lt;p&gt;twitter:  &lt;a href=&#34;https://twitter.com/_WaylonWalker&#34;&gt;https://twitter.com/_WaylonWalker&lt;/a&gt;&#xA;twitch: &lt;a href=&#34;https://www.twitch.tv/waylonwalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.twitch.tv.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.twitch.tv.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://www.twitch.tv/waylonwalker&lt;/a&gt;&#xA;github: &lt;a href=&#34;https://github.com/waylonwalker/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/waylonwalker/&lt;/a&gt;&#xA;twitch: &lt;a href=&#34;https://www.twitch.tv/waylonwalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.twitch.tv.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.twitch.tv.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://www.twitch.tv/waylonwalker&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Hacktoberfest 2021?</title>
    <id>https://waylonwalker.com/hacktoberfest-2021/</id>
    <updated>2021-10-10T09:43:52Z</updated>
    <published>2021-10-10T09:43:52Z</published>
    <link href="https://waylonwalker.com/hacktoberfest-2021/" rel="alternate" type="text/html"></link>
    <summary type="text">Are you participating in Hacktoberfest 2021?</summary>
    <content type="html">&lt;p&gt;Are you participating in Hacktoberfest 2021?&lt;/p&gt;&#xA;&lt;p&gt;I got my start with open source with Hacktoberfest 2018. I remember being so&#xA;nervous for those first pr’s. I have continued to participate every year, and&#xA;it feels good to give back.&lt;/p&gt;&#xA;&lt;h2 id=&#34;it-made-a-big-change-on-me&#34;&gt;It made a big change on me &lt;a href=&#34;#it-made-a-big-change-on-me&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Something that it really did for me was to lower the hurdle to contribute&#xA;regularly. I am not a huge contributor to open source. I am not necessarily a&#xA;regular maintainer of any large project, but I do often raise issues when I see&#xA;things as a user that would make things easier or more clear.&lt;/p&gt;&#xA;&lt;p&gt;After participating it does not feel like such a big deal to go through the&#xA;motions of making my own fork, making a small change, and submitting it for&#xA;review.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-can-you-do&#34;&gt;What can you do? &lt;a href=&#34;#what-can-you-do&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As a user, you might be in a unique position to see a library from the&#xA;perspective of other users rather than from the eyes of a maintainer. You can&#xA;help bring the user perspective to your favorite library.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://twitter.com/_WaylonWalker/status/1446440878864846909&#34; class=&#34;hoverlink&#34;&gt;https://twitter.com/_WaylonWalker/status/1446440878864846909&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;My favorite error messages are those that I helped tweak just a bit to make it&#xA;clear to the user what is happening and how to fix it. As much as we all hate&#xA;getting errors, It does warm my heart when I see one that I helped make better.&lt;/p&gt;&#xA;&lt;h2 id=&#34;discuss&#34;&gt;Discuss &lt;a href=&#34;#discuss&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Are you participating this year?&lt;/p&gt;&#xA;&lt;p&gt;Show us some of your PR’s, and why they make a difference.&lt;/p&gt;&#xA;&lt;p&gt;Let me know on &lt;a href=&#34;https://twitter.com/_WaylonWalker&#34;&gt;twitter&lt;/a&gt; or in this&#xA;&lt;a href=&#34;https://dev.to/waylonwalker/hacktoberfest-2021-1mkf&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/dev.to.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/dev.to.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dev.to&lt;/a&gt; discussion.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>I made a neovim plugin</title>
    <id>https://waylonwalker.com/telegraph-release/</id>
    <updated>2021-10-05T08:04:44Z</updated>
    <published>2021-10-05T08:04:44Z</published>
    <link href="https://waylonwalker.com/telegraph-release/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve slowly adding more and more lua functions into my neovim configuration, and recently I noticed a pattern for a class of functions that reach out to run...</summary>
    <content type="html">&lt;p&gt;I’ve slowly adding more and more lua functions into my neovim configuration,&#xA;and recently I noticed a pattern for a class of functions that reach out to run&#xA;shell commands that can be abstracted away.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/8m5ipBuopPU&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/8m5ipBuopPU&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;telegraphnvim&#34;&gt;Telegraph.nvim &lt;a href=&#34;#telegraphnvim&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Check out the project &lt;a href=&#34;https://github.com/WaylonWalker/Telegraph.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;readme&lt;/a&gt;&#xA;for the most up to date details on the plugin itself.&lt;/p&gt;&#xA;&lt;h2 id=&#34;motivation&#34;&gt;Motivation &lt;a href=&#34;#motivation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I want a simple way to make remaps into shell commands that can open new tmux&#xA;windows, popups, or just run a command with context from the editor.&lt;/p&gt;&#xA;&lt;p&gt;For example I want to make remaps to do things like open the current file in lookatme.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# &lt;span class=&#34;nx&#34;&gt;vim&lt;/span&gt; :&lt;span class=&#34;nx&#34;&gt;terminal&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;nnoremap&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;leader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Telegraph&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;pipx&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;run&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;lookatme&lt;/span&gt; {&lt;span class=&#34;nx&#34;&gt;filepath&lt;/span&gt;} &lt;span class=&#34;p&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;live&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;reload&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;gruvbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;dark&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# &lt;span class=&#34;nx&#34;&gt;tmux&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;session&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;nnoremap&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;leader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;leader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;lua&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;telegraph&amp;#39;&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;telegraph&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;{&lt;span class=&#34;nx&#34;&gt;cmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;pipx run lookatme {filepath} --live-reload --style gruvbox-dark&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;how&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;tmux&amp;#39;&lt;/span&gt;}&lt;span class=&#34;p&#34;&gt;)&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;CR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# &lt;span class=&#34;nx&#34;&gt;tmux&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;popup&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;nnoremap&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;leader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;leader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;S&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;lua&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;telegraph&amp;#39;&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;telegraph&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;{&lt;span class=&#34;nx&#34;&gt;cmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;pipx run lookatme {filepath} --live-reload --style gruvbox-dark&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;how&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;tmux_popup&amp;#39;&lt;/span&gt;}&lt;span class=&#34;p&#34;&gt;)&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;CR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The main goal here is that remaps become one liners that can just be put&#xA;directly in my &lt;code&gt;init.vim&lt;/code&gt; without creating a whole new lua module for each&#xA;shell command I want to bind.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how&#34;&gt;how &lt;a href=&#34;#how&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;telegraph&lt;/code&gt; takes in a &lt;code&gt;how&lt;/code&gt; argument to determine where to tun the command.j&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;term&lt;/code&gt;(default) runs command in the built in terminal&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;tmux&lt;/code&gt; runs command in a new tmux session and joins it.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;tmux_popup&lt;/code&gt; runs command in a tmux popup window.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;tmux_popup_session&lt;/code&gt; runs command in a tmux session and displays it in a popup&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;subprocess&lt;/code&gt; runs command in a subprocess&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;format-strings&#34;&gt;Format strings &lt;a href=&#34;#format-strings&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The current set of format strings that can be used with telegraph. Placing&#xA;these in braces &lt;code&gt;{}&lt;/code&gt; within your command will get rendered into something with&#xA;context from the editor.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;cword&lt;/code&gt; - the current word under the cursor&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;cWORD&lt;/code&gt; - the current BIG Word under the cursor&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;cline&lt;/code&gt; - the current line under the cursor&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;filepath&lt;/code&gt; - the filepath of the current file&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;filename&lt;/code&gt; - the filename of the current file&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;parent&lt;/code&gt; - the parent directory of the current file&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;current_session_name&lt;/code&gt; - name of the current tmux session&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;cwd&lt;/code&gt; - the current working directory&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;give-it-a-&#34;&gt;Give it a ⭐ &lt;a href=&#34;#give-it-a-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Check out the &lt;a href=&#34;https://github.com/WaylonWalker/Telegraph.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;repo&lt;/a&gt; and give&#xA;it a star if its something that interests you.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ThePrimeagen ansible</title>
    <id>https://waylonwalker.com/theprimeagen-ansible/</id>
    <updated>2021-10-01T13:35:28Z</updated>
    <published>2021-10-01T13:35:28Z</published>
    <link href="https://waylonwalker.com/theprimeagen-ansible/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on ansible by ThePrimeagen.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/ThePrimeagen/ansible&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ansible&lt;/a&gt; by &lt;a href=&#34;https://github.com/ThePrimeagen&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ThePrimeagen&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Setting Parameters in kedro</title>
    <id>https://waylonwalker.com/kedro-parameters/</id>
    <updated>2021-09-19T00:00:00Z</updated>
    <published>2021-09-19T00:00:00Z</published>
    <link href="https://waylonwalker.com/kedro-parameters/" rel="alternate" type="text/html"></link>
    <summary type="text">Parameters are a place for you to store variables for your pipeline that can be accessed by any node that needs it, and can be easily changed by changing...</summary>
    <content type="html">&lt;p&gt;Parameters are a place for you to store variables for your pipeline that can be&#xA;accessed by any node that needs it, and can be easily changed by changing your&#xA;environment.  Parameters are stored in the repository in yaml files.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/Jj5cQ5bqcjg&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/Jj5cQ5bqcjg&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/what-is-kedro/&#34; class=&#34;wikilink&#34; data-title=&#34;What is Kedro&#34; data-description=&#34;Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...&#34; data-date=&#34;2021-08-17&#34; data-preview=&#34;Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...&#34;&gt;What is Kedro&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;👆 Unsure what kedro is?  Check out this post.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;parameters-files&#34;&gt;parameters files &lt;a href=&#34;#parameters-files&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can have multiple parameters files and choose which ones to load by setting&#xA;your environment.  By default kedro will give you a &lt;code&gt;base&lt;/code&gt; and &lt;code&gt;local&lt;/code&gt;&#xA;parameters file.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;conf/base/parameters.yml&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;conf/local/parameters.yml&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;base&#34;&gt;base &lt;a href=&#34;#base&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The base environment should contain all of the default values you want to run.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# /conf/base/parameters.yml&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;test_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0.2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;random_state&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;features&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;engines&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;passenger_capacity&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;crew&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;d_check_complete&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;moon_clearance_complete&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;iata_approved&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;company_rating&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;review_scores_rating&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt; base will always be loaded first.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;accessing-parameters&#34;&gt;accessing parameters &lt;a href=&#34;#accessing-parameters&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Parameters can be accessed through context or through the catalog.  Generally&#xA;when you are working with nodes it will be loaded through the catalog.&lt;/p&gt;&#xA;&lt;p&gt;Loding with the context.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;context&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;session&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load_context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;params&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Loading with the catalog.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;parameters&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Loading a specific key with the catalog.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;params:test_size&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;using-parameters-in-nodes&#34;&gt;using parameters in nodes &lt;a href=&#34;#using-parameters-in-nodes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is an example from the complete spaceflights demo.  The entire parameters&#xA;dict is passed in, then the &lt;code&gt;features&lt;/code&gt; key is accessed.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;split_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataFrame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;parameters&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Tuple&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Splits data into features and targets training and test sets.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    Args:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        data: Data containing features and target.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        parameters: Parameters defined in parameters.yml.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    Returns:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        Split data.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;X&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parameters&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;features&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;price&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;X_train&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;X_test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y_train&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y_test&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;train_test_split&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;X&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;test_size&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parameters&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;test_size&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;random_state&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parameters&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;random_state&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;X_train&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;X_test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y_train&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y_test&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/kedro-node/&#34; class=&#34;wikilink&#34; data-title=&#34;Comprehensive guide to creating kedro nodes&#34; data-description=&#34;The Kedro node is an essential part of the pipeline. It defines what catalog entries get passed in, what function gets ran, and the catalog entry to save the...&#34; data-date=&#34;2021-06-03&#34; data-preview=&#34;The Kedro node is an essential part of the pipeline. It defines what catalog entries get passed in, what function gets ran, and the catalog entry to save the...&#34;&gt;Comprehensive guide to creating kedro nodes&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;👆 Check out this complete guide to creating kedro nodes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;local&#34;&gt;local &lt;a href=&#34;#local&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The local parameters by default are in &lt;code&gt;conf/local/parameters.yml&lt;/code&gt;.  They will&#xA;override the base parameters in a shallow fashion.  If a top level key exists&#xA;in local, it will override that entire key in your parameters.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# /conf/local/parameters.yml&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;features&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;company_rating&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;review_scores_rating&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt; If you have not explicitly set your environment, local will be the&#xA;default environment selected to override base.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;env&#34;&gt;env &lt;a href=&#34;#env&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can also have other environments that override the base environment.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# /conf/new/parameters.yml&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt; if you use an env local will not be applied&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;activating-this-environment&#34;&gt;Activating this environment &lt;a href=&#34;#activating-this-environment&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Following the &lt;a href=&#34;https://kedro.readthedocs.io/en/latest/04_kedro_project_setup/02_configuration.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;configuration docs&lt;/a&gt;&#xA;we can activate the environment by setting an environment variable in our shell&#xA;or passing in –env to our kedro cli command.&lt;/p&gt;&#xA;&lt;p&gt;Setting an environment variable.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;KEDRO_ENV&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Passing in the env to a kedro cli command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro run --env&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Setting the Environment Variable in python.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;os&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;environ&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;KEDRO_ENV&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;new&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;links&#34;&gt;Links &lt;a href=&#34;#links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/kedro/&#34;&gt;all of my kedro articles&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/what-is-kedro/&#34;&gt;what is kedro&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/kedro-node/&#34;&gt;comprehensive guide to creating kedro nodes&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=bw5_FWDVRpU&amp;amp;list=PLTRNG6WIHETCoPt5gAKYSH_HCZvE_r41n&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro playlist on YouTube&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://kedro.readthedocs.io/en/latest/04_kedro_project_setup/02_configuration.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;configuration docs&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Writing your first kedro Nodes</title>
    <id>https://waylonwalker.com/kedro-your-first-nodes/</id>
    <updated>2021-09-13T22:40:45Z</updated>
    <published>2021-09-13T22:40:45Z</published>
    <link href="https://waylonwalker.com/kedro-your-first-nodes/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/-gEwU-MrPuA</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/-gEwU-MrPuA&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://youtu.be/-gEwU-MrPuA&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Before we jump in with anything crazy, let’s make some nodes with some vanilla&#xA;data structures.&lt;/p&gt;&#xA;&lt;h2 id=&#34;import-node&#34;&gt;import node &lt;a href=&#34;#import-node&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You will need to import node from kedro.pipeline to start creating nodes.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.pipeline&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;func&#34;&gt;func &lt;a href=&#34;#func&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The &lt;code&gt;func&lt;/code&gt; is a callable that will take the &lt;code&gt;inputs&lt;/code&gt; and create the &lt;code&gt;outputs&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;inputs--outputs&#34;&gt;inputs / outputs &lt;a href=&#34;#inputs--outputs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Inputs and outputs can be None, a single catalog entry as a string, mutiple&#xA;catalog entries as a List of strings, or a dictionary of strings where the key&#xA;is the keyword argument of the func and the value is the catalog entry to use&#xA;for that keyword.&lt;/p&gt;&#xA;&lt;h2 id=&#34;our-first-node&#34;&gt;our first node &lt;a href=&#34;#our-first-node&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Sometimes in our pipelines our data is coming from an api where we already have&#xA;python functions built to pull with.  Thats ok, kedro supposrts that with&#xA;&lt;code&gt;inputs=None&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;create_range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;make_range&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create_range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;outputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;range&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;second-node&#34;&gt;second node &lt;a href=&#34;#second-node&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now we have some data to work from, lets use that as our input.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;square_range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;square_range&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;square_range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;range&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;outputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;range_squared&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;multiple-inputs&#34;&gt;Multiple Inputs &lt;a href=&#34;#multiple-inputs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Kedro can take lists or dicts as either input or output when your function&#xA;needs more than one input or output.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;concat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;range_two&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;range_two&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;concat_ranges&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;concat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;range&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;range_squared&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;outputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;concat&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;## inputs could also be defined as a dict&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;concat_ranges&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;concat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;range&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;range&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;range_two&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;range_squared&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;outputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;concat&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;links&#34;&gt;Links &lt;a href=&#34;#links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/kedro/&#34;&gt;all of my kedro articles&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=bw5_FWDVRpU&amp;amp;list=PLTRNG6WIHETCoPt5gAKYSH_HCZvE_r41n&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro playlist on YouTube&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://kedro.readthedocs.io/en/stable/kedro.pipeline.node.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;node docs&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://gist.github.com/WaylonWalker/347b32c6ae7b799d1e0853c3811a98de&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/gist.github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/gist.github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;first_nodes.py&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ WaylonWalker Telegraph.nvim</title>
    <id>https://waylonwalker.com/waylonwalker-telegraph-nvim/</id>
    <updated>2021-09-13T02:30:43Z</updated>
    <published>2021-09-13T02:30:43Z</published>
    <link href="https://waylonwalker.com/waylonwalker-telegraph-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by Telegraph.nvim from WaylonWalker.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/WaylonWalker/Telegraph.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Telegraph.nvim&lt;/a&gt; from &lt;a href=&#34;https://github.com/WaylonWalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;WaylonWalker&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Send commands system commands in an elegant way&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ jacobsimpson nvim-example-lua-plugin</title>
    <id>https://waylonwalker.com/jacobsimpson-nvim-example-lua-plugin/</id>
    <updated>2021-09-09T14:39:14Z</updated>
    <published>2021-09-09T14:39:14Z</published>
    <link href="https://waylonwalker.com/jacobsimpson-nvim-example-lua-plugin/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across nvim-example-lua-plugin from jacobsimpson, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/jacobsimpson/nvim-example-lua-plugin&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-example-lua-plugin&lt;/a&gt; from &lt;a href=&#34;https://github.com/jacobsimpson&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jacobsimpson&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;A simple Neovim Lua plugin using the Lua embedded in Neovim, suitable as a template.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ aeturrell skimpy</title>
    <id>https://waylonwalker.com/aeturrell-skimpy/</id>
    <updated>2021-09-05T19:52:38Z</updated>
    <published>2021-09-05T19:52:38Z</published>
    <link href="https://waylonwalker.com/aeturrell-skimpy/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by skimpy from aeturrell.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/aeturrell/skimpy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;skimpy&lt;/a&gt; from &lt;a href=&#34;https://github.com/aeturrell&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;aeturrell&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;skimpy is a light weight tool that provides summary statistics about variables in data frames within the console.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ mobilemancer windows-terminal-aurelia</title>
    <id>https://waylonwalker.com/mobilemancer-windows-terminal-aurelia/</id>
    <updated>2021-09-03T21:28:35Z</updated>
    <published>2021-09-03T21:28:35Z</published>
    <link href="https://waylonwalker.com/mobilemancer-windows-terminal-aurelia/" rel="alternate" type="text/html"></link>
    <summary type="text">I like mobilemancer&#39;s project windows-terminal-aurelia.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/mobilemancer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mobilemancer’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/mobilemancer/windows-terminal-aurelia&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;windows-terminal-aurelia&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Aurelia inspired Windows Terminal theme&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ dstein64 vim-startuptime</title>
    <id>https://waylonwalker.com/dstein64-vim-startuptime/</id>
    <updated>2021-09-03T03:08:37Z</updated>
    <published>2021-09-03T03:08:37Z</published>
    <link href="https://waylonwalker.com/dstein64-vim-startuptime/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about vim-startuptime, an amazing project by dstein64. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/dstein64/vim-startuptime&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vim-startuptime&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/dstein64&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dstein64&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;A plugin for viewing Vim and Neovim startup event timing information.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ wbthomason packer.nvim</title>
    <id>https://waylonwalker.com/wbthomason-packer-nvim/</id>
    <updated>2021-08-30T13:39:39Z</updated>
    <published>2021-08-30T13:39:39Z</published>
    <link href="https://waylonwalker.com/wbthomason-packer-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">I like wbthomason&#39;s project packer.nvim.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/wbthomason&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;wbthomason’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/wbthomason/packer.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;packer.nvim&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A use-package inspired plugin manager for Neovim. Uses native packages, supports Luarocks dependencies, written in Lua, allows for expressive config&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ neovim nvim-lspconfig</title>
    <id>https://waylonwalker.com/neovim-nvim-lspconfig/</id>
    <updated>2021-08-30T13:23:18Z</updated>
    <published>2021-08-30T13:23:18Z</published>
    <link href="https://waylonwalker.com/neovim-nvim-lspconfig/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred nvim-lspconfig by neovim. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/neovim/nvim-lspconfig&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-lspconfig&lt;/a&gt; by &lt;a href=&#34;https://github.com/neovim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;neovim&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;Quickstart configs for Nvim LSP&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nvim-treesitter nvim-treesitter</title>
    <id>https://waylonwalker.com/nvim-treesitter-nvim-treesitter/</id>
    <updated>2021-08-30T13:23:17Z</updated>
    <published>2021-08-30T13:23:17Z</published>
    <link href="https://waylonwalker.com/nvim-treesitter-nvim-treesitter/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on nvim-treesitter, created by nvim-treesitter.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/nvim-treesitter/nvim-treesitter&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-treesitter&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/nvim-treesitter&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-treesitter&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Nvim Treesitter configurations and abstraction layer&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ andymass vim-matchup</title>
    <id>https://waylonwalker.com/andymass-vim-matchup/</id>
    <updated>2021-08-30T13:23:11Z</updated>
    <published>2021-08-30T13:23:11Z</published>
    <link href="https://waylonwalker.com/andymass-vim-matchup/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? vim-matchup by andymass.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/andymass/vim-matchup&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vim-matchup&lt;/a&gt; by &lt;a href=&#34;https://github.com/andymass&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;andymass&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;vim match-up: even better % 👊 navigate and highlight matching words 👊 modern matchit and matchparen.  Supports both vim and neovim + tree-sitter.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ David-Kunz treesitter-unit</title>
    <id>https://waylonwalker.com/david-kunz-treesitter-unit/</id>
    <updated>2021-08-28T21:38:34Z</updated>
    <published>2021-08-28T21:38:34Z</published>
    <link href="https://waylonwalker.com/david-kunz-treesitter-unit/" rel="alternate" type="text/html"></link>
    <summary type="text">treesitter-unit by David-Kunz is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/David-Kunz/treesitter-unit&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;treesitter-unit&lt;/a&gt; by &lt;a href=&#34;https://github.com/David-Kunz&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;David-Kunz&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;A Neovim plugin to deal with treesitter units&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Running your Kedro Pipeline from the command line</title>
    <id>https://waylonwalker.com/kedro-run/</id>
    <updated>2021-08-24T22:40:45Z</updated>
    <published>2021-08-24T22:40:45Z</published>
    <link href="https://waylonwalker.com/kedro-run/" rel="alternate" type="text/html"></link>
    <summary type="text">Running your kedro pipeline from the command line could not be any easier to get started. This is a concept that you may or may not do often depending on...</summary>
    <content type="html">&lt;p&gt;Running your kedro pipeline from the command line could not be any easier to&#xA;get started.  This is a concept that you may or may not do often depending on&#xA;your workflow, but its good to have under your belt.  I personally do this half&#xA;the time and run from ipython half the time.  In production, I mostly use docker&#xA;and that is all done with this cli.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/ZmccpLy-OEI&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/ZmccpLy-OEI&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/what-is-kedro/&#34; class=&#34;wikilink&#34; data-title=&#34;What is Kedro&#34; data-description=&#34;Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...&#34; data-date=&#34;2021-08-17&#34; data-preview=&#34;Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...&#34;&gt;What is Kedro&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;👆 Unsure what kedro is?  Check out this post.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;kedro-run&#34;&gt;Kedro run &lt;a href=&#34;#kedro-run&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;To run the whole darn project all we need to do is fire up a terminal, activate&#xA;our environment, and tell kedro to run.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro run&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;specific-pipelines&#34;&gt;Specific Pipelines &lt;a href=&#34;#specific-pipelines&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Running a sub pipeline that we have created is as easy as telling kedro which&#xA;one we want to run.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro run --pipeline dp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;single-nodes&#34;&gt;Single Nodes &lt;a href=&#34;#single-nodes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;While developing a node or a small list of nodes in a larger pipeline its handy&#xA;to be able to run them one at a time.  Besides the use case of developing a&#xA;single node I would not reccomend leaning very heavy on running single nodes,&#xA;let the DAG do the work of figuring out which nodes to run for you.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro run --pipeline dp --node create_model_input_table_node&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro run --pipeline dp -n create_model_input_table_node&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;some-dag-concepts&#34;&gt;Some DAG concepts &lt;a href=&#34;#some-dag-concepts&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;We will cover more of the benefits that we get from the graph nature of the DAG&#xA;in the future, but here is a quick peek at some things we can do.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro run --pipeline dp --to-outputs preprocessed_shuttles&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro run --pipeline dp --from-inputs preprocessed_shuttles&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro run --pipeline dp --to-nodes create_model_input_table_node&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;multiple-things&#34;&gt;Multiple things &lt;a href=&#34;#multiple-things&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can stack up multiple kedro dag concepts into a single run command.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;kedro run --pipeline dp --to-nodes create_model_input_table_node --to-nodes preprocess_shuttles_node&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;related-links&#34;&gt;Related Links &lt;a href=&#34;#related-links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/what-is-kedro/&#34;&gt;what is kedro&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/kedro-environment/&#34;&gt;setting up a kedro environment&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/kedro-new/&#34;&gt;creating a new kedro project&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://kedro.readthedocs.io/en/latest/06_nodes_and_pipelines/04_run_a_pipeline.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro run docs&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>kedro Virtual Environment</title>
    <id>https://waylonwalker.com/kedro-environment/</id>
    <updated>2021-08-23T20:40:45Z</updated>
    <published>2021-08-23T20:40:45Z</published>
    <link href="https://waylonwalker.com/kedro-environment/" rel="alternate" type="text/html"></link>
    <summary type="text">Avoid serious version conflict issues, and use a virtual environment anytime you are running python, here are three ways you can setup a kedro virtual...</summary>
    <content type="html">&lt;p&gt;Avoid serious version conflict issues, and use a &lt;a href=&#34;/virtual-environment/&#34; class=&#34;glossary-term&#34; title=&#34;Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...&#34;&gt;virtual environment&lt;/a&gt; anytime&#xA;you are running python, here are three ways you can setup a kedro virtual&#xA;environment.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/ZSxc5VVCBhM&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/ZSxc5VVCBhM&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;conda&lt;/li&gt;&#xA;&lt;li&gt;venv&lt;/li&gt;&#xA;&lt;li&gt;pipenv&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;conda&#34;&gt;conda &lt;a href=&#34;#conda&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I prefer to use conda as my virtual environment manager of choice as it give me&#xA;both the interpreter and the packages I install. I don’t have to rely on the&#xA;system version of python or another tool to maintain python versions at all, I&#xA;get everything in one tool.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;conda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;create&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;my&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;project&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;3.8&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;conda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;activate&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;my&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;project&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;python&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pip&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;install&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;upgrade&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pip&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;pip&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;install&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;src&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;conda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;info&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;envs&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;stores environment in a root directory i.e. &lt;code&gt;~/miniconda3&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;conda can use its own way to manage environments &lt;code&gt;environment.yml&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;the python interpreter is packaged with the environment&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;virtualenv&#34;&gt;virtualenv &lt;a href=&#34;#virtualenv&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Virtual env (venv) is another very respectable option that is built right into&#xA;python, and requires no additional installs or using a different distribution&#xA;of pytyhon.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;python -m venv .venv&#xA;source ./.venv/bin/activate&#xA;python  -m pip install --upgrade pip&#xA;pip install -e src&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;environments are typically stored in the project directory&lt;/li&gt;&#xA;&lt;li&gt;does not package the interpreter&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;pipenv&#34;&gt;pipenv &lt;a href=&#34;#pipenv&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Pipenv is another virtual enviroment tool that comes with its own system for&#xA;managing dependencies using a &lt;code&gt;pipfile&lt;/code&gt;. It’s main benefit is that it creates&#xA;a lockfile that will allow users to replicate the exact version of all their&#xA;packages. The typical &lt;code&gt;requirements.txt&lt;/code&gt; workflow can easily break as new&#xA;version of dependecies are released between testing and deplpoyment.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;pipx run pipenv shell&#xA;python  -m pip install --upgrade pip&#xA;pip install -e src&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;stores environment in a root directory i.e. &lt;code&gt;~/.local/share/virtualenvs/&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;pipenv can use its own way to manage environments &lt;code&gt;pipfile&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;does not package the interpreter&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ projekt0n circles.nvim</title>
    <id>https://waylonwalker.com/projekt0n-circles-nvim/</id>
    <updated>2021-08-22T14:08:18Z</updated>
    <published>2021-08-22T14:08:18Z</published>
    <link href="https://waylonwalker.com/projekt0n-circles-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by circles.nvim from projekt0n.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/projekt0n/circles.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;circles.nvim&lt;/a&gt; from &lt;a href=&#34;https://github.com/projekt0n&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;projekt0n&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;uniform icons for neovim&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Kedro Install</title>
    <id>https://waylonwalker.com/kedro-install/</id>
    <updated>2021-08-21T20:40:45Z</updated>
    <published>2021-08-21T20:40:45Z</published>
    <link href="https://waylonwalker.com/kedro-install/" rel="alternate" type="text/html"></link>
    <summary type="text">Kedro comes with an command to install and manage all of your projects dependencies.</summary>
    <content type="html">&lt;p&gt;Kedro comes with an &lt;code&gt;install&lt;/code&gt; command to install and manage all of your&#xA;projects dependencies.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/IWimEs-hHQg&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://youtu.be/IWimEs-hHQg&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;cd-into-your-project-directory-and-activate-env&#34;&gt;cd into your project directory and activate env &lt;a href=&#34;#cd-into-your-project-directory-and-activate-env&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You must start by having your kedro project either cloned down&#xA;from an existing project or created from kedro new.  Then&#xA;activate your environment.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/kedro-new/&#34; class=&#34;wikilink&#34; data-title=&#34;Kedro New&#34; data-description=&#34;https://youtu.be/uqiv5LAiJe0&#34; data-date=&#34;2021-08-18&#34; data-preview=&#34;https://youtu.be/uqiv5LAiJe0&#34;&gt;Kedro New&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;this post covers kedro new&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/kedro-environment/&#34; class=&#34;wikilink&#34; data-title=&#34;kedro Virtual Environment&#34; data-description=&#34;Avoid serious version conflict issues, and use a virtual environment anytime you are running python, here are three ways you can setup a kedro virtual...&#34; data-date=&#34;2021-08-23&#34; data-preview=&#34;Avoid serious version conflict issues, and use a virtual environment anytime you are running python, here are three ways you can setup a kedro virtual...&#34;&gt;kedro Virtual Environment&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This post covers creating your &lt;a href=&#34;/virtual-environment/&#34; class=&#34;glossary-term&#34; title=&#34;Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...&#34;&gt;virtual environment&lt;/a&gt; for kedro&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;install-kedro&#34;&gt;install kedro &lt;a href=&#34;#install-kedro&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Make sure you have kedro installed in your current&#xA;environment, if you dont already have it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install &lt;span class=&#34;nv&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;0.17.4&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;pip-tools&#34;&gt;pip-tools &lt;a href=&#34;#pip-tools&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Kedro uses the &lt;code&gt;pip-tools&lt;/code&gt; package under the hood to pin&#xA;dependencies in a very robust way to ensure that the project&#xA;will continue to work on everyone’s machine day, including&#xA;production, day in and day out.  No matter what happens to the&#xA;dependencies you have installed.&lt;/p&gt;&#xA;&lt;h3 id=&#34;pip-compile&#34;&gt;pip-compile &lt;a href=&#34;#pip-compile&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;The command that kedro uses from &lt;code&gt;pip-tools&lt;/code&gt; is &lt;code&gt;pip-compile&lt;/code&gt;.  It will look at&#xA;what you have in a &lt;code&gt;requirements.in&lt;/code&gt; file, compile the dependencies down to&#xA;exact versions, and create a requirements.txt that is fully pinned down, and&#xA;updatable by re-running &lt;code&gt;pip-compile&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;requirementsin&#34;&gt;requirements.in &lt;a href=&#34;#requirementsin&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If kedro does not see a &lt;code&gt;requirements.in&lt;/code&gt; file it will automatically move your&#xA;&lt;code&gt;requirements.txt&lt;/code&gt; to &lt;code&gt;requirements.in&lt;/code&gt; and run &lt;code&gt;pip-compile&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;No requirements.in found. Copying contents from requirements.txt...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;kedro-install&#34;&gt;kedro install &lt;a href=&#34;#kedro-install&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Lets go ahead and run kedro install on one of the projects we already create&#xA;and environment for in a previous post, &lt;code&gt;kedro-conda&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The first time you run this on a new repo it is likely that you will run into&#xA;this warning about creating a new &lt;code&gt;requirements.in&lt;/code&gt; file.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;No requirements.in found. Copying contents from requirements.txt...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;kedro-install-flags&#34;&gt;kedro install flags &lt;a href=&#34;#kedro-install-flags&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Kedro does let you avoid pip-compile all together, by using the&#xA;&lt;code&gt;--no-build-reqs&lt;/code&gt; flag.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro install --no-build-reqs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;It also lets you upgrade all of your dependencies with build-reqs.  I would&#xA;reccomend doing this on its own branch, and own pull request.  If you are&#xA;working on a team you want everyone to be on the same page when it comes to&#xA;dependencies.  If you are not, you surely do not want something to break with a&#xA;new set of dependencies without a way of rolling back.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro install --build-reqs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Kedro Git Init</title>
    <id>https://waylonwalker.com/kedro-git-init/</id>
    <updated>2021-08-20T22:40:45Z</updated>
    <published>2021-08-20T22:40:45Z</published>
    <link href="https://waylonwalker.com/kedro-git-init/" rel="alternate" type="text/html"></link>
    <summary type="text">Immediately after , before you start running or your first line of code the first thing you should always do after getting a new kedro template created is to .</summary>
    <content type="html">&lt;p&gt;Immediately after &lt;code&gt;kedro new&lt;/code&gt;, before you start running &lt;code&gt;kedro install&lt;/code&gt; or your first line of code the first&#xA;thing you should always do after getting a new kedro template created is to&#xA;&lt;code&gt;git init&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/IGba3ytf_6U&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://youtu.be/IGba3ytf_6U&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;&lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt;-init&#34;&gt;git init &lt;a href=&#34;#git-init&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Its as simple as these three commands to get started.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git init&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -m init&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I don’t care if this project is for learning, if it will never have a remote or not, use git.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Kedro New</title>
    <id>https://waylonwalker.com/kedro-new/</id>
    <updated>2021-08-18T20:40:45Z</updated>
    <published>2021-08-18T20:40:45Z</published>
    <link href="https://waylonwalker.com/kedro-new/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/uqiv5LAiJe0</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/uqiv5LAiJe0&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/uqiv5LAiJe0&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Kedro new is simply a wrapper around the cookiecutter templating library.  The&#xA;kedro team maintains a ready made template that has everything you need for a&#xA;kedro project.  They also maintain a few kedro starters, which are very similar&#xA;to the base template.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/what-is-kedro/&#34; class=&#34;wikilink&#34; data-title=&#34;What is Kedro&#34; data-description=&#34;Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...&#34; data-date=&#34;2021-08-17&#34; data-preview=&#34;Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...&#34;&gt;What is Kedro&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Unsure what kedro is, Check out yesterdays post on What is Kedro.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;pipx&#34;&gt;pipx &lt;a href=&#34;#pipx&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I reccomend using &lt;code&gt;pipx&lt;/code&gt; when running kedro new.  &lt;code&gt;pipx&lt;/code&gt; is designed for system&#xA;level cli tools so that you do not need to maintain a &lt;a href=&#34;/virtual-environment/&#34; class=&#34;glossary-term&#34; title=&#34;Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...&#34;&gt;virtual environment&lt;/a&gt; or&#xA;worry about version conflicts, &lt;code&gt;pipx&lt;/code&gt; manages the environment for you.&lt;/p&gt;&#xA;&lt;p&gt;The kedro team does not reccomend &lt;code&gt;pipx&lt;/code&gt; in their docs as they already feel&#xA;like there is a bit of a tool overload for folks that may be less familiar with&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;pipx&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;new&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I like using &lt;code&gt;pipx&lt;/code&gt; as it gives you better control over using a specific&#xA;version or always the latest version, unlike when you run what you have on your&#xA;system depends on when you last installed or upgraded.&lt;/p&gt;&#xA;&lt;h2 id=&#34;kedro-new&#34;&gt;Kedro New &lt;a href=&#34;#kedro-new&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The kedro team also has a set of starters, by passing in &lt;code&gt;--starter&lt;/code&gt; you can&#xA;start with a different template.  Here is an example with the kedro&#xA;spaceflights starter.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx run kedro new --starter &lt;span class=&#34;nv&#34;&gt;spaceflights&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;=============&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Please enter a human readable name &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; your new project.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Spaces and punctuation are allowed.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;New Kedro Project&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;: Spaceflights Complete&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Repository Name:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;================&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Please enter a directory name &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; your new project repository.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Alphanumeric characters, hyphens and underscores are allowed.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Lowercase is recommended.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;spaceflights-complete&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Python Package Name:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;====================&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Please enter a valid Python package name &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; your project package.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Alphanumeric characters and underscores are allowed.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Lowercase is recommended. Package name must start with a letter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;or underscore.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;spaceflights_complete&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Change directory to the project generated in /home/u_walkews/git/spaceflights-complete&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;A best-practice setup includes initialising git and creating a virtual environment before running &lt;span class=&#34;sb&#34;&gt;``&lt;/span&gt;kedro install&lt;span class=&#34;sb&#34;&gt;``&lt;/span&gt; to install project-specific dependencies. Refer to the Kedro documentation: https://kedro.readthedocs.io/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;other-versions-of-kedro-with-pipx&#34;&gt;Other versions of kedro with pipx &lt;a href=&#34;#other-versions-of-kedro-with-pipx&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;pipx&lt;/code&gt; not only ensures that you run  the latest version, it can also run a&#xA;very specific version.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx run --spec &lt;span class=&#34;nv&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;0.16.6 kedro new&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/kedro-environment/&#34; class=&#34;wikilink&#34; data-title=&#34;kedro Virtual Environment&#34; data-description=&#34;Avoid serious version conflict issues, and use a virtual environment anytime you are running python, here are three ways you can setup a kedro virtual...&#34; data-date=&#34;2021-08-23&#34; data-preview=&#34;Avoid serious version conflict issues, and use a virtual environment anytime you are running python, here are three ways you can setup a kedro virtual...&#34;&gt;kedro Virtual Environment&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The next post in this series will help you create your virtual environment for your new kedro project.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ AckslD nvim-neoclip.lua</title>
    <id>https://waylonwalker.com/acksld-nvim-neoclip-lua/</id>
    <updated>2021-08-18T00:14:52Z</updated>
    <published>2021-08-18T00:14:52Z</published>
    <link href="https://waylonwalker.com/acksld-nvim-neoclip-lua/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out AckslD and their project nvim-neoclip.lua.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/AckslD&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;AckslD&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/AckslD/nvim-neoclip.lua&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-neoclip.lua&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Clipboard manager neovim plugin with telescope integration&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>What is Kedro</title>
    <id>https://waylonwalker.com/what-is-kedro/</id>
    <updated>2021-08-17T12:48:00Z</updated>
    <published>2021-08-17T12:48:00Z</published>
    <link href="https://waylonwalker.com/what-is-kedro/" rel="alternate" type="text/html"></link>
    <summary type="text">Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...</summary>
    <content type="html">&lt;p&gt;Kedro is an unopinionated Data Engineering framework that comes with a somewhat&#xA;opinionated template. It gives the user a way to build pipelines that&#xA;automatically take care of io through the use of abstract &lt;code&gt;DataSets&lt;/code&gt; that the&#xA;user specifies through &lt;code&gt;Catalog&lt;/code&gt; entries.  These &lt;code&gt;Catalog&lt;/code&gt; entries are loaded,&#xA;ran through a function, and saved by &lt;code&gt;Nodes&lt;/code&gt;.  The order that these &lt;code&gt;Nodes&lt;/code&gt; are&#xA;executed are determined by the &lt;code&gt;Pipeline&lt;/code&gt;, which is a  &lt;strong&gt;DAG&lt;/strong&gt;.  It’s the&#xA;&lt;code&gt;runner&lt;/code&gt;’s job to manage the execution of the &lt;code&gt;Nodes&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/Wf4rnFsaFFU&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/Wf4rnFsaFFU&lt;/a&gt;&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/what-is-kedro-1/&#34; class=&#34;wikilink&#34; data-title=&#34;What is Kedro&#34; data-description=&#34;what-is-kedro&#34; data-date=&#34;2020-02-24&#34; data-preview=&#34;what-is-kedro&#34;&gt;What is Kedro&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This is an updated version of my original what-is-kedro article&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;hot-take&#34;&gt;Hot Take &lt;a href=&#34;#hot-take&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you are doing a series of operations to data with python, especially if you&#xA;are using something as supported as pandas, you should be using a framework&#xA;that gives you a pipeline as a DAG and abstracts io.&lt;/p&gt;&#xA;&lt;h2 id=&#34;orchestrators&#34;&gt;Orchestrators &lt;a href=&#34;#orchestrators&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Like I said, &lt;code&gt;kedro&lt;/code&gt; is unopinionated it does determine where or how your data&#xA;should be ran.  The kedro team does support the following &lt;strong&gt;Orchestrators&lt;/strong&gt;&#xA;with very little add on to the base template.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://kedro.readthedocs.io/en/stable/10_deployment/04_argo.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Argo Workflows&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://kedro.readthedocs.io/en/stable/10_deployment/05_prefect.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Prefect&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://kedro.readthedocs.io/en/stable/10_deployment/06_kubeflow.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Kubeflow Workflows&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://kedro.readthedocs.io/en/stable/10_deployment/07_aws_batch.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;AWS Batch&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://kedro.readthedocs.io/en/stable/10_deployment/08_databricks.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Databricks&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;datasets&#34;&gt;DataSets &lt;a href=&#34;#datasets&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Did I say kedro is unopionated?  Datasets are what allow kedro too be so&#xA;flexible accross a number of different python objects.  Any python object can&#xA;be made into a kedro dataset.  Kedro comes out of the box with &lt;strong&gt;many&lt;/strong&gt; purpose built&#xA;&lt;code&gt;DataSets&lt;/code&gt; like storing pandas DataFrames to parquet, csv, or a sql table.  If&#xA;kedro does not come with support for the type of python objects you work with&#xA;don’t worry, you can for the closest option they support and build your own.&#xA;Or if you do not want to build your own, you can use a &lt;code&gt;PickleDataSet&lt;/code&gt; for&#xA;anything.&lt;/p&gt;&#xA;&lt;h2 id=&#34;catalog&#34;&gt;Catalog &lt;a href=&#34;#catalog&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You will not often be creating your own datasets, most of what you need whould&#xA;already be taken care of by the kedro framework.  What you will need to do is&#xA;to use the existing &lt;code&gt;DataSets&lt;/code&gt; to build your data catalog.&lt;/p&gt;&#xA;&lt;p&gt;Kedro takes care of all fo the file io for you, you simply need to use the&#xA;catalog to tell kedro what type of DataSet to use and any extra information&#xA;that &lt;code&gt;DataSet&lt;/code&gt; needs.  Much of the time this is simply a filepath.&lt;/p&gt;&#xA;&lt;p&gt;Typically the catalog is specified in yaml format.  If you are not familiar&#xA;with yaml, I suggest&#xA;&lt;a href=&#34;https://learnxinyminutes.com/docs/yaml/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/learnxinyminutes.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/learnxinyminutes.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;learnxinyminutes.com/docs/yaml/&lt;/a&gt; as a&#xA;resource of examples.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;s3://your_bucket/test.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Here is the most basic yaml catalog entry taken from the kedro&#xA;&lt;a href=&#34;https://kedro.readthedocs.io/en/stable/05_data/01_data_catalog.html?highlight=catalog&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;docs&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;cars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/01_raw/company/cars.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;sep&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;load_args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;save_args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;date_format&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%Y-%m-%d %H:%M&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;decimal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Here is a bit more complex example that takes in &lt;code&gt;load_args&lt;/code&gt; and &lt;code&gt;save_args&lt;/code&gt;&#xA;&lt;a href=&#34;https://kedro.readthedocs.io/en/stable/05_data/01_data_catalog.html?highlight=catalog&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;docs&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;nodes&#34;&gt;Nodes &lt;a href=&#34;#nodes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Nodes are a very core part of kedro to build the &lt;strong&gt;DAG&lt;/strong&gt;.  These nodes are what&#xA;provides the definition of what catalog entries, get passed into which&#xA;function, and output to another catalog entry.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pandas&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pd&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;numpy&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;np&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;clean_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataFrame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;n&#34;&gt;boats&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataFrame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataFrame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cars_df&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cars&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dropna&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;boats_df&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;boats&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dropna&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;halve_dataframe&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataFrame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;List&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataFrame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;array_split&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;clean_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;cars2017&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;boats2017&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;n&#34;&gt;outputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cars_df&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;clean_cars2017&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                      &lt;span class=&#34;n&#34;&gt;boats_df&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;clean_boats2017&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;halve_dataframe&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;s1&#34;&gt;&amp;#39;clean_cars2017&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;train_cars2017&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;test_cars2017&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;halve_dataframe&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;nb&#34;&gt;dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;clean_boats2017&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;train_boats2017&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;test_boats2017&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Here is an example of three nodes taken from their&#xA;&lt;a href=&#34;https://kedro.readthedocs.io/en/stable/kedro.pipeline.node.html?highlight=node&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;docs&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;pipeline&#34;&gt;Pipeline &lt;a href=&#34;#pipeline&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The kedro &lt;code&gt;Pipeline&lt;/code&gt;, is a DAG (Directed Acyclic Graph).  It is a graph object&#xA;that flows in one direction.  You can slice into the pipeline using a few built&#xA;in graph method &lt;code&gt;to_nodes&lt;/code&gt;, &lt;code&gt;from_nodes&lt;/code&gt;, &lt;code&gt;to_outputs&lt;/code&gt;, and &lt;code&gt;from_inputs&lt;/code&gt;.  You&#xA;can chain up these method calls since each one returns a new &lt;code&gt;Pipeline&lt;/code&gt; object.&#xA;You can also ask a pipline for its edges with &lt;code&gt;inputs&lt;/code&gt;, and &lt;code&gt;outputs&lt;/code&gt;.  You can&#xA;also list every dataset along the way with &lt;code&gt;all_inputs&lt;/code&gt; or &lt;code&gt;all_outputs&lt;/code&gt;.&#xA;Lastly you can convert it back into a list of nodes with &lt;code&gt;nodes&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.pipeline&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# using our nodes from last tim&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;runner&#34;&gt;Runner &lt;a href=&#34;#runner&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The runner is the bridge between kedro and the orchestrators.  The kedro team&#xA;provides some basic runners for running pipelines locally, built right into the&#xA;framework, but adding on new runners for different orchestrators is done&#xA;through the use of adding in a new runner to your project.&lt;/p&gt;&#xA;&lt;h2 id=&#34;hooks&#34;&gt;Hooks &lt;a href=&#34;#hooks&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Kedro allows you to hook into a number of lifecycle methods through the use of&#xA;the &lt;code&gt;pluggy&lt;/code&gt; framework.  Yes the one that &lt;code&gt;pytest&lt;/code&gt; is built on.  There are a&#xA;number of different lifecycle methods that allow us to hook in around where&#xA;kedro is running such as &lt;code&gt;before_pipeline_run&lt;/code&gt; or &lt;code&gt;after_catalog_loaded&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;links&#34;&gt;Links &lt;a href=&#34;#links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://kedro.readthedocs.io/en/stable/kedro.pipeline.node.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Node&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://kedro.readthedocs.io/en/stable/kedro.pipeline.Pipeline.html#kedro.pipeline.Pipeline&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Pipeline&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://kedro.readthedocs.io/en/stable/06_nodes_and_pipelines/04_run_a_pipeline.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Run a pipeline&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://kedro.readthedocs.io/en/stable/03_tutorial/04_create_pipelines.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;create pipelines&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://kedro.readthedocs.io/en/stable/10_deployment/01_deployment_guide.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro deployment&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>How I Kedro</title>
    <id>https://waylonwalker.com/how-i-kedro/</id>
    <updated>2021-08-16T22:34:45Z</updated>
    <published>2021-08-16T22:34:45Z</published>
    <link href="https://waylonwalker.com/how-i-kedro/" rel="alternate" type="text/html"></link>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/bw5_FWDVRpU&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://youtu.be/bw5_FWDVRpU&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;ubuntu&#34;&gt;Ubuntu &lt;a href=&#34;#ubuntu&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I recently switched over to using Ubuntu, it works well pretty much out of the&#xA;box for me.  I am using gnome with a dark theme.&lt;/p&gt;&#xA;&lt;h2 id=&#34;gnome-terminal&#34;&gt;Gnome Terminal &lt;a href=&#34;#gnome-terminal&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I am still using the built in default gnome terminal, it just works.  It does&#xA;all the things that I need it to do.  It supports transparency renders my fonts&#xA;and allows me to highlight things well.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;One Dark Theme&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;dotfiles&#34;&gt;dotfiles &lt;a href=&#34;#dotfiles&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can find my&#xA;&lt;a href=&#34;https://github.com/waylonwalker/devtainer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dotfiles&lt;/a&gt; on&#xA;github.  Feel free to read through and take anything that you&#xA;find useful.  I would encourage you not to steal them, but to&#xA;integrate the parts that you want into your own dotfiles.&#xA;dotfiles are a very personal thing. They are an extension of&#xA;ones fingertips designed for how you think and type.&lt;/p&gt;&#xA;&lt;h2 id=&#34;zsh&#34;&gt;zsh &lt;a href=&#34;#zsh&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I use zsh as my default shell.  I like to use it as my&#xA;interactive shell.  It works, and does a bit better with&#xA;things like tab completion out of the box.&lt;/p&gt;&#xA;&lt;h2 id=&#34;starship&#34;&gt;starship &lt;a href=&#34;#starship&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I use the starship prompt for my shell.  It works well out of&#xA;the box.  It looks good and includes all of the information&#xA;that I would ever need.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/kedro-prompt.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/kedro-prompt.png&#34; alt=&#34;kedro-prompt&#34;/ data-glightbox=&#34;description: kedro-prompt&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;tmux&#34;&gt;tmux &lt;a href=&#34;#tmux&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As a team lead I am in and out of many projects per day, tmux allows me to get&#xA;in and out of these files with super speed.  I was using a mix of vscode and&#xA;tmux in until October 2020.  At this point I got moved development machines and&#xA;pushed myself to use only the terminal.  I felt that vscode was just getting&#xA;slower and slower, and I was getting less benefit from it.  Especially now that&#xA;the lsp is a part of nvim.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/tmux-navigation-2021-prefix+c-j.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-prefix+c-j.gif&#34; alt=&#34;tmux-prefix+c-j&#34;/ data-glightbox=&#34;description: tmux-prefix+c-j&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;neovim&#34;&gt;neovim &lt;a href=&#34;#neovim&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I really like the raw speed and customizability of neovim.  You can see all the&#xA;customization, and plugins I have added in my dotfiles.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;OneBuddy Theme&lt;/li&gt;&#xA;&lt;li&gt;pylsp&lt;/li&gt;&#xA;&lt;li&gt;kedro-lsp&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/nvim-kedro.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/nvim-kedro.png&#34; alt=&#34;nvim-kedro&#34;/ data-glightbox=&#34;description: nvim-kedro&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;ipython&#34;&gt;ipython &lt;a href=&#34;#ipython&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I really like ipython, it lets me edit code in my code editor, then import it&#xA;or run it quickly.  Ipython gives me the right level of tooling.  I don’t need&#xA;markdown mixed in my code, I put those notes into docstrings, a readme, or&#xA;wiki.  When I need to see plots I just store them as png or &lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;html&lt;/a&gt; and view them&#xA;in my browser.&lt;/p&gt;&#xA;&lt;p&gt;I do a bit of customization to my ipython session that you can find in my&#xA;dotfiles repo.  I use a custom prompt and use rich formatting and tracebacks if&#xA;rich is installed.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;custom prompt&lt;/li&gt;&#xA;&lt;li&gt;rich traceback&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/kedro-ipython.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/kedro-ipython.png&#34; alt=&#34;kedro-ipython&#34;/ data-glightbox=&#34;description: kedro-ipython&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;links&#34;&gt;Links &lt;a href=&#34;#links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tmux/tmux&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/waylonWalker/devtainer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dotfiles&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://starship.rs/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/starship.rs.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/starship.rs.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;starship.rs&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/kedro-org/kedro&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://ipython.readthedocs.io/en/6.5.0/index.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/ipython.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/ipython.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ipython&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/willmcgugan/rich&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rich&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux show-messages</title>
    <id>https://waylonwalker.com/tmux-show-messages/</id>
    <updated>2021-08-14T09:03:09Z</updated>
    <published>2021-08-14T09:03:09Z</published>
    <link href="https://waylonwalker.com/tmux-show-messages/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/LLk94fKpGg4</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/LLk94fKpGg4&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/LLk94fKpGg4&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;As we push the limits of tmux further and further you are bound to end up in a&#xA;situation where you are mashing down a hotkey and it’s just not doing what you&#xA;want it to do, and you have no idea why.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;show-messages&lt;/code&gt; is a tmux command that can be used to show what tmux is&#xA;actually doing behind the scenes.  This might highlight any hot key conflicts&#xA;you might have in your &lt;code&gt;~/.tmux.conf&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;man-page-for-show-messages&#34;&gt;man page for show-messages &lt;a href=&#34;#man-page-for-show-messages&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;In case you wnat more information about show-messages, here is the man page.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;show-messages &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-JT&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-t target-client&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;alias: showmsgs&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        Show server messages or information.  Messages are stored, up to a&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        maximum of the limit &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; by the message-limit server option.  -J and -T&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        show debugging information about &lt;span class=&#34;nb&#34;&gt;jobs&lt;/span&gt; and terminals.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also check out the full YouTube&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;&#xA;to see all of the videos in this series.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux ta</title>
    <id>https://waylonwalker.com/tmux-ta/</id>
    <updated>2021-08-13T09:03:09Z</updated>
    <published>2021-08-13T09:03:09Z</published>
    <link href="https://waylonwalker.com/tmux-ta/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/nT0FA1RNZEs</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/nT0FA1RNZEs&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/nT0FA1RNZEs&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now your creating, jumping, and killing sessions like a boss. You are slicing&#xA;through projects with ease, let me show you one more thing that can be the&#xA;cream on top of this silky smooth setup we have been working towards.&lt;/p&gt;&#xA;&lt;h2 id=&#34;chris-toomeyshttpstwittercomchristoomey-tmux-course&#34;&gt;&lt;a href=&#34;https://twitter.com/christoomey&#34;&gt;Chris Toomey’s&lt;/a&gt; Tmux Course &lt;a href=&#34;#chris-toomeyshttpstwittercomchristoomey-tmux-course&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This script is simply my fork of Chris Toomey’s &lt;code&gt;tat&lt;/code&gt; script straight out of&#xA;his course. It helps us create or jump to project specific sessions with ease.&lt;/p&gt;&#xA;&lt;h2 id=&#34;a-directory-of-projects&#34;&gt;a directory of projects &lt;a href=&#34;#a-directory-of-projects&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;My version of the &lt;code&gt;ta&lt;/code&gt; script will let you pass it a directory, and it will&#xA;give you a fuzzy popup.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ta ~/git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;setting-up-a-keybinding&#34;&gt;setting up a keybinding &lt;a href=&#34;#setting-up-a-keybinding&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; C-g display-popup -E &lt;span class=&#34;s2&#34;&gt;&amp;#34;ta ~/git&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/ta-git.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/ta-git.png&#34; alt=&#34;ta-git&#34;/ data-glightbox=&#34;description: ta-git&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;default-layout&#34;&gt;default layout &lt;a href=&#34;#default-layout&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;By default I have my projects open with a vertical split, vim is on top, with&#xA;my file finder open and the lower split is set to just my terminal. This is&#xA;what I do 90% of the time that I open a project anyways.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/ta-git-layout.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/ta-git-layout.png&#34; alt=&#34;ta-git-layout&#34;/ data-glightbox=&#34;description: ta-git-layout&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;more-projects&#34;&gt;More projects &lt;a href=&#34;#more-projects&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I also have a directory setup that is a symlink-gallery of all of my projects,&#xA;both private and public. This makes it easy to have one key that lets me see&#xA;all of my projects.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -rf ~/projects&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir ~/projects&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -sf ~/work/* ~/projects&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -sf ~/git/* ~/projects&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/symlink-gallery/&#34; class=&#34;hoverlink&#34;&gt;https://waylonwalker.com/symlink-gallery/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This post covers how I combine all my projects into a single directory.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;related-links&#34;&gt;Related Links &lt;a href=&#34;#related-links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://gist.github.com/mzmonsour/8791835&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/gist.github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/gist.github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;default key bindings&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://twitter.com/christoomey&#34;&gt;Chris Toomey’s&lt;/a&gt; Tmux Course&lt;/li&gt;&#xA;&lt;li&gt;my &lt;a href=&#34;https://github.com/WaylonWalker/devtainer/blob/main/bin/.local/bin/ta&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ta script&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;my &lt;a href=&#34;https://github.com/WaylonWalker/devtainer/blob/main/tmux/.tmux.conf&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;.tmux.conf&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/tmux-nav-2021/&#34; class=&#34;hoverlink&#34;&gt;https://waylonwalker.com/tmux-nav-2021/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also check out the full YouTube&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;&#xA;to see all of the videos in this series.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux display-message</title>
    <id>https://waylonwalker.com/tmux-display-message/</id>
    <updated>2021-08-12T09:03:09Z</updated>
    <published>2021-08-12T09:03:09Z</published>
    <link href="https://waylonwalker.com/tmux-display-message/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/utfLA6L8o5s</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/utfLA6L8o5s&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/utfLA6L8o5s&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;You’ve got some long running tasks, and you’re trying to stay productive and&#xA;knock tasks off that board, but you keep finding that your processes finish and&#xA;you stay on other tasks for longer than you should.  You were in the flow and&#xA;just did not check back in on it.  With &lt;code&gt;display-message&lt;/code&gt; you can send yourself&#xA;a notification when that long running task is complete.&lt;/p&gt;&#xA;&lt;h2 id=&#34;from-the-man-page&#34;&gt;from the man page &lt;a href=&#34;#from-the-man-page&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is a snippet of &lt;code&gt;display-message&lt;/code&gt; from the tmux man page.  I rarely need&#xA;to do anything other than just display message, but there are other flags for&#xA;it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;display-message &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-aINpv&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-c target-client&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-d delay&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-t target-pane&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;message&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;alias: display&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        Display a message.  If -p is given, the output is printed to stdout,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        otherwise it is displayed in the target-client status line &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; up to&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        delay milliseconds.  If delay is not given, the message-time option is&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        used&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; a delay of zero waits &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; a key press.  ‘N’ ignores key presses&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        and closes only after the delay expires.  The format of message is&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        described in the FORMATS section&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        information is taken from target-pane &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; -t is given, otherwise the&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        active pane.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        -v prints verbose logging as the format is parsed and -a lists the&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        format variables and their values.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        -I forwards any input &lt;span class=&#34;nb&#34;&gt;read&lt;/span&gt; from stdin to the empty pane given by&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        target-pane.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;notifier&#34;&gt;notifier &lt;a href=&#34;#notifier&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;With &lt;code&gt;display-message&lt;/code&gt; we can do things like setup notifications that will work&#xA;cross platform.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cmatrix -t &lt;span class=&#34;m&#34;&gt;5&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; tmux display-message &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Without setting the target-pane &lt;code&gt;display-message&lt;/code&gt; defaults to the active pane.&#xA;This is a very handy feature that allows us to switch windows, or sessions and&#xA;still recieve the message.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also check out the full YouTube&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;&#xA;to see all of the videos in this series.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ heathdbrown python_code_tips</title>
    <id>https://waylonwalker.com/heathdbrown-python_code_tips/</id>
    <updated>2021-08-11T14:44:12Z</updated>
    <published>2021-08-11T14:44:12Z</published>
    <link href="https://waylonwalker.com/heathdbrown-python_code_tips/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on python_tips, created by heathdbrown.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/heathdbrown/python_code_tips&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;python_code_tips&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/heathdbrown&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;heathdbrown&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>killing tmux</title>
    <id>https://waylonwalker.com/tmux-killing-tmux/</id>
    <updated>2021-08-11T09:03:09Z</updated>
    <published>2021-08-11T09:03:09Z</published>
    <link href="https://waylonwalker.com/tmux-killing-tmux/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/QWPyYx54JbE</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/QWPyYx54JbE&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/QWPyYx54JbE&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now it’s time to switch gears, we are onto a different part of our day and&#xA;there are just too many sessions running and we need to clean up shop.&lt;/p&gt;&#xA;&lt;h2 id=&#34;kill-server&#34;&gt;kill-server &lt;a href=&#34;#kill-server&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;One viable option is to nuke the whole dang thing.  I actually do this more&#xA;than you might think.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tmux kill-server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;save and commit your work diligently before &lt;code&gt;kill-server&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;kill-session&#34;&gt;kill-session &lt;a href=&#34;#kill-session&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;A more reasonable option might be to kill a single session.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# kills the current session&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tmux kill-session&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# kills the session named scratch&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tmux kill-session -t scratch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;choose-tree&#34;&gt;choose-tree &lt;a href=&#34;#choose-tree&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Killing sessions one by one from the command line can be a bit tedious, and&#xA;involve more keystrokes than necessary.  Another option built right into tmux&#xA;is &lt;code&gt;choose-tree&lt;/code&gt;.  By default &lt;code&gt;choose-tree&lt;/code&gt; is bound to &lt;code&gt;prefix+s&lt;/code&gt;, that’s&#xA;pressing control+b then s.  Once you are in &lt;code&gt;choose-tree&lt;/code&gt;, you can navigate&#xA;around with your configured navigation scheme, press &lt;code&gt;x&lt;/code&gt; to kill a session, or&#xA;pane or window then &lt;code&gt;y&lt;/code&gt; to confirm.  You can also batch delete by tagging items&#xA;with t, and killing them all at once with &lt;code&gt;X&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tmux-choose-tree/&#34; class=&#34;wikilink&#34; data-title=&#34;tmux choose-tree&#34; data-description=&#34;https://youtu.be/79Y-kqAiMpw&#34; data-date=&#34;2021-07-19&#34; data-preview=&#34;https://youtu.be/79Y-kqAiMpw&#34;&gt;tmux choose-tree&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;check out this post for a bit more information on choose-tree&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;fuzzy-matcher&#34;&gt;fuzzy matcher &lt;a href=&#34;#fuzzy-matcher&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is my preferred way, using a fuzzy matcher.  I recently improved this one&#xA;by making it a popup and cleaning it up based on a repsonse,&#xA;&lt;a href=&#34;https://qmacro.org/blog/posts/2021/08/06/tmux-output-formatting/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/qmacro.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/qmacro.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-output-formatting&lt;/a&gt;&#xA;by &lt;a href=&#34;https://twitter.com/qmacro&#34;&gt;DJ Adams&lt;/a&gt;.  I press prefix+k to bring up a kill-session menu.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; k display-popup -E &lt;span class=&#34;s2&#34;&gt;&amp;#34;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    tmux list-sessions -F &amp;#39;#{?session_attached,,#{session_name}}&amp;#39; |\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    fzf --reverse -m --header=kill-session |\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    xargs -I {} tmux kill-session -t {}&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;note this is setup to multiple sessions all at once.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also check out the full YouTube&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;&#xA;to see all of the videos in this series.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux has-session</title>
    <id>https://waylonwalker.com/tmux-has-session/</id>
    <updated>2021-08-09T09:03:09Z</updated>
    <published>2021-08-09T09:03:09Z</published>
    <link href="https://waylonwalker.com/tmux-has-session/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/XucVVgGmesM</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/XucVVgGmesM&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/XucVVgGmesM&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I see you there, trying to script out your tmux layouts. Tryig to get each&#xA;project setup just perfect with a script, but you keep stumbling over yourself&#xA;with &lt;code&gt;duplicate session&lt;/code&gt; error messages&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;has-session&lt;/code&gt; tmux command is a handy tool to prevent this &lt;code&gt;duplicate session&lt;/code&gt; error message when scripting your tmux layouts.&lt;/p&gt;&#xA;&lt;h2 id=&#34;command-line&#34;&gt;command line &lt;a href=&#34;#command-line&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The command is pretty straight forward, you simply ask tmux if the session name&#xA;you are looking for exists.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tmux has-session -t &lt;span class=&#34;s2&#34;&gt;&amp;#34;waylonwalker_com&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also check out the full YouTube&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;&#xA;to see all of the videos in this series.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ bigskysoftware htmx</title>
    <id>https://waylonwalker.com/bigskysoftware-htmx/</id>
    <updated>2021-08-08T20:16:53Z</updated>
    <published>2021-08-08T20:16:53Z</published>
    <link href="https://waylonwalker.com/bigskysoftware-htmx/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by htmx from bigskysoftware.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/bigskysoftware/htmx&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;htmx&lt;/a&gt; from &lt;a href=&#34;https://github.com/bigskysoftware&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;bigskysoftware&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&amp;lt;/&amp;gt; &lt;a href=&#34;/htmx/&#34; class=&#34;glossary-term&#34; title=&#34;htmx is a frontend javascript library for creating dynamic web applications.&#34;&gt;htmx&lt;/a&gt; - high power tools for &lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;HTML&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux list-keys</title>
    <id>https://waylonwalker.com/tmux-list-keys/</id>
    <updated>2021-08-08T09:03:09Z</updated>
    <published>2021-08-08T09:03:09Z</published>
    <link href="https://waylonwalker.com/tmux-list-keys/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/Y1MYmL8ZolE</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/Y1MYmL8ZolE&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/Y1MYmL8ZolE&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Tmux list keys can be a useful tool to help remind you of what kebindings you&#xA;have setup.  You can search for them and scroll just like in tmux copy-mode.&lt;/p&gt;&#xA;&lt;h2 id=&#34;command-line&#34;&gt;command line &lt;a href=&#34;#command-line&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can call list-keys from the command line but the interface is not very&#xA;usable by itself.  It might be nice to mix with grep or a pager in some&#xA;circumstances.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tmux list-keys&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;tmux-command-line&#34;&gt;tmux command line &lt;a href=&#34;#tmux-command-line&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Running &lt;code&gt;list-keys&lt;/code&gt; from within the tmux command line puts you into a much more&#xA;pleasant &lt;code&gt;copy-mode&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;list-keys&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;default-keybinging&#34;&gt;default keybinging &lt;a href=&#34;#default-keybinging&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;By default tmux comes with &lt;code&gt;list-keys&lt;/code&gt; bound to prefix+?.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key          ? list-keys&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;list-keys-man-page&#34;&gt;list-keys man page &lt;a href=&#34;#list-keys-man-page&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can see the additional flags provided by tmux in the man page for&#xA;&lt;code&gt;list-keys&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;list-keys &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-1aN&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-P prefix-string -T key-table&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;key&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;alias: lsk&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        List key bindings.  There are two forms: the default lists keys as&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        bind-key commands&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; -N lists only keys with attached notes and shows&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        only the ke y and note &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; each key.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        With the default form, all key tables are listed by default.  -T lists only keys in key-table.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        With the -N form, only keys in the root and prefix key tables are&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        listed by default&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; -T also lists only keys in key-table.  -P specifies&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        a prefix to print before each key and -1 lists only the first matching&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        key.  -a lists the &lt;span class=&#34;nb&#34;&gt;command&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; keys that &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt; not have a note rather than&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        skipping them.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also check out the full YouTube&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;&#xA;to see all of the videos in this series.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux status-bar</title>
    <id>https://waylonwalker.com/tmux-status-bar/</id>
    <updated>2021-08-07T09:03:09Z</updated>
    <published>2021-08-07T09:03:09Z</published>
    <link href="https://waylonwalker.com/tmux-status-bar/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/mvgM8UH11_U</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/mvgM8UH11_U&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/mvgM8UH11_U&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The tmux status bar can be a handy tool to remind yourself where you are within&#xA;tmux.  It can also include a bunch of system information like battery status,&#xA;cpu, mem, whatever you can get from the command  line.  Honestly I like to keep&#xA;it minimal, and actually keep it turned off most of the time.  I find that it&#xA;helps a little bit for others to follow along if I keep it on in certain&#xA;circumstances.&lt;/p&gt;&#xA;&lt;h2 id=&#34;show-the-status-bar&#34;&gt;show the status bar &lt;a href=&#34;#show-the-status-bar&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can set a hotkey to show or hide the status bar.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; s set-option -g status&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; C-s set-option -g status&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;setting-the-background-transparent&#34;&gt;setting the background transparent &lt;a href=&#34;#setting-the-background-transparent&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I really want a minimal status bar with very little bling, I want it to get out&#xA;of the way an not draw too much attention, so step one is to set the background&#xA;to transparent.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# default statusbar colors&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#――――――――――――――――――――――――――――――――&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;set-option -g status-bg default&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;set-option -g status-fg colour240&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;setting-default-colors&#34;&gt;setting default colors &lt;a href=&#34;#setting-default-colors&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I want my status bar to somewhat match the rest of my theme, so I set the&#xA;default foreground as magenta and the default background as transparent.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# default window title colors&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#―――――――――――――――――――――――――――――――&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;set-window-option -g window-status-style &lt;span class=&#34;nv&#34;&gt;fg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;magenta&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;set-window-option -g window-status-style &lt;span class=&#34;nv&#34;&gt;bg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;default&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;my-status-bar&#34;&gt;my status bar &lt;a href=&#34;#my-status-bar&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Honestly I set this up quite awhile ago, and it does everything I need it to&#xA;for now.  It shows me the current session that I am in on the left and lists&#xA;out the windows for the session in the middle.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -g status-left-length &lt;span class=&#34;m&#34;&gt;85&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -g status-left &lt;span class=&#34;s2&#34;&gt;&amp;#34;working on#[fg=colour135] #S&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -g window-status-current-format &lt;span class=&#34;s2&#34;&gt;&amp;#34;#[fg=black,bold bg=default]│#[fg=white bg=cyan]#W#[fg=black,bold bg=default]│&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -g window-status-current-format &lt;span class=&#34;s2&#34;&gt;&amp;#34;#[fg=black,bold bg=default]│#[fg=colour135 bg=black]#W#[fg=black,bold bg=default]│&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -g status-style &lt;span class=&#34;nv&#34;&gt;bg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;default&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -g status-right &lt;span class=&#34;s2&#34;&gt;&amp;#34;#[fg=magenta] #[bg=gray] %b %d %Y %l:%M %p&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -g status-right &lt;span class=&#34;s1&#34;&gt;&amp;#39;#(gitmux &amp;#34;#{pane_current_path}&amp;#34;)&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -g status-justify centre&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;For more format options search for FORMATS in the tmux manpage.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also check out the full YouTube&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;&#xA;to see all of the videos in this series.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux source-file</title>
    <id>https://waylonwalker.com/tmux-source-file/</id>
    <updated>2021-08-06T09:03:09Z</updated>
    <published>2021-08-06T09:03:09Z</published>
    <link href="https://waylonwalker.com/tmux-source-file/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/dDq0depPrTs</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/dDq0depPrTs&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/dDq0depPrTs&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;So you have been tricking out that &lt;code&gt;.tmux.conf&lt;/code&gt;, you’re looking for a silky&#xA;smooth workflow that lets you fly through tmux with super speed, but every time&#xA;you tweak out that &lt;code&gt;.tmux.conf&lt;/code&gt; you have to restart your whole session. Not amymore,&lt;/p&gt;&#xA;&lt;p&gt;Let’s add this to the bottom of our tmux.conf so that you can see everytime it&#xA;gets sourced.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;display-message &lt;span class=&#34;s2&#34;&gt;&amp;#34;hello beautiful&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;command&#34;&gt;command &lt;a href=&#34;#command&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;We can run this command from your shell to re-source your changed &lt;code&gt;.tmux.conf&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tmux source-file ~/.tmux.conf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;It also works from the tmux command line.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;source-file ~/.tmux.conf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;tmux-hotkey&#34;&gt;tmux hotkey &lt;a href=&#34;#tmux-hotkey&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It’s very common to set this up as a keybinding so that you can do it easily&#xA;without needing to memorize the exact command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -T prefix r source-file ~/.tmux.conf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-r source-file ~/.tmux.conf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;from-vim&#34;&gt;from vim &lt;a href=&#34;#from-vim&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is my preferred way of re-sourcing my &lt;code&gt;.tmux.conf&lt;/code&gt;.  It sits quietly in&#xA;the background, and I dont need to remember to do anything.  If you are a vim&#xA;user you can automate this process by creating a &lt;code&gt;autocmd bufwritepost&lt;/code&gt;.  This&#xA;will shell out the &lt;code&gt;tmux source-file&lt;/code&gt; everytime you save your &lt;code&gt;.tmux.conf&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufwritepost&lt;/span&gt; .&lt;span class=&#34;nx&#34;&gt;tmux&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;conf&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;execute&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;:!tmux source-file %&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufwritepost&lt;/span&gt; .&lt;span class=&#34;nx&#34;&gt;tmux&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;local&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;conf&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;execute&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;:!tmux source-file %&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also check out the full YouTube&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;&#xA;to see all of the videos in this series.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux fzf session jumper</title>
    <id>https://waylonwalker.com/tmux-fzf-session-jump/</id>
    <updated>2021-08-05T09:03:09Z</updated>
    <published>2021-08-05T09:03:09Z</published>
    <link href="https://waylonwalker.com/tmux-fzf-session-jump/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/DkJ9rb85LC0</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/DkJ9rb85LC0&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/DkJ9rb85LC0&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Quickly getting between tmux splits is critical skill for productivity.  You&#xA;can get by with &lt;code&gt;next&lt;/code&gt; or &lt;code&gt;prev&lt;/code&gt; session for awhile, but if you have more than&#xA;about three session you need something a bit more targeted.&lt;/p&gt;&#xA;&lt;h2 id=&#34;full-screen-selector&#34;&gt;Full Screen selector &lt;a href=&#34;#full-screen-selector&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have used this fzf one keybinding for quite awhile,  honestly I did not make&#xA;it up, and cannot remember where it came from. It will open up a session picker&#xA;in a new full screen window.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; C-j new-window -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;session-switcher&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    tmux list-sessions -F &amp;#39;#{?session_attached,,#{session_name}}&amp;#39; |\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    sed &amp;#39;/^&lt;/span&gt;$&lt;span class=&#34;s2&#34;&gt;/d&amp;#39; |\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    fzf --reverse --header jump-to-session --preview &amp;#39;tmux capture-pane -pt {}&amp;#39;  |\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    xargs tmux switch-client -t&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;popup-selector&#34;&gt;Popup selector &lt;a href=&#34;#popup-selector&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Like with many of my keybindings I have swapped this one out for a popup&#xA;version.  It just feels so smooth.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; C-j display-popup -E &lt;span class=&#34;s2&#34;&gt;&amp;#34;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    tmux list-sessions -F &amp;#39;#{?session_attached,,#{session_name}}&amp;#39; |\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    sed &amp;#39;/^&lt;/span&gt;$&lt;span class=&#34;s2&#34;&gt;/d&amp;#39; |\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    fzf --reverse --header jump-to-session --preview &amp;#39;tmux capture-pane -pt {}&amp;#39;  |\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    xargs tmux switch-client -t&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also check out the full YouTube&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;&#xA;to see all of the videos in this series.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux next/prev session</title>
    <id>https://waylonwalker.com/tmux-next-prev-session/</id>
    <updated>2021-08-04T09:03:09Z</updated>
    <published>2021-08-04T09:03:09Z</published>
    <link href="https://waylonwalker.com/tmux-next-prev-session/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/8kZnjHPYnKU</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/8kZnjHPYnKU&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/8kZnjHPYnKU&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now that we are splitting up work into their own sessions, lets talk about how&#xA;to navigate between them without the command line.  Navigating sessions is what&#xA;kept me using a too many splits and windows workflow for far too long.  It was&#xA;rough, I was always tripping over panes and windows until I got too frustrated&#xA;and just ran &lt;code&gt;tmux kill-server&lt;/code&gt;  to start on a new blank slate.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-P switch-client -p&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-N switch-client -n&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also check out the full YouTube&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;&#xA;to see all of the videos in this series.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux start application</title>
    <id>https://waylonwalker.com/tmux-start-application/</id>
    <updated>2021-08-03T23:51:21Z</updated>
    <published>2021-08-03T23:51:21Z</published>
    <link href="https://waylonwalker.com/tmux-start-application/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/c-a2Bnv_NJ0</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/c-a2Bnv_NJ0&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/c-a2Bnv_NJ0&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Scripting tmux to open up specific applications can be intimidating your first&#xA;time.  It can be tricky to get it to start in the right directory.  If you are&#xA;trying to assign applictaions to a keybinding it can be easy to mess up and&#xA;have weird things happen every time your &lt;code&gt;~/.tmux.conf&lt;/code&gt; gets sourced.&lt;/p&gt;&#xA;&lt;h2 id=&#34;open-htop-in-an-above-split&#34;&gt;Open htop in an above split &lt;a href=&#34;#open-htop-in-an-above-split&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I used this one for a number of years to take a quick peek into my systems&#xA;performance while a memory intensive task was running.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-t split-window htop &lt;span class=&#34;se&#34;&gt;\;&lt;/span&gt; swap-pane -U&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;🗒️ note that the &lt;code&gt;swap-pane -U&lt;/code&gt; will make the htop split active immediately&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;open-htop-in-a-popup&#34;&gt;Open htop in a popup &lt;a href=&#34;#open-htop-in-a-popup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;With the new tmux popup windows I really like the flow of just peeking at&#xA;htop in a popup and jumping back into what I was doing.  It can have a more&#xA;consistennt look, and not mess with the window layouts.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-t popup -E -h 95% -w 95% -x 100% &lt;span class=&#34;s2&#34;&gt;&amp;#34;htop&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;open-an-applicaiton-in-the-current-directory&#34;&gt;Open an applicaiton in the current directory &lt;a href=&#34;#open-an-applicaiton-in-the-current-directory&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;One thing that can be tricky is getting apps that need to be in a specific&#xA;directory started in the directory that you want. Here are two examples I use&#xA;to open &lt;code&gt;vifm&lt;/code&gt; or &lt;code&gt;gitui&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-e split-window -c &lt;span class=&#34;s1&#34;&gt;&amp;#39;#{pane_current_path}&amp;#39;&lt;/span&gt; vifm . .&lt;span class=&#34;se&#34;&gt;\;&lt;/span&gt; resize-pane -Z&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; C-k split-window -c &lt;span class=&#34;s1&#34;&gt;&amp;#39;#{pane_current_path}&amp;#39;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;gitui&amp;#39;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\;&lt;/span&gt; resize-pane -Z&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;🗒️ note that &lt;code&gt;split-window&lt;/code&gt; takes in a -c flag before the application you&#xA;want to run to specify the startup directory.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;open-a-popup-in-a-specific-directory&#34;&gt;Open a popup in a specific directory &lt;a href=&#34;#open-a-popup-in-a-specific-directory&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’ve been converted over to using popups for these as well.  I’ll admit that&#xA;the workflow of creating a new full screen window may have been better, but&#xA;this can be a bit less jarring, espessially if you have anyone following&#xA;along with what you are doing.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-e display-popup -d &lt;span class=&#34;s1&#34;&gt;&amp;#39;#{pane_current_path}&amp;#39;&lt;/span&gt; -E vifm&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; C-k display-popup -d &lt;span class=&#34;s1&#34;&gt;&amp;#39;#{pane_current_path}&amp;#39;&lt;/span&gt; -E &lt;span class=&#34;s1&#34;&gt;&amp;#39;gitui&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also check out the full YouTube&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;&#xA;to see all of the videos in this series.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux rename session</title>
    <id>https://waylonwalker.com/tmux-rename-session/</id>
    <updated>2021-08-03T23:51:21Z</updated>
    <published>2021-08-03T23:51:21Z</published>
    <link href="https://waylonwalker.com/tmux-rename-session/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/WRLRiQDjVIA</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/WRLRiQDjVIA&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/WRLRiQDjVIA&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;So you have been working on your tmux workflow, you’ve dropped a too many&#xA;window workflow for scoping work that belongs together into separate sessions,&#xA;but you cannot remember what session your work is in. If your diligent you have&#xA;named your window when you created it, but sometimes its intent has changed or&#xA;your were just plain too lazy at the time for the extra characters needed to&#xA;name it.  Don’t worry we can still give that session a descriptive name.&lt;/p&gt;&#xA;&lt;p&gt;Let’s rename some sessions in the terminal.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# rename the current session to me&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tmux rename-session me&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# rename the me session to scratch&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tmux rename-session -t me scratch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;There is a default keybinding that you can use &lt;code&gt;&amp;lt;prefix&amp;gt;+$&lt;/code&gt; to rename the&#xA;current session in the tmux command line.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key          $ command-prompt -I &lt;span class=&#34;c1&#34;&gt;#S &amp;#34;rename-session &amp;#39;%%&amp;#39;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I’ve also had this keybinding kicking around for years, but I rarely use it&#xA;anymore. You will see why in an upcoming video.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;bind&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;M&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;W&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;command&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;prompt&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;rename-session &amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%%&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#39;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also check out the full YouTube&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;&#xA;to see all of the videos in this series.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux targeted session</title>
    <id>https://waylonwalker.com/tmux-targeted-session/</id>
    <updated>2021-08-02T23:51:21Z</updated>
    <published>2021-08-02T23:51:21Z</published>
    <link href="https://waylonwalker.com/tmux-targeted-session/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/5KE7Il7SOEk</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/5KE7Il7SOEk&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/5KE7Il7SOEk&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is something that I made up but use every single day, this is what keeps&#xA;much of what is on my blog or my teams private work wiki going.  I have a few&#xA;very important directories that I have assigned directly to a hotkey for fast&#xA;session switching.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-i new-session -A -s waylonwalker_com &lt;span class=&#34;s2&#34;&gt;&amp;#34;cd ~/git/waylonwalker.com/ &amp;amp;&amp;amp; nvim&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; i popup -E -h 95% -w 95% -x 100% &lt;span class=&#34;s2&#34;&gt;&amp;#34;tmux new-session -A -s waylonwalker_com &amp;#39;cd ~/git/waylonwalker.com/ &amp;amp;&amp;amp; nvim&amp;#39;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-I popup -E &lt;span class=&#34;s2&#34;&gt;&amp;#34;tmux new-session -A -s waylonwalker_com &amp;#39;cd ~/git/waylonwalker.com/ &amp;amp;&amp;amp; nvim&amp;#39;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-new-session/&#34; class=&#34;wikilink&#34; data-title=&#34;tmux new-session&#34; data-description=&#34;https://youtu.be/LbQNdCAUogE&#34; data-date=&#34;2021-08-01&#34; data-preview=&#34;https://youtu.be/LbQNdCAUogE&#34;&gt;tmux new-session&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This one is building off of yeserday’s new-session post, make sure you check that one out as well.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also check out the full YouTube&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;&#xA;to see all of the videos in this series.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ThePrimeagen vim-nav-playground</title>
    <id>https://waylonwalker.com/theprimeagen-vim-nav-playground/</id>
    <updated>2021-08-02T15:33:11Z</updated>
    <published>2021-08-02T15:33:11Z</published>
    <link href="https://waylonwalker.com/theprimeagen-vim-nav-playground/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out ThePrimeagen and their project vim-nav-playground.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/ThePrimeagen&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ThePrimeagen&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/ThePrimeagen/vim-nav-playground&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vim-nav-playground&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ThePrimeagen vim-fundamentals</title>
    <id>https://waylonwalker.com/theprimeagen-vim-fundamentals/</id>
    <updated>2021-08-02T15:32:11Z</updated>
    <published>2021-08-02T15:32:11Z</published>
    <link href="https://waylonwalker.com/theprimeagen-vim-fundamentals/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered vim-fundamentals by ThePrimeagen, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/ThePrimeagen/vim-fundamentals&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vim-fundamentals&lt;/a&gt; by &lt;a href=&#34;https://github.com/ThePrimeagen&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ThePrimeagen&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux new-session</title>
    <id>https://waylonwalker.com/tmux-new-session/</id>
    <updated>2021-08-01T23:51:21Z</updated>
    <published>2021-08-01T23:51:21Z</published>
    <link href="https://waylonwalker.com/tmux-new-session/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/LbQNdCAUogE</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/LbQNdCAUogE&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/LbQNdCAUogE&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This one starts a new chapter in our series that is going to open up a whole&#xA;new set of workflow productivity options, understanding how the &lt;code&gt;new-session&lt;/code&gt;&#xA;command is a critical command in our adventure into tmux glory.  This is going&#xA;to open the door for some seriously game changing hotkeys and scripting.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# create a new session&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tmux new-session&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# create a new session detached&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tmux new-session -d&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# create a new session and name it&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tmux new-session -s me&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# create a new named session and attach to it if one exists&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tmux new-session -As me&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also check out the full YouTube&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;&#xA;to see all of the videos in this series.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux detach</title>
    <id>https://waylonwalker.com/tmux-detach/</id>
    <updated>2021-08-01T23:51:21Z</updated>
    <published>2021-08-01T23:51:21Z</published>
    <link href="https://waylonwalker.com/tmux-detach/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/A1qx3tNKDdA</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/A1qx3tNKDdA&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/A1qx3tNKDdA&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;tmux detach is a handy tmux command that will quit your current session while&#xA;keeping it running. The full name of the comamnd is &lt;code&gt;detach-client&lt;/code&gt;, &lt;code&gt;detach&lt;/code&gt;&#xA;is a shorthand.&lt;/p&gt;&#xA;&lt;p&gt;default keybinding&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key          d detach-client&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I have mine bound to &lt;code&gt;mod+d&lt;/code&gt; where mod is alt.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-d detach-client&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/tmux-nav-2021/&#34; class=&#34;hoverlink&#34;&gt;https://waylonwalker.com/tmux-nav-2021/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also check out the full YouTube&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;&#xA;to see all of the videos in this series.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux attach</title>
    <id>https://waylonwalker.com/tmux-attach/</id>
    <updated>2021-07-31T23:51:21Z</updated>
    <published>2021-07-31T23:51:21Z</published>
    <link href="https://waylonwalker.com/tmux-attach/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/JQ0yDCVu44E</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/JQ0yDCVu44E&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://youtu.be/JQ0yDCVu44E&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;attach is one of the most useful features of tmux.  If you have no interest in&#xA;tmux for pane and window management, you should use tmux for this.  It can be a&#xA;life saver if you ever get disconnected from the host machine or accidently&#xA;close your terminal you can connect right back into the session you were just&#xA;in using attach.&lt;/p&gt;&#xA;&lt;h2 id=&#34;attach&#34;&gt;attach &lt;a href=&#34;#attach&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tmux attach&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;this command will simply attach back to tmux if you are ever disconnected&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;If you ever run long running tasks on a remote machine by sshing into this you&#xA;should be doing it inside tmux, or something like tmux so that you do not loose&#xA;your work.&lt;/p&gt;&#xA;&lt;h2 id=&#34;attach-to-a-specific-session&#34;&gt;attach to a specific session &lt;a href=&#34;#attach-to-a-specific-session&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you have multiple sessions running you can select the session that you want&#xA;to attach to by passing &lt;code&gt;-t &amp;lt;name-of-session&amp;gt;&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tmux attach -t scratch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also check out the full YouTube&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;&#xA;to see all of the videos in this series.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Git in Depth Notes</title>
    <id>https://waylonwalker.com/git-in-depth/</id>
    <updated>2021-07-31T08:44:44Z</updated>
    <published>2021-07-31T08:44:44Z</published>
    <link href="https://waylonwalker.com/git-in-depth/" rel="alternate" type="text/html"></link>
    <summary type="text">These are my notes from taking @nnja&#39;s FEM course git-in-depth.</summary>
    <content type="html">&lt;p&gt;These are my notes from taking @nnja’s FEM course &lt;a href=&#34;https://frontendmasters.com/courses/git-in-depth/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/frontendmasters.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/frontendmasters.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;git-in-depth&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;requirements&#34;&gt;requirements &lt;a href=&#34;#requirements&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;git --version&lt;/code&gt; &amp;gt; than 2.0&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;creating-a-&lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt;&#34;&gt;creating a git &lt;a href=&#34;#creating-a-git&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hello&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; git hash-object --stdin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux ls</title>
    <id>https://waylonwalker.com/tmux-ls/</id>
    <updated>2021-07-30T23:51:21Z</updated>
    <published>2021-07-30T23:51:21Z</published>
    <link href="https://waylonwalker.com/tmux-ls/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/LY41GLn_DGg</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/LY41GLn_DGg&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/LY41GLn_DGg&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;tmux ls will list the sessions that you have running within the tmux server if&#xA;tmux is currently running.  This is handy to combine with commands such as &lt;code&gt;attach&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tmux ls&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-attach/&#34; class=&#34;wikilink&#34; data-title=&#34;tmux attach&#34; data-description=&#34;https://youtu.be/JQ0yDCVu44E&#34; data-date=&#34;2021-07-31&#34; data-preview=&#34;https://youtu.be/JQ0yDCVu44E&#34;&gt;tmux attach&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also check out the full YouTube&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;&#xA;to see all of the videos in this series.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux command line</title>
    <id>https://waylonwalker.com/tmux-command-line/</id>
    <updated>2021-07-29T23:51:21Z</updated>
    <published>2021-07-29T23:51:21Z</published>
    <link href="https://waylonwalker.com/tmux-command-line/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/SNu-4IrkjAs</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/SNu-4IrkjAs&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/SNu-4IrkjAs&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;So far we have covered a lot of tmux commands and how they map to keybindings&#xA;but these same commands can be executed at the command line.&lt;/p&gt;&#xA;&lt;h2 id=&#34;from-the-command-line&#34;&gt;From the command line &lt;a href=&#34;#from-the-command-line&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let’s make a popup that displays our &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; status for 5s or until we close it&#xA;manually.  We can run the following command at the command line, in a split.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tmux display-popup -E -d &lt;span class=&#34;s1&#34;&gt;&amp;#39;#{pane_current_path}&amp;#39;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;git status &amp;amp;&amp;amp; sleep 5&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;from-the-tmux-command-line&#34;&gt;From the tmux command line &lt;a href=&#34;#from-the-tmux-command-line&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Or we can open the tmux command line and run it from tmux’s built in command&#xA;line, which is very similar to bim EX mode. By default the tmux command line&#xA;can be opened with &lt;code&gt;prefix+[&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;display-popup -E -d &lt;span class=&#34;s1&#34;&gt;&amp;#39;#{pane_current_path}&amp;#39;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;git status &amp;amp;&amp;amp; sleep 5&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;🗒️ note that the tmux command is called by default when inside of tmux.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;make-it-a-keybinding&#34;&gt;Make it a keybinding &lt;a href=&#34;#make-it-a-keybinding&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Finally we can make it a keybinding by adding a bind command ahead of our tmux&#xA;command, then we can execute this in the tmux command line or add it to our&#xA;&lt;code&gt;~/.tmux.conf&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; s display-popup -E -d &lt;span class=&#34;s1&#34;&gt;&amp;#39;#{pane_current_path}&amp;#39;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;git status &amp;amp;&amp;amp; sleep 5&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also check out the full YouTube&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;&#xA;to see all of the videos in this series.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux copy-mode</title>
    <id>https://waylonwalker.com/tmux-copy-mode/</id>
    <updated>2021-07-28T23:51:21Z</updated>
    <published>2021-07-28T23:51:21Z</published>
    <link href="https://waylonwalker.com/tmux-copy-mode/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/-ypY_-VmBKk</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/-ypY_-VmBKk&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/-ypY_-VmBKk&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;tmux copy-mode is a tmux mode that lets you scroll, search, copy, and jump your&#xA;way through a pane.  There are a ton of keybindings for copy-mode, the main&#xA;ones you will need to know are &lt;code&gt;/&lt;/code&gt; for searching down &lt;code&gt;?&lt;/code&gt; for searching up, &lt;code&gt;n&lt;/code&gt;&#xA;for next item, &lt;code&gt;space&lt;/code&gt; for starting a selection, and enter to copy the&#xA;selection.  Arrow keys will be used for navigation unless you have specified vi mode, then it will be &lt;code&gt;hjkl&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Default keybinding to get into copy mode is &lt;code&gt;prefix+[&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key          &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; copy-mode&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you are a vim user you will likely want to use vi style keys, add this to&#xA;your &lt;code&gt;~/.tmux.conf&lt;/code&gt; file to enable vi mode.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;setw -g mode-keys vi&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;full list of copy-mode keybindings from the man page.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Command                                      vi              emacs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           append-selection&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           append-selection-and-cancel                  A&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           back-to-indentation                          ^               M-m&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           begin-selection                              Space           C-Space&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           bottom-line                                  L&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           cancel                                       q               Escape&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           clear-selection                              Escape          C-g&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           copy-end-of-line &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;prefix&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;                  D               C-k&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           copy-line &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;prefix&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           copy-pipe &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;command&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;prefix&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           copy-pipe-no-clear &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;command&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;prefix&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           copy-pipe-and-cancel &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;command&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;prefix&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           copy-selection &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;prefix&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           copy-selection-no-clear &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;prefix&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           copy-selection-and-cancel &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;prefix&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;         Enter           M-w&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           cursor-down                                  j               Down&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           cursor-down-and-cancel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           cursor-left                                  h               Left&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           cursor-right                                 l               Right&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           cursor-up                                    k               Up&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           end-of-line                                  $               C-e&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           goto-line &amp;lt;line&amp;gt;                             :               g&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           halfpage-down                                C-d             M-Down&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           halfpage-down-and-cancel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           halfpage-up                                  C-u             M-Up&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           history-bottom                               G               M-&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           history-top                                  g               M-&amp;lt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           jump-again                                   &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;               &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           jump-backward &amp;lt;to&amp;gt;                           F               F&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           jump-forward &amp;lt;to&amp;gt;                            f               f&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           jump-reverse                                 ,               ,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           jump-to-backward &amp;lt;to&amp;gt;                        T&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           jump-to-forward &amp;lt;to&amp;gt;                         t&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           jump-to-mark                                 M-x             M-x&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           middle-line                                  M               M-r&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           next-matching-bracket                        %               M-C-f&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           next-paragraph                               &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;               M-&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           next-space                                   W&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           next-space-end                               E&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           next-word                                    w&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           next-word-end                                e               M-f&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           other-end                                    o&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           page-down                                    C-f             PageDown&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           page-down-and-cancel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           page-up                                      C-b             PageUp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           pipe &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;command&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;prefix&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           pipe-no-clear &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;command&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;prefix&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           pipe-and-cancel &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;command&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;prefix&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           previous-matching-bracket                                    M-C-b&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           previous-paragraph                           &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;               M-&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           previous-space                               B&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           previous-word                                b               M-b&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           rectangle-on&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           rectangle-off&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           rectangle-toggle                             v               R&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           refresh-from-pane                            r               r&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           scroll-down                                  C-e             C-Down&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           scroll-down-and-cancel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           scroll-up                                    C-y             C-Up&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           search-again                                 n               n&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           search-backward &amp;lt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&amp;gt;                        ?&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           search-backward-incremental &amp;lt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&amp;gt;                            C-r&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           search-backward-text &amp;lt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           search-forward &amp;lt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&amp;gt;                         /&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           search-forward-incremental &amp;lt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&amp;gt;                             C-s&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           search-forward-text &amp;lt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           search-reverse                               N               N&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;-line                                  V&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;-word&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           set-mark                                     X               X&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           start-of-line                                &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;               C-a&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           stop-selection&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           top-line                                     H               M-R&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also check out the full YouTube&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;&#xA;to see all of the videos in this series.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux join-pane</title>
    <id>https://waylonwalker.com/tmux-join-pane/</id>
    <updated>2021-07-27T23:51:21Z</updated>
    <published>2021-07-27T23:51:21Z</published>
    <link href="https://waylonwalker.com/tmux-join-pane/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/Vm5rRtcVXLw</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/Vm5rRtcVXLw&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/Vm5rRtcVXLw&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Join-pane allows you to join panes that you have broken away from your window,&#xA;or created in a different window to the window you want it in.  As far as I&#xA;know there is not a default keybinding for it.&lt;/p&gt;&#xA;&lt;p&gt;Before you can join a pane you must first have a pane marked to join.  Once you&#xA;mark a pane, go back to the window you want to join it to and join-pane.&lt;/p&gt;&#xA;&lt;p&gt;My keybindings, you must add this to your &lt;code&gt;~/.tmux.conf&lt;/code&gt; file to use them.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Mark and swap panes&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#――――――――――――――――――――――――――――――――――――――――――――&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;bind&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;M&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pane&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# mark&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;bind&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;M&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;M&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pane&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;M&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# unmark&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;bind&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;M&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pane&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also check out the full YouTube&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;&#xA;to see all of the videos in this series.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux break-pane</title>
    <id>https://waylonwalker.com/break-pane/</id>
    <updated>2021-07-26T23:51:21Z</updated>
    <published>2021-07-26T23:51:21Z</published>
    <link href="https://waylonwalker.com/break-pane/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/ICL609F2xnc</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/ICL609F2xnc&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/ICL609F2xnc&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Break-pane is a handy tmux command when your layout gets too cramped and you&#xA;want to just move a split into its own window.  Calling &lt;code&gt;break-pane&lt;/code&gt; does&#xA;exactly that, it creates a &lt;code&gt;new-window&lt;/code&gt; for you and moves your currently&#xA;selected split into that window&lt;/p&gt;&#xA;&lt;p&gt;Default key binding for &lt;code&gt;break-pane&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key          ! break-pane&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux zoom</title>
    <id>https://waylonwalker.com/tmux-zoom/</id>
    <updated>2021-07-25T23:51:21Z</updated>
    <published>2021-07-25T23:51:21Z</published>
    <link href="https://waylonwalker.com/tmux-zoom/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/Rn6mOarCQ-Y</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/Rn6mOarCQ-Y&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/Rn6mOarCQ-Y&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Zooming into the current split in tmux is a valuable tool to give yourself some&#xA;screen real estate.  These days I am almost always presenting, streaming, or&#xA;pairing up with a co-worker over a video call.  Since I am always sharing my&#xA;screen I am generally zoomed in to a level that is just a bit uncomfortable, so&#xA;anytime I make a split it is really uncomfortable, being able to zoom into the&#xA;split I am focused on is a big help, and also help anyone watching follow where&#xA;I am currently working.&lt;/p&gt;&#xA;&lt;p&gt;Default key bindings for zooming the current split&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key          z resize-pane -Z&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I have rebound this to match the default binding with mod+z rather so that I&#xA;get that single keystroke experience.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-z resize-pane -Z&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux new-window</title>
    <id>https://waylonwalker.com/tmux-new-window/</id>
    <updated>2021-07-24T23:51:21Z</updated>
    <published>2021-07-24T23:51:21Z</published>
    <link href="https://waylonwalker.com/tmux-new-window/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/YRPZBv-iYyE</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/YRPZBv-iYyE&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/YRPZBv-iYyE&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;New window as it sounds makes new windows in tmux.  Windows are kind of like&#xA;tabs.  They are another screen within your sessions that you can name and make&#xA;new panes in.&lt;/p&gt;&#xA;&lt;p&gt;Default key bindings for creating and navigating windows in tmux.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key          c new-window&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key          p previous-window&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key          n next-window&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;As always I have rebound these keys because I generally prefer a single&#xA;keystroke over the prefix plus keybinding approach that tmux gives by default.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#――windows――――――――――――――――――――――――――――――――――――――&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-c new-window -c &lt;span class=&#34;s1&#34;&gt;&amp;#39;#{pane_current_path}&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-p previous-window&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-n next-window&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;When I started using tmux I did almost everything in one giant session with&#xA;many panes and windows.  It became a nightmare to manage and quickly get&#xA;between two sets work efficiently.  This year I leaned in on sessions quite&#xA;heavily.  Checkout this 👇 post to see that workflow in depth.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ emkademy jumpcutter</title>
    <id>https://waylonwalker.com/emkademy-jumpcutter/</id>
    <updated>2021-07-24T18:49:57Z</updated>
    <published>2021-07-24T18:49:57Z</published>
    <link href="https://waylonwalker.com/emkademy-jumpcutter/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across jumpcutter from emkademy, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/emkademy/jumpcutter&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jumpcutter&lt;/a&gt; from &lt;a href=&#34;https://github.com/emkademy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;emkademy&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;Automatically jump-cut silent parts of your videos using Python&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux slect-pane</title>
    <id>https://waylonwalker.com/tmux-select-pane/</id>
    <updated>2021-07-23T23:51:21Z</updated>
    <published>2021-07-23T23:51:21Z</published>
    <link href="https://waylonwalker.com/tmux-select-pane/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/CPZJZjN9YTY</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/CPZJZjN9YTY&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/CPZJZjN9YTY&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;These are my MOST often used keybindings that I use in tmux.  They allow me to&#xA;jump between splits with ease with a vim style layout.  I can hold mod and jump&#xA;between panes with a familiar arrow key.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-h &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;-pane -L&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-l &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;-pane -R&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-k &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;-pane -U&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-j &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;-pane -D&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux rotate-window</title>
    <id>https://waylonwalker.com/tmux-rotate-window/</id>
    <updated>2021-07-22T23:51:21Z</updated>
    <published>2021-07-22T23:51:21Z</published>
    <link href="https://waylonwalker.com/tmux-rotate-window/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/06z5qf81ofo</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/06z5qf81ofo&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/06z5qf81ofo&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Rotate window is the main way that I navigated tmux before I learned&#xA;&lt;code&gt;select-pane&lt;/code&gt;.  It allows you to change your focused pane, or rotate the&#xA;position of the panes easily.&lt;/p&gt;&#xA;&lt;p&gt;Default keybindings&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key        C-o rotate-window&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key          o &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;-pane -t :.+&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;My keybindings look just a bit different than the default ones, I do not like&#xA;needing to hit prefix for every command, especially for repeated commands.  I&#xA;set a similar keybinding to the default one that uses mod instead of prefix.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-o &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;-pane -t :.+&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-O rotate-window&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux select-layout</title>
    <id>https://waylonwalker.com/tmux-select-layout/</id>
    <updated>2021-07-21T23:51:21Z</updated>
    <published>2021-07-21T23:51:21Z</published>
    <link href="https://waylonwalker.com/tmux-select-layout/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/F0mHnwTrNNc</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/F0mHnwTrNNc&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/F0mHnwTrNNc&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;When you get many splits going in tmux sometimes its time for a new layout.&#xA;There are four layout strategies that I use, main-vertical, main-horizontal,&#xA;even-vertical, even-horizontal. Almost always I am useing the main ones with&#xA;mod plus a or mod plus shift a keybindings.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Select Layouts&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#―――――――――――――――――&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-a &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;-layout main-vertical&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-A &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;-layout main-horizontal&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-E &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;-layout even-vertical&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-V &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;-layout even-horizontal&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux resize-panes</title>
    <id>https://waylonwalker.com/tmux-resize-panes/</id>
    <updated>2021-07-20T23:51:21Z</updated>
    <published>2021-07-20T23:51:21Z</published>
    <link href="https://waylonwalker.com/tmux-resize-panes/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/hpFYE2LU7xc</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/hpFYE2LU7xc&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/hpFYE2LU7xc&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Resizing panes in tmux can be quite difficult in default tmux, I&#xA;use a set of keybingings to help resize panes in the rare occasions&#xA;that I do need just a bit more space.  I set the keybinding to the same as my&#xA;split navigation bindings but shifted. They are very vim like (h,j,k,l).&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# resize panes&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#―――――――――――――――――――――――――――――&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-H resize-pane -L &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-L resize-pane -R &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-K resize-pane -U &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-J resize-pane -D &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Most often when I need to resize panes I just grab the edge of the pane with my&#xA;mouse.  Yes the mouse, its not that often that I actually need to change the&#xA;size of a pane.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Enable mouse control (clickable windows, panes, resizable panes)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -g mouse on&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ThePrimeagen refactoring.nvim</title>
    <id>https://waylonwalker.com/theprimeagen-refactoring-nvim/</id>
    <updated>2021-07-20T15:44:22Z</updated>
    <published>2021-07-20T15:44:22Z</published>
    <link href="https://waylonwalker.com/theprimeagen-refactoring-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">ThePrimeagen has done a fantastic job with refactoring.nvim. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/ThePrimeagen&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ThePrimeagen&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/ThePrimeagen/refactoring.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;refactoring.nvim&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;The Refactoring library based off the Refactoring book by Martin Fowler&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux choose-tree</title>
    <id>https://waylonwalker.com/tmux-choose-tree/</id>
    <updated>2021-07-19T23:51:21Z</updated>
    <published>2021-07-19T23:51:21Z</published>
    <link href="https://waylonwalker.com/tmux-choose-tree/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/79Y-kqAiMpw</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/79Y-kqAiMpw&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/79Y-kqAiMpw&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Choose tree is a powerful tmux utility that provides a graphical interface to&#xA;preview all sessions, windows, and panes, move between them kill them, move&#xA;them and much more.&lt;/p&gt;&#xA;&lt;p&gt;The default keybinding&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key -T prefix s choose-tree -s&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;my preferred keybinding to open sessions and windows collapsed and Zoomed in.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key j choose-tree -swZ&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;From the man page.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;choose-tree &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-GNrswZ&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-F format&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-f filter&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-K key-format&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-O sort-order&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-t target-pane&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;template&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        Put a pane into tree mode, where a session, window or pane may be chosen interactively from a tree.  Each session, window or pane is shown on&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        one line.  A shortcut key is shown on the left in brackets allowing &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; immediate choice, or the tree may be navigated and an item chosen or&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        otherwise manipulated using the keys below.  -s starts with sessions collapsed and -w with windows collapsed.  -Z zooms the pane.  The follow‐&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        ing keys may be used in tree mode:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            Key    Function&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            Enter  Choose selected item&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            Up     Select previous item&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            Down   Select next item&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            +      Expand selected item&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            -      Collapse selected item&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            M-+    Expand all items&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            M--    Collapse all items&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            x      Kill selected item&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            X      Kill tagged items&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &amp;lt;      Scroll list of previews left&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &amp;gt;      Scroll list of previews right&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            C-s    Search by name&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            m      Set the marked pane&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            M      Clear the marked pane&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            n      Repeat last search&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            t      Toggle &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; item is tagged&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            T      Tag no items&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            C-t    Tag all items&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            :      Run a &lt;span class=&#34;nb&#34;&gt;command&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; each tagged item&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            f      Enter a format to filter items&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            H      Jump to the starting pane&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            O      Change sort field&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            r      Reverse sort order&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            v      Toggle preview&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            q      Exit mode&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        After a session, window or pane is chosen, ‘%%’ is replaced by the target in template and the result executed as a command.  If template is&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        not given, &lt;span class=&#34;s2&#34;&gt;&amp;#34;switch-client -t &amp;#39;%%&amp;#39;&amp;#34;&lt;/span&gt; is used.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        -O specifies the initial sort field: one of ‘index’, ‘name’, or ‘time’.  -r reverses the sort order.  -f specifies an initial filter: the fil‐&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        ter is a format - &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; it evaluates to zero, the item in the list is not shown, otherwise it is shown.  If a filter would lead to an empty list,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        it is ignored.  -F specifies the format &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; each item in the tree and -K a format &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; each shortcut key&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; both are evaluated once &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; each&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        line.  -N starts without the preview.  -G includes all sessions in any session groups in the tree rather than only the first.  This &lt;span class=&#34;nb&#34;&gt;command&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        works only &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; at least one client is attached.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/tmux-nav-2021/&#34; class=&#34;hoverlink&#34;&gt;https://waylonwalker.com/tmux-nav-2021/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux prefix</title>
    <id>https://waylonwalker.com/tmux-prefix/</id>
    <updated>2021-07-18T23:51:21Z</updated>
    <published>2021-07-18T23:51:21Z</published>
    <link href="https://waylonwalker.com/tmux-prefix/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/BMkpbfhbkKM</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/BMkpbfhbkKM&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/BMkpbfhbkKM&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The prefix key is an essential part of tmux, by default all of tmux’s&#xA;key-bindings sit behind a prefix.  This prefix is very similar to vim’s leader&#xA;key. It is common for folks to change the default &lt;code&gt;C-b&lt;/code&gt; (control b) to &lt;code&gt;C-a&lt;/code&gt; or&#xA;if they are a vim user something to match their vim leader key.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -g prefix C-Space&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; Space send-prefix&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A few of the essential default key-bindings.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;%      vertical split&#xA;&amp;#34;      horizontal split&#xA;d      detach&#xA;&#xA;up     select up one pane&#xA;down   select down one pane&#xA;right  select right one pane&#xA;left   select left one pane&#xA;&#xA;t      clock&#xA;o      swap panes&#xA;c      create window&#xA;n      next window&#xA;p      previous window&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;A more complete list of key-bindings can be found in this gist &lt;a href=&#34;https://gist.github.com/mzmonsour/8791835&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/gist.github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/gist.github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://gist.github.com/mzmonsour/8791835&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux splitting panes</title>
    <id>https://waylonwalker.com/tmux-splitting-panes/</id>
    <updated>2021-07-17T23:51:21Z</updated>
    <published>2021-07-17T23:51:21Z</published>
    <link href="https://waylonwalker.com/tmux-splitting-panes/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/kzgyiHap1nQ</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/kzgyiHap1nQ&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/kzgyiHap1nQ&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;splitting panes is a core feature of tmux.  It allows us to split the terminal&#xA;vertically or horizontally into new panes.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-s split-window -c &lt;span class=&#34;s1&#34;&gt;&amp;#39;#{pane_current_path}&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-v split-window -h -c &lt;span class=&#34;s1&#34;&gt;&amp;#39;#{pane_current_path}&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-X kill-pane&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;🗒️ note that  ‘#{pane_current_path}‘will keep the split in the same directory&#xA;as it’s parent, without this it will default to your home directory.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ laktak extrakto</title>
    <id>https://waylonwalker.com/laktak-extrakto/</id>
    <updated>2021-07-17T20:55:06Z</updated>
    <published>2021-07-17T20:55:06Z</published>
    <link href="https://waylonwalker.com/laktak-extrakto/" rel="alternate" type="text/html"></link>
    <summary type="text">I like laktak&#39;s project extrakto.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/laktak&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;laktak’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/laktak/extrakto&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;extrakto&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;extrakto for tmux - quickly select, copy/insert/complete text without a mouse&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Mar1cX kedro-toolkit</title>
    <id>https://waylonwalker.com/mar1cx-kedro-toolkit/</id>
    <updated>2021-07-17T13:42:19Z</updated>
    <published>2021-07-17T13:42:19Z</published>
    <link href="https://waylonwalker.com/mar1cx-kedro-toolkit/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out kedro-toolkit by Mar1cX. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/Mar1cX/kedro-toolkit&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-toolkit&lt;/a&gt; by &lt;a href=&#34;https://github.com/Mar1cX&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Mar1cX&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;Kedro Toolkit is a VSCode Extension for the Kedro Framework&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux last session</title>
    <id>https://waylonwalker.com/tmux-last-session/</id>
    <updated>2021-07-16T23:51:21Z</updated>
    <published>2021-07-16T23:51:21Z</published>
    <link href="https://waylonwalker.com/tmux-last-session/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/RB87EEnnMnU</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/RB87EEnnMnU&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/RB87EEnnMnU&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;An ultimate productivity key-binding in tmux is one to switch to the last session.  I use this to quickly get between sessions really quick.  Often I am working and need to lookup a quick note, or copy something into my notes, then get back to where I was quickly.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-b switch-client -l&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I think of this hub and spoke model, and use &lt;code&gt;last-session&lt;/code&gt; to quickly drive it.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/tmux-nav-hub-spoke.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/tmux-nav-hub-spoke.png&#34; alt=&#34;hub and spoke&#34;/ data-glightbox=&#34;description: hub and spoke&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux floating popups</title>
    <id>https://waylonwalker.com/tmux-floating-popups/</id>
    <updated>2021-07-15T23:51:21Z</updated>
    <published>2021-07-15T23:51:21Z</published>
    <link href="https://waylonwalker.com/tmux-floating-popups/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/2ZqFDsJywt8</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/2ZqFDsJywt8&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/2ZqFDsJywt8&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Tmux popups are actually floating windows that you can drag around the screen.  They always open in the middle (by default) when you open them, no matter where you leave them.&lt;/p&gt;&#xA;&lt;p&gt;Here are a couple of keybindings I use to open up popup windows.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; C-g display-popup -E &lt;span class=&#34;s2&#34;&gt;&amp;#34;ta ~/git&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-g display-popup -E &lt;span class=&#34;s2&#34;&gt;&amp;#34;tmux new-session -A -s scratch&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux popups</title>
    <id>https://waylonwalker.com/tmux-popups/</id>
    <updated>2021-07-14T23:51:21Z</updated>
    <published>2021-07-14T23:51:21Z</published>
    <link href="https://waylonwalker.com/tmux-popups/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/2I8fB28zfB4</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/2I8fB28zfB4&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/2I8fB28zfB4&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Tmux-popups are a great feature that is relatively new to tmux, many repos such&#xA;as the standard ubuntu repos do not have it.   Popups came in 3.2a, if your&#xA;package manager does not have it, you can follow the &lt;a href=&#34;https://github.com/tmux/tmux#installation&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux’s install&#xA;instructions&lt;/a&gt; to build from source.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# open a popup scratchpad&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-g display-popup -E &lt;span class=&#34;s2&#34;&gt;&amp;#34;tmux new-session -A -s scratch&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I use popups quite a bit in my workflow to ssh into another machine for a short&#xA;period, or make a new project with a template.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pysonDB pysonDB</title>
    <id>https://waylonwalker.com/pysondb-pysondb/</id>
    <updated>2021-07-14T18:11:37Z</updated>
    <published>2021-07-14T18:11:37Z</published>
    <link href="https://waylonwalker.com/pysondb-pysondb/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out pysonDB by pysonDB. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/pysonDB/pysonDB&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pysonDB&lt;/a&gt; by &lt;a href=&#34;https://github.com/pysonDB&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pysonDB&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;A Simple , ☁️ Lightweight ,  💪 Efficent JSON based database for 🐍 Python. PysonDB-V2 has been released ⬇️&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nvim-pack nvim-spectre</title>
    <id>https://waylonwalker.com/nvim-pack-nvim-spectre/</id>
    <updated>2021-07-09T19:05:59Z</updated>
    <published>2021-07-09T19:05:59Z</published>
    <link href="https://waylonwalker.com/nvim-pack-nvim-spectre/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across nvim-spectre from nvim-pack, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/nvim-pack/nvim-spectre&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-spectre&lt;/a&gt; from &lt;a href=&#34;https://github.com/nvim-pack&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-pack&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;Find the enemy and replace them with dark power.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Incremental Versioned Datasets in Kedro</title>
    <id>https://waylonwalker.com/kedro-incremental-versioned-datasets/</id>
    <updated>2021-07-08T11:12:25Z</updated>
    <published>2021-07-08T11:12:25Z</published>
    <link href="https://waylonwalker.com/kedro-incremental-versioned-datasets/" rel="alternate" type="text/html"></link>
    <summary type="text">Kedro versioned datasets can be mixed with incremental and partitioned datasets to do some timeseries analysis on how our dataset changes over time. Kedro is...</summary>
    <content type="html">&lt;p&gt;Kedro versioned datasets can be mixed with incremental and partitioned datasets&#xA;to do some timeseries analysis on how our dataset changes over time.  Kedro is&#xA;a very extensible and composible framework, that allows us to build solutions&#xA;from the individual components that it provides.  This article is a great&#xA;example of how you can combine these components in unique ways to achieve some&#xA;powerful results with very little work.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/what-is-kedro/&#34; class=&#34;wikilink&#34; data-title=&#34;What is Kedro&#34; data-description=&#34;Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...&#34; data-date=&#34;2021-08-17&#34; data-preview=&#34;Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...&#34;&gt;What is Kedro&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;👆 Unsure what kedro is?  Check out this post.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;how-does-our-dataset-change-over-time&#34;&gt;How does our dataset change over time?? &lt;a href=&#34;#how-does-our-dataset-change-over-time&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This was a question presented to me at work.  We had some plots being produces&#xA;as the output of our pipeline and the user wanted the ability to compare&#xA;results over time.  Luckily this was asked early in the project so we were able&#xA;to proactively setup versioning on the right datasets.&lt;/p&gt;&#xA;&lt;p&gt;To enable this all we needed to do now was to add &lt;code&gt;versioned: true&lt;/code&gt; and we will&#xA;be able to compare results over time.  Yes kedro makes it that easy to setup.&lt;/p&gt;&#xA;&lt;h2 id=&#34;set-up-a-project&#34;&gt;set up a project &lt;a href=&#34;#set-up-a-project&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Set up a new project just as usual.  &lt;strong&gt;note&lt;/strong&gt; I like using pipx for&#xA;global cli packages.  You can pick a specific version of kedro or opt for the&#xA;latest while simply globally installing kedro and running kedro new is purely&#xA;dependent on the last time you chose to update kedro.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install pipx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx run kedro new&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; versioned-partitioned-kedro-example&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda create -n versioned-partitioned-kedro-example &lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;3.8  -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda activate versioned-partitioned-kedro-example&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install kedro&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git init&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;init project from pipx run kedro new&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I called my project versioned-partitioned-kedro-example. You can call your&#xA;project whatever you like.  If you try to use some special characters where&#xA;they don’t belong, kedro will catch you.  Under the hood, kedro is using a&#xA;library called &lt;code&gt;cookiecutter&lt;/code&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;⚠️ Please do not skip out on using a &lt;a href=&#34;/virtual-environment/&#34; class=&#34;glossary-term&#34; title=&#34;Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...&#34;&gt;virtual environment&lt;/a&gt;. You may use&#xA;whichever virtual environment tool you prefer, but please do not skip out.&#xA;Wrecking a running project for learning is not fun.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;update-dependencies&#34;&gt;update dependencies &lt;a href=&#34;#update-dependencies&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I popped open my dependencies, added &lt;code&gt;kedro[pandas]&lt;/code&gt; and &lt;code&gt;find-kedro&lt;/code&gt;. Since those are extra packages our example will require.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;aiohttp&#xA;black==21.5b1&#xA;find-kedro&#xA;flake8&amp;gt;=3.7.9, &amp;lt;4.0&#xA;ipython&#xA;isort~=5.0&#xA;jupyter_client&amp;gt;=5.1, &amp;lt;7.0&#xA;jupyterlab~=3.0&#xA;jupyter~=1.0&#xA;kedro-telemetry~=0.1.0&#xA;kedro==0.17.4&#xA;kedro[pandas]&#xA;nbstripout~=0.4&#xA;pytest-cov~=2.5&#xA;pytest-mock&amp;gt;=1.7.1, &amp;lt;2.0&#xA;pytest~=6.2&#xA;requests&#xA;wheel&amp;gt;=0.35, &amp;lt;0.37&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;note&lt;/strong&gt; I created &lt;code&gt;find-kedro&lt;/code&gt;, and I like using it to create my&#xA;pipeline object.  Think of how pytest automatically picks up everything named&#xA;&lt;code&gt;test&lt;/code&gt;, &lt;code&gt;find-kedro&lt;/code&gt; does the same thing for kedro.  It picks up everything&#xA;with &lt;code&gt;node&lt;/code&gt; or &lt;code&gt;pipeline&lt;/code&gt; in the name and creates pipelines out of it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;install-new-dependencies&#34;&gt;Install new dependencies &lt;a href=&#34;#install-new-dependencies&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;After adding our additional dependencies to the &lt;code&gt;requirements.in&lt;/code&gt;, we&#xA;can tell kedro to install everything and compile the dependencies.  Behind&#xA;the scenes &lt;code&gt;--build-reqs&lt;/code&gt; uses a library called &lt;code&gt;pip-compile&lt;/code&gt; to create a&#xA;&lt;code&gt;requirements.txt&lt;/code&gt; file with hard pinned dependencies, which is ideal for&#xA;creating reproducible projects.  You and your future colleagues may not thank&#xA;you for this, but they sure as heck won’t be cursing your name when they can’t&#xA;get the project to run.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro install --build-reqs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;added additional dependencies&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;create-a-node&#34;&gt;create a node &lt;a href=&#34;#create-a-node&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;For this example, we need a node to do much.  This node will&#xA;pass the &lt;code&gt;cars.csv&lt;/code&gt; from a URL to a &lt;code&gt;parquet&lt;/code&gt; file.  I am going to use a&#xA;lambda to build my identity function inline.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# pipelines/cars_nodes.py&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.pipeline&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;lambda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_cars&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;outputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;int_cars&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;create_int_cars&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;🗒️ &lt;strong&gt;note&lt;/strong&gt;&lt;code&gt;find-kedro&amp;#39; will automatically pick up these nodes for us after we set up our &lt;/code&gt;pipeline_registry.py`.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;add create_int_cars node&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;implement-find-kedro&#34;&gt;implement find-kedro &lt;a href=&#34;#implement-find-kedro&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Next, we need to tell kedro where our nodes are.  This is where &lt;code&gt;find-kedro&lt;/code&gt;&#xA;comes in.  Once we point to the directory where our modules of&#xA;nodes/pipelines are, it creates the pipelines dictionary for us automatically.  It will even separate each module into a pipeline and stitch them all into one default pipeline.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# pipeline_registry.py&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Project pipelines.&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;typing&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Dict&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pathlib&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.pipeline&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;find_kedro&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;find_kedro&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;register_pipelines&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Register the project&amp;#39;s pipelines.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    Returns:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        A mapping from a pipeline name to a &amp;#34;Pipeline &amp;#34;object.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;pipeline_dir&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;vm&#34;&gt;__file__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parent&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pipelines&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;find_kedro&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline_dir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;🗒️ This is very similar to the default ` pipeline_registry’except the last two&#xA;lines.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;implement find-kedro&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;create-a-baseline-catalog&#34;&gt;create a baseline catalog &lt;a href=&#34;#create-a-baseline-catalog&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Once we have a pipeline setup, the kedro cli can automatically fill in missing&#xA;catalog entries with  &lt;code&gt;MemoryDataSet&lt;/code&gt;’s. Thus, using the cli helps consistently scaffold the&#xA;catalog and ensure we don’t end up with a typo in our&#xA;dataset name.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro catalog create --pipeline cars_nodes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Kedro will kick out the following catalog file to &lt;code&gt;base/catalog/cars_nodes.yml&lt;/code&gt;&#xA;for us to get started with.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;raw_cars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;MemoryDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;int_cars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;MemoryDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;🔥 use the kedro cli to fill in any missing datasets from the automatically&#xA;catalog.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;make-a-versioned-dataset&#34;&gt;make a versioned dataset &lt;a href=&#34;#make-a-versioned-dataset&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Kedro has scaffolded &lt;code&gt;MemoryDataSet&lt;/code&gt; ’s for us.  We will convert them to the&#xA;appropriate dataset type and turn on versioning for our &lt;code&gt;int&lt;/code&gt; layer, which is&#xA;the first point we save in our environment.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;raw_cars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://waylonwalker.com/cars.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;int_cars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.ParquetDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/int_cars.parquet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;versioned&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Commit your changes to the catalog.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;create catalog&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;run-the-pipeline&#34;&gt;run the pipeline &lt;a href=&#34;#run-the-pipeline&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Once we have the nodes and catalog setup, we can run the pipeline a few times&#xA;to get some versioned data.  Each time we run, it will save a new version inside&#xA;the &lt;code&gt;int_cars.parquet&lt;/code&gt; directory.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro run&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro run&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro run&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro run&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro run&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;🗒️ we put our data in the data directory. By default, this directory is&#xA;included in the &lt;code&gt;.gitignore&lt;/code&gt; and will not be picked up by &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;inspect-the-data&#34;&gt;inspect the data &lt;a href=&#34;#inspect-the-data&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Listing the files in &lt;code&gt;data/int_cars.parquet&lt;/code&gt; shows that I now have five different&#xA;datasets available.  I can load old ones, but by default, kedro will load the&#xA;latest one.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls data/int_cars.parquet&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2021-07-05T15.24.53.164Z&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2021-07-05T15.29.56.144Z&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2021-07-05T15.30.23.101Z&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2021-07-05T15.30.26.555Z&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2021-07-05T15.31.12.688Z&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;🗒️ kedro sets the version at the timestamp that the session starts.  All&#xA;datasets created within the same run will have the same version.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;stack-on-an-incremental-dataset&#34;&gt;stack on an incremental dataset &lt;a href=&#34;#stack-on-an-incremental-dataset&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is where things get interesting. Kedro comes with an incremental dataset&#xA;that will load all of the files from a particular directory into a dictionary&#xA;where the keys are the filename of the dataset.  To load up all datasets into&#xA;this dictionary all we need to do is add a new catalog entry that is a  &lt;code&gt;type: PartitionedDataSet&lt;/code&gt;, with a &lt;code&gt;path&lt;/code&gt; pointing to the same place as the original,&#xA;and a &lt;code&gt;dataset&lt;/code&gt; type the same as the original.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;int_cars_partitioned&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;PartitionedDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;dataset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.ParquetDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/int_cars.parquet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;catalog-list&#34;&gt;catalog list &lt;a href=&#34;#catalog-list&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Listing the catalog entries confirms that we have successfully added our new &lt;code&gt;PartitionedDataSet&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_cars&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;int_cars&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;int_cars_partitioned&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;parameters&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;loading-an-incremental-dataset&#34;&gt;loading an incremental dataset &lt;a href=&#34;#loading-an-incremental-dataset&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now we can easily load the datasets from every run we just did into a single&#xA;dictionary, simply by running &lt;code&gt;context.catalog.load(&amp;#39;int_cars_incremental&amp;#39;)&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;19&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;int_cars_incremental&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2021&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;07&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;40&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;534&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data_catalog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;INFO&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Loading&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;int_cars_incremental&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;`&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IncrementalDataSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;19&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;2021-07-05T15.29.56.144Z/int_cars.parquet&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;              &lt;span class=&#34;n&#34;&gt;Unnamed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;mpg&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;cyl&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;disp&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;hp&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;drat&lt;/span&gt;     &lt;span class=&#34;n&#34;&gt;wt&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;qsec&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;vs&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;am&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;gear&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;carb&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;             &lt;span class=&#34;n&#34;&gt;Mazda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;RX4&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;21.0&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;160.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;110&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.90&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.620&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;16.46&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;         &lt;span class=&#34;n&#34;&gt;Mazda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;RX4&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Wag&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;21.0&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;160.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;110&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.90&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.875&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.02&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;            &lt;span class=&#34;n&#34;&gt;Datsun&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;710&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;22.8&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;108.0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;93&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.85&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.320&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.61&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;Hornet&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Drive&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;21.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;258.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;110&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.08&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.215&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;19.44&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;n&#34;&gt;Hornet&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Sportabout&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.7&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;360.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;175&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.15&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.440&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.02&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;               &lt;span class=&#34;n&#34;&gt;Valiant&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.1&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;225.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;105&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.76&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.460&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;20.22&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;            &lt;span class=&#34;n&#34;&gt;Duster&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;360&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;14.3&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;360.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;245&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.21&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.570&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.84&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;7&lt;/span&gt;             &lt;span class=&#34;n&#34;&gt;Merc&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;240&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;24.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;146.7&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;62&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.69&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.190&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;20.00&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;              &lt;span class=&#34;n&#34;&gt;Merc&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;230&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;22.8&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;140.8&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;95&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.92&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.150&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;22.90&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;9&lt;/span&gt;              &lt;span class=&#34;n&#34;&gt;Merc&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;280&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;19.2&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;167.6&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;123&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.92&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.440&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.30&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;            &lt;span class=&#34;n&#34;&gt;Merc&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;280&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.8&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;167.6&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;123&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.92&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.440&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.90&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;           &lt;span class=&#34;n&#34;&gt;Merc&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;450&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SE&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;16.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;275.8&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;180&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.07&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.070&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.40&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;           &lt;span class=&#34;n&#34;&gt;Merc&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;450&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SL&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.3&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;275.8&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;180&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.07&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.730&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.60&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt;          &lt;span class=&#34;n&#34;&gt;Merc&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;450&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SLC&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.2&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;275.8&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;180&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.07&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.780&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.00&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;Cadillac&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Fleetwood&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;10.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;472.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;205&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.93&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;5.250&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.98&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;Lincoln&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Continental&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;10.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;460.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;215&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.00&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;5.424&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.82&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;Chrysler&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Imperial&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;14.7&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;440.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;230&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.23&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;5.345&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.42&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;             &lt;span class=&#34;n&#34;&gt;Fiat&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;128&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;32.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;78.7&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;66&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.08&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.200&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;19.47&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt;          &lt;span class=&#34;n&#34;&gt;Honda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Civic&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;30.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;75.7&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;52&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.93&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;1.615&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.52&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;19&lt;/span&gt;       &lt;span class=&#34;n&#34;&gt;Toyota&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Corolla&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;33.9&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;71.1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;65&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.22&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;1.835&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;19.90&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;Toyota&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Corona&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;21.5&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;120.1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;97&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.70&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.465&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;20.01&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;21&lt;/span&gt;     &lt;span class=&#34;n&#34;&gt;Dodge&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Challenger&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.5&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;318.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;150&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.76&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.520&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;16.87&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt;          &lt;span class=&#34;n&#34;&gt;AMC&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Javelin&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.2&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;304.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;150&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.15&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.435&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.30&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;23&lt;/span&gt;           &lt;span class=&#34;n&#34;&gt;Camaro&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Z28&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;13.3&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;350.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;245&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.73&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.840&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.41&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;24&lt;/span&gt;     &lt;span class=&#34;n&#34;&gt;Pontiac&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Firebird&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;19.2&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;400.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;175&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.08&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.845&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.05&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;25&lt;/span&gt;            &lt;span class=&#34;n&#34;&gt;Fiat&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;X1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;9&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;27.3&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;79.0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;66&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.08&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;1.935&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.90&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;26&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;Porsche&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;914&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;26.0&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;120.3&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;91&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.43&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.140&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;16.70&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;27&lt;/span&gt;         &lt;span class=&#34;n&#34;&gt;Lotus&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Europa&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;30.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;95.1&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;113&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.77&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;1.513&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;16.90&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;28&lt;/span&gt;       &lt;span class=&#34;n&#34;&gt;Ford&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pantera&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;L&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.8&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;351.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;264&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.22&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.170&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;14.50&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;29&lt;/span&gt;         &lt;span class=&#34;n&#34;&gt;Ferrari&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Dino&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;19.7&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;145.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;175&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.62&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.770&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.50&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;Maserati&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Bora&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.0&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;301.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;335&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.54&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.570&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;14.60&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;31&lt;/span&gt;           &lt;span class=&#34;n&#34;&gt;Volvo&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;142&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;21.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;121.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;109&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.11&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.780&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.60&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2021-07-05T15.30.23.101Z/int_cars.parquet&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;              &lt;span class=&#34;n&#34;&gt;Unnamed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;mpg&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;cyl&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;disp&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;hp&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;drat&lt;/span&gt;     &lt;span class=&#34;n&#34;&gt;wt&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;qsec&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;vs&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;am&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;gear&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;carb&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;             &lt;span class=&#34;n&#34;&gt;Mazda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;RX4&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;21.0&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;160.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;110&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.90&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.620&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;16.46&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;         &lt;span class=&#34;n&#34;&gt;Mazda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;RX4&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Wag&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;21.0&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;160.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;110&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.90&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.875&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.02&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;            &lt;span class=&#34;n&#34;&gt;Datsun&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;710&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;22.8&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;108.0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;93&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.85&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.320&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.61&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;Hornet&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Drive&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;21.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;258.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;110&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.08&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.215&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;19.44&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;n&#34;&gt;Hornet&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Sportabout&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.7&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;360.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;175&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.15&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.440&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.02&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;               &lt;span class=&#34;n&#34;&gt;Valiant&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.1&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;225.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;105&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.76&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.460&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;20.22&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;            &lt;span class=&#34;n&#34;&gt;Duster&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;360&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;14.3&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;360.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;245&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.21&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.570&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.84&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;7&lt;/span&gt;             &lt;span class=&#34;n&#34;&gt;Merc&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;240&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;24.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;146.7&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;62&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.69&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.190&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;20.00&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;              &lt;span class=&#34;n&#34;&gt;Merc&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;230&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;22.8&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;140.8&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;95&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.92&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.150&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;22.90&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;9&lt;/span&gt;              &lt;span class=&#34;n&#34;&gt;Merc&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;280&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;19.2&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;167.6&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;123&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.92&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.440&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.30&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;            &lt;span class=&#34;n&#34;&gt;Merc&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;280&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.8&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;167.6&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;123&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.92&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.440&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.90&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;           &lt;span class=&#34;n&#34;&gt;Merc&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;450&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SE&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;16.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;275.8&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;180&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.07&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.070&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.40&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;           &lt;span class=&#34;n&#34;&gt;Merc&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;450&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SL&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.3&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;275.8&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;180&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.07&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.730&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.60&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt;          &lt;span class=&#34;n&#34;&gt;Merc&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;450&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SLC&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.2&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;275.8&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;180&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.07&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.780&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.00&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;Cadillac&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Fleetwood&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;10.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;472.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;205&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.93&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;5.250&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.98&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;Lincoln&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Continental&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;10.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;460.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;215&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.00&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;5.424&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.82&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;Chrysler&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Imperial&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;14.7&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;440.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;230&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.23&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;5.345&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.42&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;             &lt;span class=&#34;n&#34;&gt;Fiat&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;128&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;32.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;78.7&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;66&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.08&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.200&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;19.47&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt;          &lt;span class=&#34;n&#34;&gt;Honda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Civic&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;30.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;75.7&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;52&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.93&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;1.615&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.52&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;19&lt;/span&gt;       &lt;span class=&#34;n&#34;&gt;Toyota&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Corolla&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;33.9&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;71.1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;65&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.22&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;1.835&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;19.90&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;Toyota&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Corona&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;21.5&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;120.1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;97&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.70&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.465&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;20.01&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;21&lt;/span&gt;     &lt;span class=&#34;n&#34;&gt;Dodge&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Challenger&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.5&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;318.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;150&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.76&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.520&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;16.87&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt;          &lt;span class=&#34;n&#34;&gt;AMC&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Javelin&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.2&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;304.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;150&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.15&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.435&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.30&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;23&lt;/span&gt;           &lt;span class=&#34;n&#34;&gt;Camaro&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Z28&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;13.3&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;350.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;245&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.73&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.840&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.41&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;24&lt;/span&gt;     &lt;span class=&#34;n&#34;&gt;Pontiac&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Firebird&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;19.2&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;400.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;175&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.08&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.845&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.05&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;25&lt;/span&gt;            &lt;span class=&#34;n&#34;&gt;Fiat&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;X1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;9&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;27.3&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;79.0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;66&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.08&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;1.935&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.90&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;26&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;Porsche&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;914&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;26.0&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;120.3&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;91&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.43&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.140&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;16.70&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;27&lt;/span&gt;         &lt;span class=&#34;n&#34;&gt;Lotus&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Europa&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;30.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;95.1&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;113&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.77&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;1.513&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;16.90&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;28&lt;/span&gt;       &lt;span class=&#34;n&#34;&gt;Ford&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pantera&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;L&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.8&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;351.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;264&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.22&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.170&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;14.50&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;29&lt;/span&gt;         &lt;span class=&#34;n&#34;&gt;Ferrari&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Dino&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;19.7&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;145.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;175&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.62&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.770&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.50&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;Maserati&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Bora&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.0&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;301.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;335&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.54&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.570&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;14.60&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;31&lt;/span&gt;           &lt;span class=&#34;n&#34;&gt;Volvo&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;142&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;21.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;121.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;109&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.11&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.780&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.60&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2021-07-05T15.30.26.555Z/int_cars.parquet&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;              &lt;span class=&#34;n&#34;&gt;Unnamed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;mpg&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;cyl&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;disp&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;hp&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;drat&lt;/span&gt;     &lt;span class=&#34;n&#34;&gt;wt&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;qsec&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;vs&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;am&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;gear&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;carb&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;             &lt;span class=&#34;n&#34;&gt;Mazda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;RX4&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;21.0&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;160.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;110&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.90&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.620&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;16.46&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;         &lt;span class=&#34;n&#34;&gt;Mazda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;RX4&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Wag&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;21.0&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;160.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;110&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.90&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.875&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.02&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;            &lt;span class=&#34;n&#34;&gt;Datsun&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;710&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;22.8&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;108.0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;93&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.85&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.320&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.61&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;Hornet&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Drive&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;21.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;258.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;110&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.08&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.215&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;19.44&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;n&#34;&gt;Hornet&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Sportabout&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.7&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;360.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;175&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.15&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.440&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.02&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;               &lt;span class=&#34;n&#34;&gt;Valiant&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.1&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;225.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;105&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.76&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.460&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;20.22&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;            &lt;span class=&#34;n&#34;&gt;Duster&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;360&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;14.3&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;360.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;245&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.21&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.570&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.84&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;7&lt;/span&gt;             &lt;span class=&#34;n&#34;&gt;Merc&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;240&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;24.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;146.7&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;62&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.69&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.190&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;20.00&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;              &lt;span class=&#34;n&#34;&gt;Merc&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;230&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;22.8&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;140.8&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;95&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.92&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.150&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;22.90&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;9&lt;/span&gt;              &lt;span class=&#34;n&#34;&gt;Merc&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;280&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;19.2&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;167.6&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;123&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.92&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.440&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.30&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;            &lt;span class=&#34;n&#34;&gt;Merc&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;280&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.8&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;167.6&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;123&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.92&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.440&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.90&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;           &lt;span class=&#34;n&#34;&gt;Merc&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;450&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SE&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;16.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;275.8&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;180&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.07&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.070&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.40&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;           &lt;span class=&#34;n&#34;&gt;Merc&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;450&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SL&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.3&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;275.8&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;180&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.07&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.730&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.60&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt;          &lt;span class=&#34;n&#34;&gt;Merc&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;450&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SLC&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.2&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;275.8&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;180&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.07&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.780&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.00&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;Cadillac&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Fleetwood&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;10.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;472.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;205&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.93&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;5.250&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.98&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;Lincoln&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Continental&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;10.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;460.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;215&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.00&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;5.424&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.82&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;Chrysler&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Imperial&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;14.7&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;440.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;230&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.23&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;5.345&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.42&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;             &lt;span class=&#34;n&#34;&gt;Fiat&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;128&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;32.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;78.7&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;66&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.08&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.200&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;19.47&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt;          &lt;span class=&#34;n&#34;&gt;Honda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Civic&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;30.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;75.7&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;52&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.93&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;1.615&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.52&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;19&lt;/span&gt;       &lt;span class=&#34;n&#34;&gt;Toyota&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Corolla&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;33.9&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;71.1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;65&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.22&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;1.835&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;19.90&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;Toyota&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Corona&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;21.5&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;120.1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;97&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.70&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.465&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;20.01&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;21&lt;/span&gt;     &lt;span class=&#34;n&#34;&gt;Dodge&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Challenger&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.5&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;318.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;150&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.76&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.520&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;16.87&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt;          &lt;span class=&#34;n&#34;&gt;AMC&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Javelin&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.2&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;304.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;150&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.15&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.435&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.30&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;23&lt;/span&gt;           &lt;span class=&#34;n&#34;&gt;Camaro&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Z28&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;13.3&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;350.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;245&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.73&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.840&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.41&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;24&lt;/span&gt;     &lt;span class=&#34;n&#34;&gt;Pontiac&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Firebird&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;19.2&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;400.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;175&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.08&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.845&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.05&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;25&lt;/span&gt;            &lt;span class=&#34;n&#34;&gt;Fiat&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;X1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;9&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;27.3&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;79.0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;66&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.08&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;1.935&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.90&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;26&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;Porsche&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;914&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;26.0&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;120.3&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;91&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.43&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.140&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;16.70&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;27&lt;/span&gt;         &lt;span class=&#34;n&#34;&gt;Lotus&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Europa&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;30.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;95.1&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;113&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.77&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;1.513&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;16.90&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;28&lt;/span&gt;       &lt;span class=&#34;n&#34;&gt;Ford&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pantera&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;L&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.8&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;351.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;264&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.22&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.170&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;14.50&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;29&lt;/span&gt;         &lt;span class=&#34;n&#34;&gt;Ferrari&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Dino&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;19.7&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;145.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;175&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.62&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.770&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.50&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;Maserati&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Bora&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.0&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;301.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;335&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.54&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.570&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;14.60&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;31&lt;/span&gt;           &lt;span class=&#34;n&#34;&gt;Volvo&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;142&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;21.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;121.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;109&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.11&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.780&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.60&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2021-07-05T15.31.12.688Z/int_cars.parquet&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;              &lt;span class=&#34;n&#34;&gt;Unnamed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;mpg&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;cyl&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;disp&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;hp&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;drat&lt;/span&gt;     &lt;span class=&#34;n&#34;&gt;wt&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;qsec&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;vs&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;am&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;gear&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;carb&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;             &lt;span class=&#34;n&#34;&gt;Mazda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;RX4&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;21.0&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;160.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;110&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.90&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.620&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;16.46&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;         &lt;span class=&#34;n&#34;&gt;Mazda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;RX4&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Wag&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;21.0&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;160.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;110&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.90&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.875&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.02&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;            &lt;span class=&#34;n&#34;&gt;Datsun&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;710&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;22.8&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;108.0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;93&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.85&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.320&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.61&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;Hornet&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Drive&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;21.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;258.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;110&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.08&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.215&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;19.44&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;n&#34;&gt;Hornet&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Sportabout&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.7&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;360.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;175&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.15&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.440&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.02&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;               &lt;span class=&#34;n&#34;&gt;Valiant&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.1&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;225.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;105&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.76&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.460&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;20.22&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;            &lt;span class=&#34;n&#34;&gt;Duster&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;360&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;14.3&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;360.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;245&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.21&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.570&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.84&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;7&lt;/span&gt;             &lt;span class=&#34;n&#34;&gt;Merc&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;240&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;24.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;146.7&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;62&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.69&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.190&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;20.00&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;              &lt;span class=&#34;n&#34;&gt;Merc&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;230&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;22.8&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;140.8&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;95&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.92&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.150&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;22.90&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;9&lt;/span&gt;              &lt;span class=&#34;n&#34;&gt;Merc&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;280&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;19.2&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;167.6&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;123&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.92&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.440&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.30&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;            &lt;span class=&#34;n&#34;&gt;Merc&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;280&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;C&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.8&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;167.6&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;123&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.92&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.440&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.90&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;           &lt;span class=&#34;n&#34;&gt;Merc&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;450&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SE&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;16.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;275.8&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;180&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.07&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.070&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.40&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;           &lt;span class=&#34;n&#34;&gt;Merc&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;450&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SL&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.3&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;275.8&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;180&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.07&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.730&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.60&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;13&lt;/span&gt;          &lt;span class=&#34;n&#34;&gt;Merc&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;450&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SLC&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.2&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;275.8&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;180&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.07&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.780&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.00&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;14&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;Cadillac&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Fleetwood&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;10.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;472.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;205&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.93&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;5.250&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.98&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;Lincoln&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Continental&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;10.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;460.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;215&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.00&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;5.424&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.82&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;    &lt;span class=&#34;n&#34;&gt;Chrysler&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Imperial&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;14.7&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;440.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;230&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.23&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;5.345&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.42&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;             &lt;span class=&#34;n&#34;&gt;Fiat&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;128&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;32.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;78.7&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;66&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.08&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.200&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;19.47&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt;          &lt;span class=&#34;n&#34;&gt;Honda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Civic&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;30.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;75.7&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;52&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.93&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;1.615&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.52&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;19&lt;/span&gt;       &lt;span class=&#34;n&#34;&gt;Toyota&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Corolla&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;33.9&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;71.1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;65&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.22&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;1.835&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;19.90&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;Toyota&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Corona&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;21.5&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;120.1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;97&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.70&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.465&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;20.01&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;21&lt;/span&gt;     &lt;span class=&#34;n&#34;&gt;Dodge&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Challenger&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.5&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;318.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;150&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.76&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.520&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;16.87&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt;          &lt;span class=&#34;n&#34;&gt;AMC&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Javelin&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.2&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;304.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;150&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.15&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.435&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.30&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;23&lt;/span&gt;           &lt;span class=&#34;n&#34;&gt;Camaro&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Z28&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;13.3&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;350.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;245&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.73&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.840&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.41&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;24&lt;/span&gt;     &lt;span class=&#34;n&#34;&gt;Pontiac&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Firebird&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;19.2&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;400.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;175&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.08&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.845&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;17.05&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;25&lt;/span&gt;            &lt;span class=&#34;n&#34;&gt;Fiat&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;X1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;9&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;27.3&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;79.0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;66&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.08&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;1.935&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.90&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;26&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;Porsche&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;914&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;26.0&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;120.3&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;91&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.43&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.140&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;16.70&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;27&lt;/span&gt;         &lt;span class=&#34;n&#34;&gt;Lotus&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Europa&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;30.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;   &lt;span class=&#34;mf&#34;&gt;95.1&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;113&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.77&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;1.513&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;16.90&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;28&lt;/span&gt;       &lt;span class=&#34;n&#34;&gt;Ford&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pantera&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;L&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.8&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;351.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;264&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.22&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.170&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;14.50&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;29&lt;/span&gt;         &lt;span class=&#34;n&#34;&gt;Ferrari&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Dino&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;19.7&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;145.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;175&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.62&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.770&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.50&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;        &lt;span class=&#34;n&#34;&gt;Maserati&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Bora&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;15.0&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;301.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;335&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.54&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;3.570&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;14.60&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;mi&#34;&gt;31&lt;/span&gt;           &lt;span class=&#34;n&#34;&gt;Volvo&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;142&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;E&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;21.4&lt;/span&gt;    &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;121.0&lt;/span&gt;  &lt;span class=&#34;mi&#34;&gt;109&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;4.11&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;2.780&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;18.60&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;     &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;👆 notice that incremental datasets are all loaded for you, its a dict of &lt;code&gt;filepath:dataset&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;stack-on-a-partitioned-dataset&#34;&gt;stack on a partitioned dataset &lt;a href=&#34;#stack-on-a-partitioned-dataset&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let’s take a look at a similar type of dataset called &lt;code&gt;PartitionedDataSet&lt;/code&gt;.  We&#xA;can add it to the catalog in a very similar way to how we added the&#xA;&lt;code&gt;IncrementalDataSet&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;int_cars_incremental&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;IncrementalDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;dataset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.ParquetDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/int_cars.parquet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;loading-a-partitioned-dataset&#34;&gt;loading a partitioned dataset &lt;a href=&#34;#loading-a-partitioned-dataset&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Note that we get a dict with the same keys as before, but this time the&#xA;values are a load function rather than loaded data.  Partitioned datasets can be helpful if&#xA;you are operating on datasets that take up more memory than you have available.&#xA;In our case of coupling this with versioned datasets, its likely to grow quite&#xA;large, so &lt;code&gt;PartitionedDataSet&lt;/code&gt; ’s are likely a better option for this use.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;int_cars_partitioned&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2021&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;07&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;31&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;253&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data_catalog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;INFO&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Loading&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;int_cars_partitioned&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;`&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PartitionedDataSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;2021-07-05T15.29.56.144Z/int_cars.parquet&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bound&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;method&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;AbstractVersionedDataSet&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extras&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datasets&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pandas&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parquet_dataset&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ParquetDataSet&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;object&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0x7f4bb1570820&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2021-07-05T15.30.23.101Z/int_cars.parquet&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bound&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;method&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;AbstractVersionedDataSet&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extras&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datasets&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pandas&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parquet_dataset&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ParquetDataSet&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;object&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0x7f4bb1570850&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2021-07-05T15.30.26.555Z/int_cars.parquet&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bound&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;method&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;AbstractVersionedDataSet&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extras&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datasets&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pandas&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parquet_dataset&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ParquetDataSet&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;object&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0x7f4bb1570910&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2021-07-05T15.31.12.688Z/int_cars.parquet&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bound&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;method&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;AbstractVersionedDataSet&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extras&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datasets&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pandas&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parquet_dataset&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ParquetDataSet&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;object&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;at&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0x7f4bb15709a0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;incremental-vs-partitioned&#34;&gt;incremental vs. partitioned &lt;a href=&#34;#incremental-vs-partitioned&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;IncrementalDataSet&lt;/code&gt; ’s and &lt;code&gt;PartitionedDataSet&lt;/code&gt; ’s are very similar as they give&#xA;you access to a whole directory of data that uses the same underlying dataset&#xA;loader.  The significant difference is whether you want your data pre-loaded or if&#xA;you want to load and dispose of it as you iterate over it.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;incremental loads the data&lt;/li&gt;&#xA;&lt;li&gt;partitioned give a load function&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;creating-nodes-with-partitioned-datasets&#34;&gt;creating nodes with partitioned datasets &lt;a href=&#34;#creating-nodes-with-partitioned-datasets&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let’s create a node with this &lt;code&gt;PartitionedDataSet&lt;/code&gt; to collect stats on our&#xA;dataset over time.  This node does a dict comprehension to get the length of&#xA;each version that we pulled.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;timeseries_partitioned&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;car&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;car&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cars&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;timeseries_partitioned&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;int_cars_partitioned&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;outputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;int_cars_timeseries_partitioned&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;create_int_cars_timeseries_partitioned&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;🗒️ note that inside of the dict comprehension car is a load function that we need to call.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;creating-nodes-with-incremental-datasets&#34;&gt;creating nodes with incremental datasets &lt;a href=&#34;#creating-nodes-with-incremental-datasets&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Doing the same node with our &lt;code&gt;IncrementalDataSet&lt;/code&gt; looks very similar, except&#xA;this time car is loaded data inside of the dict comprehension, not a function&#xA;that we need to call.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;timeseries_incremental&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;car&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;car&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cars&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;timeseries_incremental&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;int_cars_incremental&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;outputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;int_cars_timeseries_incremental&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;create_int_cars_timeseries_incremental&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;more-catalog-entries&#34;&gt;More catalog entries &lt;a href=&#34;#more-catalog-entries&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;After adding those nodes, we can add the catalog entries again with the command&#xA;line.  This will not overwrite any of the datasets we just created. It will only&#xA;add to it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro catalog create --pipeline cars_nodes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;int_cars_timeseries_partitioned&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;MemoryDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;int_cars_timeseries_incremental&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;MemoryDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;int_cars_timeseries_partitioned&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pickle.PickleDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/int_cars_timeseries_partitioned.parquet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;int_cars_timeseries_incremental&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pickle.PickleDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/int_cars_timeseries_incremental.parquet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;loading-the-new-datasets&#34;&gt;Loading the new datasets &lt;a href=&#34;#loading-the-new-datasets&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Loading the two dtasets that we just created show that we have the ended up&#xA;with the same result using both incremental and partitioned datasets.  This&#xA;result is a dictionary of filepaths mapped to the size of the dataset.  Since&#xA;the default filepaths are timestamps we could start doing some time series&#xA;analysis to see how our dataset is changing over time.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;int_cars_timeseries_incremental&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2021&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;07&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;00&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;55&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;014&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data_catalog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;INFO&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Loading&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;int_cars_timeseries_incremental&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;`&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PickleDataSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;2021-07-05T15.29.56.144Z/int_cars.parquet&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2021-07-05T15.30.23.101Z/int_cars.parquet&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2021-07-05T15.30.26.555Z/int_cars.parquet&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2021-07-05T15.31.12.688Z/int_cars.parquet&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2021-07-05T16.43.43.088Z/int_cars.parquet&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;33&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;int_cars_timeseries_partitioned&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2021&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;07&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;05&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;01&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;03&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;223&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data_catalog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;INFO&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Loading&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;int_cars_timeseries_partitioned&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;`&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PickleDataSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;33&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;2021-07-05T15.29.56.144Z/int_cars.parquet&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2021-07-05T15.30.23.101Z/int_cars.parquet&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2021-07-05T15.30.26.555Z/int_cars.parquet&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2021-07-05T15.31.12.688Z/int_cars.parquet&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2021-07-05T16.43.43.088Z/int_cars.parquet&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;2021-07-05T16.50.46.686Z/int_cars.parquet&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/kedro-pickle/&#34; class=&#34;wikilink&#34; data-title=&#34;Kedro - My Data Is Not A Table&#34; data-description=&#34;In python data science/engineering most of our data is in the form of some sort of table, typically a DataFrame from a library like pandas, spark, or dask.&#34; data-date=&#34;2021-01-14&#34; data-preview=&#34;In python data science/engineering most of our data is in the form of some sort of table, typically a DataFrame from a library like pandas, spark, or dask.&#34;&gt;Kedro - My Data Is Not A Table&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;☝️ I have a full article on creating datasets that are not tabular datasets&#xA;using pickle.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;cross-posted-to-dev&#34;&gt;cross posted to dev &lt;a href=&#34;#cross-posted-to-dev&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you like this article give it some ❤️🦄🏷️ on dev &lt;a href=&#34;https://dev.to/waylonwalker/incremental-versioned-datasets-in-kedro-3ajn&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/dev.to.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/dev.to.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://dev.to/waylonwalker/incremental-versioned-datasets-in-kedro-3ajn&lt;/a&gt;&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;This post was primarily built live on &lt;a href=&#34;https://twitch.tv/waylonwalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/twitch.tv.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/twitch.tv.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://twitch.tv/waylonwalker&lt;/a&gt;, give me a&#xA;follow and join in the live show if that is something that interests you.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ markstos qmk_firmware</title>
    <id>https://waylonwalker.com/markstos-qmk_firmware/</id>
    <updated>2021-07-01T18:05:42Z</updated>
    <published>2021-07-01T18:05:42Z</published>
    <link href="https://waylonwalker.com/markstos-qmk_firmware/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred qmk_firmware by markstos. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/markstos/qmk_firmware&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;qmk_firmware&lt;/a&gt; by &lt;a href=&#34;https://github.com/markstos&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;markstos&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;Open-source keyboard firmware for Atmel AVR and Arm USB families&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ studioswong kedro-viz-glitch</title>
    <id>https://waylonwalker.com/studioswong-kedro-viz-glitch/</id>
    <updated>2021-07-01T17:40:41Z</updated>
    <published>2021-07-01T17:40:41Z</published>
    <link href="https://waylonwalker.com/studioswong-kedro-viz-glitch/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out studioswong and their project kedro-viz-glitch.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/studioswong&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;studioswong&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/studioswong/kedro-viz-glitch&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-viz-glitch&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ dolthub dolt</title>
    <id>https://waylonwalker.com/dolthub-dolt/</id>
    <updated>2021-06-22T21:16:00Z</updated>
    <published>2021-06-22T21:16:00Z</published>
    <link href="https://waylonwalker.com/dolthub-dolt/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by dolt from dolthub.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/dolthub/dolt&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dolt&lt;/a&gt; from &lt;a href=&#34;https://github.com/dolthub&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dolthub&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Dolt – &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;Git&lt;/a&gt; for Data&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ asottile pyupgrade</title>
    <id>https://waylonwalker.com/asottile-pyupgrade/</id>
    <updated>2021-06-19T20:45:07Z</updated>
    <published>2021-06-19T20:45:07Z</published>
    <link href="https://waylonwalker.com/asottile-pyupgrade/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about pyupgrade, an amazing project by asottile. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/asottile/pyupgrade&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pyupgrade&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/asottile&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;asottile&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;A tool (and pre-commit hook) to automatically upgrade syntax for newer versions of the language.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>I Started Streaming on Twitch</title>
    <id>https://waylonwalker.com/start-streaming/</id>
    <updated>2021-06-12T10:11:00Z</updated>
    <published>2021-06-12T10:11:00Z</published>
    <link href="https://waylonwalker.com/start-streaming/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently started streaming on twitch.tv/waylonwalker and it&#39;s been a blast so far.</summary>
    <content type="html">&lt;p&gt;I recently started streaming on&#xA;&lt;a href=&#34;https://www.twitch.tv/waylonwalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.twitch.tv.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.twitch.tv.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;twitch.tv/waylonwalker&lt;/a&gt; and it’s been a&#xA;blast so far.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;python&lt;/li&gt;&#xA;&lt;li&gt;kedro&lt;/li&gt;&#xA;&lt;li&gt;Data Science&lt;/li&gt;&#xA;&lt;li&gt;Data Engineering&lt;/li&gt;&#xA;&lt;li&gt;webdev&lt;/li&gt;&#xA;&lt;li&gt;digital gardening&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;kedro-spaceflights&#34;&gt;Kedro Spaceflights &lt;a href=&#34;#kedro-spaceflights&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It all started with&#xA;&lt;a href=&#34;https://github.com/kedro-org/kedro/issues/606&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro/issues/606&lt;/a&gt;, Yetu&#xA;called out for users of kedro to record themselves doing a walk through of&#xA;their tutorials.  I wanted to do this, but was really stuck at the fact that&#xA;recording or editing somewhat polished vide is quite time consuming for me.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/kedro-issue-606.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/kedro-issue-606.png&#34; alt=&#34;kedro-issue-606&#34;/ data-glightbox=&#34;description: kedro-issue-606&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;inspiration&#34;&gt;Inspiration &lt;a href=&#34;#inspiration&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;My introduction to twitch came from&#xA;&lt;a href=&#34;https://twitch.tv/theprimeagen&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/twitch.tv.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/twitch.tv.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;twitch.tv/theprimeagen&lt;/a&gt;. I watched him on&#xA;YouTube, and then decided to drop into a stream.  It was so fun to watch him&#xA;live that I started following others in the science and tech category.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.twitch.tv/teej_dv&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.twitch.tv.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.twitch.tv.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;twitch.tv/teej_dv&lt;/a&gt; Brilliant neovim core dev, I learn a bunch about nvim every time I watch.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.twitch.tv/cmgriffing&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.twitch.tv.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.twitch.tv.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;twitch.tv/cmgriffing&lt;/a&gt; Super Chill and engaging chat.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.twitch.tv/cassidoo&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.twitch.tv.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.twitch.tv.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;twitch.tv/cassidoo&lt;/a&gt; Fantastic discussion/chat.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.twitch.tv/anthonywritescode&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.twitch.tv.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.twitch.tv.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;twitch.tv/anthonywritescode&lt;/a&gt; Building the python ecosystem.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.twitch.tv/kierisi&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.twitch.tv.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.twitch.tv.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;twitch.tv/kierisi&lt;/a&gt; Exploring data in r-studio, taking xgboost to Sliced.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;streaming-what-i-do&#34;&gt;Streaming What I Do &lt;a href=&#34;#streaming-what-i-do&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;After taking a jump in with the spaceflights tutorial I realized that it really&#xA;was not that hard to do, and I can stream things that I am doing anyways.  I&#xA;will be streaming while I build open source kedro plugins, pipelines, and while&#xA;I work on my website.&lt;/p&gt;&#xA;&lt;h2 id=&#34;youtube&#34;&gt;YouTube &lt;a href=&#34;#youtube&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I started storing all the replay, and some clips on&#xA;&lt;a href=&#34;https://www.youtube.com/channel/UChoRUssc5HoO-xQ9hUKZ1mA&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;YouTube&lt;/a&gt;.  If that&#xA;is more of your thing be sure to check it out.  To be completely honest the  editing/ clips will likely come at a minimum, as they take me a lot more time to edit.  I would greatly appreciate&#xA;anyone who subscribes to help me get to the 100 subscriber baseline to get my&#xA;custom url.&lt;/p&gt;&#xA;&lt;p&gt;Come join me while I try to figure out what I am doing.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/55g8FQr0kgA&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Deploying a kedro dataset to netlify&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Here is a small clip from my latest&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ L3MON4D3 LuaSnip</title>
    <id>https://waylonwalker.com/l3mon4d3-luasnip/</id>
    <updated>2021-06-11T20:16:57Z</updated>
    <published>2021-06-11T20:16:57Z</published>
    <link href="https://waylonwalker.com/l3mon4d3-luasnip/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered LuaSnip by L3MON4D3, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/L3MON4D3/LuaSnip&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;LuaSnip&lt;/a&gt; by &lt;a href=&#34;https://github.com/L3MON4D3&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;L3MON4D3&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;Snippet Engine for Neovim written in Lua.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nearbeach NearBeach</title>
    <id>https://waylonwalker.com/nearbeach-nearbeach/</id>
    <updated>2021-06-11T12:35:37Z</updated>
    <published>2021-06-11T12:35:37Z</published>
    <link href="https://waylonwalker.com/nearbeach-nearbeach/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on NearBeach by nearbeach.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/nearbeach/NearBeach&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;NearBeach&lt;/a&gt; by &lt;a href=&#34;https://github.com/nearbeach&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nearbeach&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;NearBeach is an open sourced project management tool, helping you keep track of your project. You can track requirements, projects and tasks&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ brickfrog srcards</title>
    <id>https://waylonwalker.com/brickfrog-srcards/</id>
    <updated>2021-06-10T23:10:14Z</updated>
    <published>2021-06-10T23:10:14Z</published>
    <link href="https://waylonwalker.com/brickfrog-srcards/" rel="alternate" type="text/html"></link>
    <summary type="text">srcards by brickfrog is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/brickfrog/srcards&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;srcards&lt;/a&gt; by &lt;a href=&#34;https://github.com/brickfrog&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;brickfrog&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ noopkat vim-twitch-line-sign</title>
    <id>https://waylonwalker.com/noopkat-vim-twitch-line-sign/</id>
    <updated>2021-06-10T01:20:50Z</updated>
    <published>2021-06-10T01:20:50Z</published>
    <link href="https://waylonwalker.com/noopkat-vim-twitch-line-sign/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out vim-twitch-line-sign by noopkat. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/noopkat/vim-twitch-line-sign&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vim-twitch-line-sign&lt;/a&gt; by &lt;a href=&#34;https://github.com/noopkat&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;noopkat&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;some helpers to annotate vim signs with Twitch related metadata. Inspired by: clarkio/vscode-twitch-highlighter&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ PyCQA flake8</title>
    <id>https://waylonwalker.com/pycqa-flake8/</id>
    <updated>2021-06-08T13:30:59Z</updated>
    <published>2021-06-08T13:30:59Z</published>
    <link href="https://waylonwalker.com/pycqa-flake8/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred flake8 by PyCQA. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/PyCQA/flake8&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;flake8&lt;/a&gt; by &lt;a href=&#34;https://github.com/PyCQA&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;PyCQA&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;flake8 is a python tool that glues together pycodestyle, pyflakes, mccabe, and third-party plugins to check the style and quality of some python code.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Kedro Spaceflights - part 2 | Stream replay June 7, 2021</title>
    <id>https://waylonwalker.com/kedro-spaceflights-stream2/</id>
    <updated>2021-06-07T16:15:04Z</updated>
    <published>2021-06-07T16:15:04Z</published>
    <link href="https://waylonwalker.com/kedro-spaceflights-stream2/" rel="alternate" type="text/html"></link>
    <summary type="text">This was my seconf time ever streaming on twitch.tv/waylonwalker, and I completely botched my mic 2x.</summary>
    <content type="html">&lt;p&gt;This was my seconf time ever streaming on&#xA;&lt;a href=&#34;https://twitch.tv/waylonwalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/twitch.tv.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/twitch.tv.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;twitch.tv/waylonwalker&lt;/a&gt;, and I completely botched my mic 2x.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/_7MwgKu-844&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://youtu.be/_7MwgKu-844&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;links&#34;&gt;Links &lt;a href=&#34;#links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://kedro.readthedocs.io/en/stable/03_tutorial/01_spaceflights_tutorial.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Spaceflights Tutorial&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/WaylonWalker/kedro-spaceflights&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;my spaceflights repo&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;notes-to-get-started&#34;&gt;Notes to get started &lt;a href=&#34;#notes-to-get-started&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx run kedro new&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; project&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python -m venv .venv&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; .venv/bin/activate&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install kedro&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>🌱 Digital Gardening | gif to Mp4 | Stream replay June 4, 2021</title>
    <id>https://waylonwalker.com/digital-gardening-stream-6-6-2021/</id>
    <updated>2021-06-06T16:15:04Z</updated>
    <published>2021-06-06T16:15:04Z</published>
    <link href="https://waylonwalker.com/digital-gardening-stream-6-6-2021/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/I4VenHqIEng</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/I4VenHqIEng&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://youtu.be/I4VenHqIEng&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Doing some Digital Gardening on stream&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Ahrefs Errors&lt;/li&gt;&#xA;&lt;li&gt;ahrefs large images&lt;/li&gt;&#xA;&lt;li&gt;Automatic gif to mp4&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;gif-to-mp4&#34;&gt;gif to mp4 &lt;a href=&#34;#gif-to-mp4&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;After this stream all gifs on my site are converted to mp4/webm if they exist.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;![&lt;span class=&#34;nt&#34;&gt;tmux-navigation-2021&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://images.waylonwalker.com/tmux-navigation-2021.gif&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/tmux-navigation-2021.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/tmux-navigation-2021.gif&#34; alt=&#34;tmux-navigation-2021&#34;/ data-glightbox=&#34;description: tmux-navigation-2021&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ liiight notifiers</title>
    <id>https://waylonwalker.com/liiight-notifiers/</id>
    <updated>2021-06-05T21:14:28Z</updated>
    <published>2021-06-05T21:14:28Z</published>
    <link href="https://waylonwalker.com/liiight-notifiers/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out notifiers by liiight. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/liiight/notifiers&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;notifiers&lt;/a&gt; by &lt;a href=&#34;https://github.com/liiight&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;liiight&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;The easy way to send notifications&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ norcalli neovim-plugin</title>
    <id>https://waylonwalker.com/norcalli-neovim-plugin/</id>
    <updated>2021-06-04T22:36:25Z</updated>
    <published>2021-06-04T22:36:25Z</published>
    <link href="https://waylonwalker.com/norcalli-neovim-plugin/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out neovim-plugin by norcalli. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/norcalli/neovim-plugin&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;neovim-plugin&lt;/a&gt; by &lt;a href=&#34;https://github.com/norcalli&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;norcalli&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ python-lsp python-lsp-server</title>
    <id>https://waylonwalker.com/python-lsp-python-lsp-server/</id>
    <updated>2021-06-04T22:22:04Z</updated>
    <published>2021-06-04T22:22:04Z</published>
    <link href="https://waylonwalker.com/python-lsp-python-lsp-server/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by python-lsp-server from python-lsp.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/python-lsp/python-lsp-server&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;python-lsp-server&lt;/a&gt; from &lt;a href=&#34;https://github.com/python-lsp&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;python-lsp&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Fork of the python-language-server project, maintained by the Spyder IDE team and the community&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ cwebster2 github-coauthors.nvim</title>
    <id>https://waylonwalker.com/cwebster2-github-coauthors-nvim/</id>
    <updated>2021-06-04T22:18:30Z</updated>
    <published>2021-06-04T22:18:30Z</published>
    <link href="https://waylonwalker.com/cwebster2-github-coauthors-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">github-coauthors.nvim by cwebster2 is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/cwebster2/github-coauthors.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;github-coauthors.nvim&lt;/a&gt; by &lt;a href=&#34;https://github.com/cwebster2&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cwebster2&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;A neovim extension for populating coauthors when comitting&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Kedro Spaceflights - part 1 | Stream replay June 4, 2021</title>
    <id>https://waylonwalker.com/kedro-spaceflights-stream1/</id>
    <updated>2021-06-04T16:15:04Z</updated>
    <published>2021-06-04T16:15:04Z</published>
    <link href="https://waylonwalker.com/kedro-spaceflights-stream1/" rel="alternate" type="text/html"></link>
    <summary type="text">This was my first time ever streaming on twitch.tv/waylonwalker. I am excited to get going. I have been streaming early in the morning while I am still...</summary>
    <content type="html">&lt;p&gt;This was my first time ever streaming on&#xA;&lt;a href=&#34;https://twitch.tv/waylonwalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/twitch.tv.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/twitch.tv.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;twitch.tv/waylonwalker&lt;/a&gt;.  I am excited to get going.&#xA;I have been streaming early in the morning while I am still waking up, so still&#xA;a bit groggy as I go.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/Y07UBr9Ccjs&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://youtu.be/Y07UBr9Ccjs&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;kedro-spaceflights&#34;&gt;Kedro Spaceflights &lt;a href=&#34;#kedro-spaceflights&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It all started with&#xA;&lt;a href=&#34;https://github.com/kedro-org/kedro/issues/606&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro/issues/606&lt;/a&gt;, Yetu&#xA;called out for users of kedro to record themselves doing a walk through of&#xA;their tutorials.  I wanted to do this, but was really stuck at the fact that&#xA;recording or editing somewhat polished vide is quite time consuming for me.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/kedro-issue-606.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/kedro-issue-606.png&#34; alt=&#34;kedro-issue-606&#34;/ data-glightbox=&#34;description: kedro-issue-606&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;notes&#34;&gt;Notes &lt;a href=&#34;#notes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx run kedro new&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; project&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python -m venv .venv&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; .venv/bin/activate&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install kedro&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Galileo-Galilei kedro-mlflow</title>
    <id>https://waylonwalker.com/galileo-galilei-kedro-mlflow/</id>
    <updated>2021-06-02T22:00:13Z</updated>
    <published>2021-06-02T22:00:13Z</published>
    <link href="https://waylonwalker.com/galileo-galilei-kedro-mlflow/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on kedro-mlflow by Galileo-Galilei.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/Galileo-Galilei/kedro-mlflow&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-mlflow&lt;/a&gt; by &lt;a href=&#34;https://github.com/Galileo-Galilei&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Galileo-Galilei&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A kedro-plugin for integration of mlflow capabilities inside kedro projects (especially machine learning model versioning and packaging)&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Textualize textual</title>
    <id>https://waylonwalker.com/textualize-textual/</id>
    <updated>2021-05-31T19:20:35Z</updated>
    <published>2021-05-31T19:20:35Z</published>
    <link href="https://waylonwalker.com/textualize-textual/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on textual, created by Textualize.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/Textualize/textual&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;textual&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/Textualize&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Textualize&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The lean application framework for Python.  Build sophisticated user interfaces with a simple Python API. Run your apps in the terminal and a web browser.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ folke lsp-colors.nvim</title>
    <id>https://waylonwalker.com/folke-lsp-colors-nvim/</id>
    <updated>2021-05-29T13:59:55Z</updated>
    <published>2021-05-29T13:59:55Z</published>
    <link href="https://waylonwalker.com/folke-lsp-colors-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on lsp-colors.nvim by folke.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/folke/lsp-colors.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lsp-colors.nvim&lt;/a&gt; by &lt;a href=&#34;https://github.com/folke&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;folke&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;🌈  Plugin that creates missing LSP diagnostics highlight groups for color schemes that don’t yet support the Neovim 0.5 builtin LSP client.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Using Kedro In Scripts</title>
    <id>https://waylonwalker.com/kedro-in-scripts/</id>
    <updated>2021-05-23T11:00:44Z</updated>
    <published>2021-05-23T11:00:44Z</published>
    <link href="https://waylonwalker.com/kedro-in-scripts/" rel="alternate" type="text/html"></link>
    <summary type="text">With the latest releases of kedro , it is now possible to run kedro pipelines from within scripts. While I would not start a project with this technique, it...</summary>
    <content type="html">&lt;p&gt;With the latest releases of kedro &lt;code&gt;0.17.x&lt;/code&gt;, it is now possible to run kedro&#xA;pipelines from within scripts.  While I would not start a project with this&#xA;technique, it will be a good tool to keep in my back pocket when I want to&#xA;sprinkle in a bit of kedro goodness in existing projects.&lt;/p&gt;&#xA;&lt;h2 id=&#34;new-to-kedro&#34;&gt;New to Kedro &lt;a href=&#34;#new-to-kedro&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/what-is-kedro/&#34; class=&#34;wikilink&#34; data-title=&#34;What is Kedro&#34; data-description=&#34;Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...&#34; data-date=&#34;2021-08-17&#34; data-preview=&#34;Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...&#34;&gt;What is Kedro&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If your just learning about kedro check out this post walking through it&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;no-more-rabbit-hole-of-errors&#34;&gt;No More Rabbit Hole of Errors &lt;a href=&#34;#no-more-rabbit-hole-of-errors&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;as of 0.17.2&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I’ve tried to do this in kedro &lt;code&gt;0.16.x,&lt;/code&gt; and it turned into a rabbit hole of&#xA;errors.  First kedro needed a &lt;code&gt;conf&lt;/code&gt; directory, if you tried to fake one in it&#xA;would then ask for logging setup.  These errors just kept coming to the point&#xA;it wasnt worth doing and I might as well use a proper template for real&#xA;projects and stick to simple function calls for things that are not a kedro&#xA;project.&lt;/p&gt;&#xA;&lt;h2 id=&#34;kedro-in-a-script&#34;&gt;Kedro in a script &lt;a href=&#34;#kedro-in-a-script&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;To get kedro running, you will need a pipeline, catalog, and&#xA;runner at a minimum.  Those who have used kedro before the pipeline will&#xA;look very similar to what you are familiar with, but the catalog will not be&#xA;loaded from yaml and you will need to bring your own runner.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.pipeline&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.io&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DataCatalog&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.runner.sequential_runner&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SequentialRunner&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# additional datasets you want to use&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.extras.datasets.pandas.csv_dataset&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CSVDataSet&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.extras.datasets.pandas.parquet_dataset&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ParquetDataSet&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# the sequential runner is the simplest. It runs one node at a time.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;runner&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SequentialRunner&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# this is a super simple example pipeline&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;lambda&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;range&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;lambda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;range&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;range**2&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;lambda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;range**2&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;range&amp;gt;5k&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;lambda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;range&amp;gt;5k&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;range&amp;gt;5k-head&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;lambda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;sum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;range&amp;gt;5k&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;range&amp;gt;5k-mean&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# to get up and running, you can use an empty catalog&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DataCatalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;runner&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;👆 Above is the minimal setup to get a kedro pipeline running&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;more-practically&#34;&gt;more practically &lt;a href=&#34;#more-practically&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;More often, your kedro pipelines are going to use a function rather than a&#xA;lambda, and pandas DataFrames.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;clean_columns&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataFrame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;columns&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;col&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lower&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;col&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;columns&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;clean_columns&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;raw_data&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;clean_columns&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;create_clean_columns&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DataCatalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;raw_data&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ParquetDataSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;data/raw_data.parquet&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;clean_columns&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ParquetDataSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;data/clean_columns.parquet&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;One single node pipeline to get you started&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;semi-automatic-catalog&#34;&gt;Semi-automatic catalog &lt;a href=&#34;#semi-automatic-catalog&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;For some reason, when I tried to use the DataCatalogWithDefault it did not pick&#xA;up my datasets right.  I suspect this has something to do with not setting up a&#xA;proper session, so this is what I did in a pinch to get that catalog goodness&#xA;for my DataFrames without setting up each one manually.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DataCatalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ParquetDataSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;data/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;.parquet&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;all_outputs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;⚠ If all of your datasets are pandas dataframes&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;For the example above that does not use DataFrames, I would pickle all of my&#xA;outputs to enable re-loading them later.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DataCatalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PickleDataSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;data/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;.pkl&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;all_outputs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;🔥 for use with non-pandas datasets&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;logging&#34;&gt;Logging &lt;a href=&#34;#logging&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Once you explicitly add datasets, kedro will start logging when it’s&#xA;loading, running, or saving each node.  Things will begin to look a&#xA;bit more familiar to anyone who has used kedro before.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ww3&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;↪&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;main&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;©&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;scripts&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v3&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;.8.8&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ipython&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;❯&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;runner&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2021&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;04&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;58&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;099&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;node&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;INFO&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Running&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;lambda&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2021&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;04&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;58&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data_catalog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;INFO&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Saving&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;`&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PickleDataSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2021&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;04&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;58&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;104&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;runner&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sequential_runner&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;INFO&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Completed&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;out&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tasks&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2021&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;04&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;58&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;105&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data_catalog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;INFO&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Loading&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;`&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PickleDataSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2021&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;04&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;58&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;105&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;node&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;INFO&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Running&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;lambda&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2021&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;04&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;58&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;105&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data_catalog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;INFO&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Saving&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;`&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PickleDataSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2021&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;04&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;58&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;111&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;runner&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sequential_runner&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;INFO&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Completed&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;out&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tasks&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2021&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;04&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;58&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;111&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data_catalog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;INFO&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Loading&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;`&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PickleDataSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2021&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;04&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;58&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;112&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;node&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;INFO&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Running&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;lambda&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2021&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;04&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;58&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;112&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data_catalog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;INFO&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Saving&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;`&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PickleDataSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2021&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;04&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;58&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;115&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;runner&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sequential_runner&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;INFO&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Completed&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;out&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tasks&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2021&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;04&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;58&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;115&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data_catalog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;INFO&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Loading&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;`&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PickleDataSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2021&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;04&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;58&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;115&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;node&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;INFO&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Running&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;lambda&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mean&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2021&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;04&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;58&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;115&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data_catalog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;INFO&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Saving&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mean&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;`&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PickleDataSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2021&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;04&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;58&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;118&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;runner&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sequential_runner&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;INFO&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Completed&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;out&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tasks&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2021&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;04&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;58&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;119&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data_catalog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;INFO&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Loading&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;`&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PickleDataSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2021&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;04&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;58&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;119&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;node&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;INFO&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Running&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;lambda&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;head&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2021&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;04&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;58&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;119&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data_catalog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;INFO&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Saving&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;head&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;`&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PickleDataSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2021&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;04&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;58&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;122&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;runner&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sequential_runner&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;INFO&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Completed&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;out&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tasks&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2021&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;04&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;58&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;122&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;runner&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sequential_runner&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;INFO&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;execution&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;completed&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;successfully&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;kedro-viz&#34;&gt;Kedro Viz &lt;a href=&#34;#kedro-viz&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I was not able to quickly get kedro viz up and running for my use case.  If you&#xA;really wanted to you could start modifying their format_pipelines_data function&#xA;in&#xA;&lt;a href=&#34;https://github.com/kedro-org/kedro-viz/blob/main/package/kedro_viz/server.py&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;server.py&lt;/a&gt;.&#xA;Or you could render a new template and put your pipeline there for viz&#xA;purposes.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It’s possible, but might as well stick to the template&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;cli&#34;&gt;cli &lt;a href=&#34;#cli&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;For something that I would be using this on, I am probably not going to put much&#xA;effort into the cli as it is not likely something that we will have a&#xA;team of developers interacting with constantly.  I would just put together the&#xA;minimum necessary to run my application how I need.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;vm&#34;&gt;__name__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;sys&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;--skip-raw&amp;#39;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sys&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;argv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;runner&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;from_inputs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;range**2&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;runner&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Keeping it simple&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;If I want to go down the route of having a full cli built out I am probably&#xA;going to use the full kedro template, or something very similar.&lt;/p&gt;&#xA;&lt;h2 id=&#34;its-a-bit-rough&#34;&gt;It’s a bit Rough &lt;a href=&#34;#its-a-bit-rough&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;While I might use this in production somewhere, it will be inside of some&#xA;other not kedro application. I will still be using something quite similar to&#xA;their template for my pipelining projects.  It misses some excellent&#xA;things that bring me to kedro like hooks, plugins, credentials, catalog,&#xA;logging config, cli, and viz.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ lannonbr netlify_deploy</title>
    <id>https://waylonwalker.com/lannonbr-netlify_deploy/</id>
    <updated>2021-05-23T02:31:52Z</updated>
    <published>2021-05-23T02:31:52Z</published>
    <link href="https://waylonwalker.com/lannonbr-netlify_deploy/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about netlify_deploy, an amazing project by lannonbr. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/lannonbr/netlify_deploy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;netlify_deploy&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/lannonbr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lannonbr&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Mini Rust CLI to deploy sites to Netlify using their API&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ slidevjs slidev</title>
    <id>https://waylonwalker.com/slidevjs-slidev/</id>
    <updated>2021-05-23T02:31:43Z</updated>
    <published>2021-05-23T02:31:43Z</published>
    <link href="https://waylonwalker.com/slidevjs-slidev/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered slidev by slidevjs, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/slidevjs/slidev&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;slidev&lt;/a&gt; by &lt;a href=&#34;https://github.com/slidevjs&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;slidevjs&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;Presentation Slides for Developers&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ orta bio</title>
    <id>https://waylonwalker.com/orta-bio/</id>
    <updated>2021-05-21T17:10:50Z</updated>
    <published>2021-05-21T17:10:50Z</published>
    <link href="https://waylonwalker.com/orta-bio/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about bio, an amazing project by orta. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/orta/bio&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;bio&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/orta&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;orta&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ benawad dogehouse</title>
    <id>https://waylonwalker.com/benawad-dogehouse/</id>
    <updated>2021-05-21T17:10:23Z</updated>
    <published>2021-05-21T17:10:23Z</published>
    <link href="https://waylonwalker.com/benawad-dogehouse/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out dogehouse by benawad. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/benawad/dogehouse&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dogehouse&lt;/a&gt; by &lt;a href=&#34;https://github.com/benawad&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;benawad&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;Taking voice conversations to the moon 🚀&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Silence Kedro Logs</title>
    <id>https://waylonwalker.com/kedro-silence/</id>
    <updated>2021-05-20T13:13:38Z</updated>
    <published>2021-05-20T13:13:38Z</published>
    <link href="https://waylonwalker.com/kedro-silence/" rel="alternate" type="text/html"></link>
    <summary type="text">Kedro can have a chatty logger. While this is super nice in production so see everything that happened during a pipeline run. This can be troublesome while...</summary>
    <content type="html">&lt;p&gt;Kedro can have a chatty logger.  While this is super nice in production&#xA;so see everything that happened during a pipeline run. This can be troublesome&#xA;while trying to implement a cli extension with clean output.&lt;/p&gt;&#xA;&lt;h2 id=&#34;silence-a-python-log&#34;&gt;Silence a Python log &lt;a href=&#34;#silence-a-python-log&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;First, how does one silence a python log?  Python loggers can be retrieved by&#xA;the &lt;code&gt;logging&lt;/code&gt; module’s &lt;code&gt;getLogger&lt;/code&gt; function. Then their log level can be&#xA;changed.  Much of kedro’s chattiness comes from INFO level logs.  I don’t want&#xA;to hear about anything for my current use case unless it’s essential, i.e., a&#xA;failure.  In this case, I set the log levels to ERROR as most errors should&#xA;stop execution anyways.&lt;/p&gt;&#xA;&lt;h3 id=&#34;python-logging-levels&#34;&gt;python logging levels &lt;a href=&#34;#python-logging-levels&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;Level&lt;/th&gt;&#xA;&lt;th&gt;Numeric value&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;CRITICAL&lt;/td&gt;&#xA;&lt;td&gt;50&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;ERROR&lt;/td&gt;&#xA;&lt;td&gt;40&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;WARNING&lt;/td&gt;&#xA;&lt;td&gt;30&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;INFO&lt;/td&gt;&#xA;&lt;td&gt;20&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;DEBUG&lt;/td&gt;&#xA;&lt;td&gt;10&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;NOTSET&lt;/td&gt;&#xA;&lt;td&gt;0&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;get-or-create-a-logger&#34;&gt;Get or Create a logger &lt;a href=&#34;#get-or-create-a-logger&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Getting a python logger is straightforward if we know the name of the logger.&#xA;The following block will grab the logger object for the logger currently&#xA;registered under the name passed in.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;logger&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;logging&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getLogger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;kedro&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;🔥 If a logger doesn’t exist under the passed in name, it will create one for you.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;set-level&#34;&gt;Set Level &lt;a href=&#34;#set-level&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Once we get the logger, we need to silence it by setting the log level.&#xA;Typically it’s not appropriate to completely turn off loggers as you would still&#xA;want information in the case of a complete failure.  If you are building&#xA;a cli such as one that prints out the pipelines to the console, you may not want&#xA;to see logs that happen during regular operation as this would make it more&#xA;challenging to integrate with other shell applications.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;logger&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;setLevel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logging&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ERROR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;⚠ Be sure to leave some logging left. After the point of error, you are not&#xA;going to get a clean output anyways.  So let the user see what happened.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It is possible to set the log level before kedro even registers the&#xA;logger, if there is no logger currently setup under getLogger, it will create&#xA;one.&lt;/p&gt;&#xA;&lt;h2 id=&#34;silent-all-kedro-loggers&#34;&gt;Silent all kedro loggers &lt;a href=&#34;#silent-all-kedro-loggers&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As of &lt;code&gt;kedro==0.17.3&lt;/code&gt; this function covers every logger issued by&#xA;kedro.  I generated this list of &lt;code&gt;known_kedro_loggers&lt;/code&gt; by looking through their&#xA;codebase and filling in a few others I found by running it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;silent_loggers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;All logs need to be silent in order for a clean kedro diff output.&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;known_kedro_loggers&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;ProfileTimeTransformer&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;hooks_handler&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro.__init__&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro.config&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro.config.config&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro.extras.decorators.memory_profiler&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro.framework.cli&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro.framework.session.session&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro.framework.session.store&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro.framework.session&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro.io.cached_dataset&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro.io.data_catalog&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro.io&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro.journal&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro.pipeline&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro.pipeline.decorators&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro.pipeline.node&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro.pipeline.pipeline&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro.runner&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro.runner.runner&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro.versioning.journal&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;py4&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;logger&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;known_kedro_loggers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logging&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;root&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;manager&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;loggerDict&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;keys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()),&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# type: ignore&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;logging&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getLogger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;setLevel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logging&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ERROR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This function comes right from a plugin I am currently working on&#xA;&lt;a href=&#34;https://github.com/WaylonWalker/kedro-diff&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-diff&lt;/a&gt;.  Check it out, give&#xA;it a star, and watch it for release.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/what-is-kedro/&#34; class=&#34;wikilink&#34; data-title=&#34;What is Kedro&#34; data-description=&#34;Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...&#34; data-date=&#34;2021-08-17&#34; data-preview=&#34;Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...&#34;&gt;What is Kedro&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Not familiar with kedro, check out this article to see what it’s all about.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;master-the-log&#34;&gt;Master the log &lt;a href=&#34;#master-the-log&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Python logs can seem super confusing at first, understanding how to get a&#xA;logger and set its level are the first steps to mastering it.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ grantjenks python-diskcache</title>
    <id>https://waylonwalker.com/grantjenks-python-diskcache/</id>
    <updated>2021-05-17T13:22:16Z</updated>
    <published>2021-05-17T13:22:16Z</published>
    <link href="https://waylonwalker.com/grantjenks-python-diskcache/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? python-diskcache by grantjenks.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/grantjenks/python-diskcache&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;python-diskcache&lt;/a&gt; by &lt;a href=&#34;https://github.com/grantjenks&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;grantjenks&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Python disk-backed cache (Django-compatible). Faster than Redis and Memcached. Pure-Python.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ d0c-s4vage lookatme</title>
    <id>https://waylonwalker.com/d0c-s4vage-lookatme/</id>
    <updated>2021-05-14T18:59:59Z</updated>
    <published>2021-05-14T18:59:59Z</published>
    <link href="https://waylonwalker.com/d0c-s4vage-lookatme/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on lookatme by d0c-s4vage.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/d0c-s4vage/lookatme&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lookatme&lt;/a&gt; by &lt;a href=&#34;https://github.com/d0c-s4vage&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;d0c-s4vage&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;An interactive, terminal-based markdown presenter&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Python Diskcahe is locked</title>
    <id>https://waylonwalker.com/locked_diskcache/</id>
    <updated>2021-05-14T18:38:45Z</updated>
    <published>2021-05-14T18:38:45Z</published>
    <link href="https://waylonwalker.com/locked_diskcache/" rel="alternate" type="text/html"></link>
    <summary type="text">change_speed = (speed) =&gt; [...document.querySelectorAll(&#39;video&#39;)].map(v =&gt; v.playbackRate=v.playbackRate+speed)</summary>
    <content type="html">&lt;script&gt;&#xA;change_speed = (speed) =&gt; [...document.querySelectorAll(&#39;video&#39;)].map(v =&gt; v.playbackRate=v.playbackRate+speed)&#xA;&lt;/script&gt;&#xA;&lt;style&gt;&#xA;&lt;/style&gt;&#xA;&lt;p&gt;Running multiple processes using the same diskcache object can cause issues&#xA;with locks.  As I was trying to setup a rich Live display for markata I ran&#xA;into issues where each part could not nun simultaneusly.  As I had followed the&#xA;instructions from discache it was not directly aparant to me, so I had to make&#xA;a simple example to experiment and play with at a small scale.&lt;/p&gt;&#xA;&lt;h2 id=&#34;minimum-reproducible-error&#34;&gt;Minimum reproducible error &lt;a href=&#34;#minimum-reproducible-error&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Minimum reporducible error is one of my superpowers in development.  I do this&#xA;very often to sus out what is really happening.  My day to day work is&#xA;processing data with python, I keep a number of very small data sets handy to&#xA;break and fix.  This helps separate complexities of the project and the problem.&lt;/p&gt;&#xA;&lt;h2 id=&#34;lets-break-it&#34;&gt;Let’s break it &lt;a href=&#34;#lets-break-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Markata has a lot going on.  It’s a plugins all the way down static site&#xA;generator built in python.  Trying to find the root cause through the layers of&#xA;plugin and cli modules can be a pain, but in this case building a very simple&#xA;minimum reporducible error was much easier.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pathlib&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;diskcache&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;FanoutCache&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;time&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;CACHE_DIR&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.markata.cache&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;vm&#34;&gt;__name__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cahe&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;FanoutCache&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CACHE_DIR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;statistics&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;item&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cache&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;me&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sleep&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;📝 &lt;code&gt;time.sleep(20)&lt;/code&gt; is here to simulate doing some other work, while the cache&#xA;object is still open.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;running-locked-diskcachepy&#34;&gt;Running locked_diskcache.py &lt;a href=&#34;#running-locked-diskcachepy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here I have my editor showing the file on the top split and have ran it in the&#xA;two lower splits.  Notice that the first (left split) immediately prints out&#xA;the result, while the second one (right split) does not print out the result&#xA;until the first is completely finished.&lt;/p&gt;&#xA;&lt;!-- ![](https://images.waylonwalker.com/locked_discache.gif) --&gt;&#xA;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/locked_discache.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/locked_discache.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;using-a-context-manager&#34;&gt;Using a context manager &lt;a href=&#34;#using-a-context-manager&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This time lets put the cache in a context manager so that it automatically&#xA;closes after it gets the item.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pathlib&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;diskcache&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;FanoutCache&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;time&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;CACHE_DIR&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.markata.cache&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;vm&#34;&gt;__name__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;FanoutCache&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CACHE_DIR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;statistics&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cache&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;item&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cache&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;me&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sleep&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;running-unlocked-diskcahcepy&#34;&gt;Running unlocked_diskcahce.py &lt;a href=&#34;#running-unlocked-diskcahcepy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Notice when we run this time when I run both splits, they are able to&#xA;immediatly print out their result and get to work on that sleep statement.&#xA;This time the right right split only takes ~20s rather than ~40s since it no&#xA;longer needs to wait for the left one to unlock the cache.&lt;/p&gt;&#xA;&lt;!-- ![](https://images.waylonwalker.com/unlocked_discache.gif) --&gt;&#xA;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/unlocked_discache.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/unlocked_discache.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;ive-learned&#34;&gt;I’ve learned &lt;a href=&#34;#ive-learned&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Keep your diskcache open for as little as needed, especially if you plan to&#xA;have it open on multiple processes.  Hopefully this problem solving session&#xA;helps someone else with their discache problems or find a better way to problem&#xA;solve with minimum viable errors.&lt;/p&gt;&#xA;&lt;h2 id=&#34;useful-links&#34;&gt;Useful Links &lt;a href=&#34;#useful-links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pypi.org/project/diskcache/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/pypi.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/pypi.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;diskcache-pypi&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.grantjenks.com/docs/diskcache/tutorial.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.grantjenks.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.grantjenks.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;diskcache-tutorial&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/grantjenks/python-diskcache&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;diskcache-github&lt;/a&gt; 👈 Give it a star&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ darrenburns ward</title>
    <id>https://waylonwalker.com/darrenburns-ward/</id>
    <updated>2021-05-13T12:12:11Z</updated>
    <published>2021-05-13T12:12:11Z</published>
    <link href="https://waylonwalker.com/darrenburns-ward/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on ward by darrenburns.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/darrenburns/ward&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ward&lt;/a&gt; by &lt;a href=&#34;https://github.com/darrenburns&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;darrenburns&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Ward is a modern test framework for Python with a focus on productivity and readability.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>How I navigate tmux in 2021</title>
    <id>https://waylonwalker.com/tmux-nav-2021/</id>
    <updated>2021-05-11T09:14:07Z</updated>
    <published>2021-05-11T09:14:07Z</published>
    <link href="https://waylonwalker.com/tmux-nav-2021/" rel="alternate" type="text/html"></link>
    <summary type="text">change_speed = (speed) =&gt; [...document.querySelectorAll(&#39;video&#39;)].map(v =&gt; v.playbackRate=v.playbackRate+speed)</summary>
    <content type="html">&lt;script&gt;&#xA;change_speed = (speed) =&gt; [...document.querySelectorAll(&#39;video&#39;)].map(v =&gt; v.playbackRate=v.playbackRate+speed)&#xA;&lt;/script&gt;&#xA;&lt;style&gt;&#xA;&lt;/style&gt;&#xA;&lt;p&gt;In 2021 I changed the way I navigate between tmux sessions big time.  Now I can&#xA;create, kill, switch with ease, and generally keep work separated into logical&#xA;groups.&lt;/p&gt;&#xA;&lt;h2 id=&#34;update&#34;&gt;Update &lt;a href=&#34;#update&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Since making this post, I have made ~20 other posts in short form that all have&#xA;a YouTube video to go along with them you can find them all on my&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;chris-toomeyshttpstwittercomchristoomey-tmux-course&#34;&gt;&lt;a href=&#34;https://twitter.com/christoomey&#34;&gt;Chris Toomey’s&lt;/a&gt; Tmux Course &lt;a href=&#34;#chris-toomeyshttpstwittercomchristoomey-tmux-course&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I took Chris’s &lt;a href=&#34;https://thoughtbot.com/upcase/tmux&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/thoughtbot.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/thoughtbot.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux course&lt;/a&gt; in December&#xA;2020 and it was fantastic.  Even as a seasoned tmux user, I learned quite a bit.&#xA;Before the course, I was proficient in navigating within each of my tmux&#xA;sessions but rarely started more than one session.  A few months later, I have&#xA;adopted a lot of what I learned from Chris and made it my own.&lt;/p&gt;&#xA;&lt;p&gt;I am now keeping projects to their own session and can move between them&#xA;fluidly with just a few keystrokes.  For high-traffic projects, I have them&#xA;bound to a single keystroke for instant switching.  This change has been a&#xA;game-changer from the mess of windows I used to have and the nightmare it was&#xA;to find work I was doing and end up duplicating project work in two separate&#xA;windows.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;📝 &lt;strong&gt;NOTE:&lt;/strong&gt; Some of my config comes straight from the course, and some of it has&#xA;been extended to my liking.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Let’s take a quick look at how I am navigating through tmux on a day-to-day basis.&lt;/p&gt;&#xA;&lt;!-- ![overview of how I switch and manage tmux sessions](https://images.waylonwalker.com/tmux-navigation-2021.gif &#34;overview&#34;) --&gt;&#xA;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;👆 Overview of how I navigate tmux&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;tmux-ls&#34;&gt;tmux ls &lt;a href=&#34;#tmux-ls&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Throughout this article, I have several recordings showing how I use manage&#xA;sessions with my keybindings.  I will often run a &lt;code&gt;tmux ls&lt;/code&gt; command to&#xA;highlight running sessions at various points to help guide the viewer.&lt;/p&gt;&#xA;&lt;h2 id=&#34;ta&#34;&gt;ta &lt;a href=&#34;#ta&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;my attach/session switch script&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;At the heart of my tmux navigation is a highly customized version of Chris’s&#xA;tat script that I renamed &lt;code&gt;ta&lt;/code&gt;.  Many folks add this to their bashrc &lt;code&gt;alias ta=tmux attach&lt;/code&gt;.  Simply calling ta will do the same thing as shown below.  If&#xA;you’re in a tmux session, it does nothing, and if you’re not in one, it will&#xA;attach you to the first one.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;get the full &lt;a href=&#34;https://github.com/WaylonWalker/devtainer/blob/main/bin/.local/bin/ta&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;script&lt;/a&gt; from GitHub.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;!-- ![overview of how I switch and manage tmux sessions](https://images.waylonwalker.com/tmux-navigation-2021-ta.gif &#34;overview&#34;) --&gt;&#xA;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-ta.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-ta.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;👆 attaching to a session by default&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In my &lt;code&gt;~/.bashrc&lt;/code&gt; or &lt;code&gt;~/.zshrc&lt;/code&gt; I add the &lt;code&gt;ta&lt;/code&gt; command to keep myself in a tmux&#xA;session at all times.  Whenever I open my terminal, I am automatically dropped&#xA;into a tmux session, but if I am opening a split while in tmux it’s smart&#xA;enough to know not to nest tmux sessions.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ta&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Another article can dive into my &lt;code&gt;ta&lt;/code&gt; command. This one is more about the&#xA;methodology, workflow, and keybindings to get me there.  It’s available in my&#xA;&lt;a href=&#34;https://github.com/WaylonWalker/devtainer/blob/main/bin/.local/bin/ta&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;script&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;but-theres-more&#34;&gt;but there’s more &lt;a href=&#34;#but-theres-more&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;gettin fuzzy&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Give it a directory, and a &lt;code&gt;fzy&lt;/code&gt; dropdown will let you choose a subdirectory to&#xA;start your session in, and name the session after that directory.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ta ~/git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;🔥 Bonus, use direnv to automatically set settings, echo your &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; status,&#xA;activate your environment or whatever else you need.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;!-- ![overview of how I switch and manage tmux sessions](https://images.waylonwalker.com/tmux-navigation-2021-ta-directory.gif &#34;overview&#34;) --&gt;&#xA;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-ta-directory.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-ta-directory.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;👆 give it a directory, it will ask for input to which project and start a new&#xA;named session in that directory.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Note that starting from outside currently does not start in a split layout like&#xA;it does when starting from within tmux.  I am still playing with this, but&#xA;generally, I want my terminal session to be plain when I first start my&#xA;terminal. I usually am starting work after the first default session.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;🤔 I still use both fzy and fzf. It probably doesn’t make sense to use both,&#xA;but I am currently giving fzy a try.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;prefixw&#34;&gt;prefix+w &lt;a href=&#34;#prefixw&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;tmux choose-tree&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;By default, tmux comes with a &lt;code&gt;tmux choose-tree&lt;/code&gt; command bound to &lt;code&gt;prefix+w&lt;/code&gt;,&#xA;which opens in full screen.  The upper section of the screen will show every&#xA;window opened.  While selected, you can show the splits in each window by&#xA;hitting l, or fold it with h. You can search for a session name by hitting /.&lt;/p&gt;&#xA;&lt;!-- ![jump to existing sessions with prefix+w](https://images.waylonwalker.com/tmux-navigation-2021-prefix+w.gif &#34;using prefix+w&#34;) --&gt;&#xA;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-prefix+w.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-prefix+w.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ~/.tmux.conf&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# expanded to show all splits&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; s choose-tree&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# simpler window to show only sessions&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; S choose-session&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;keybindings-in-choose-treechoose-session&#34;&gt;Keybindings in choose-tree/choose-session &lt;a href=&#34;#keybindings-in-choose-treechoose-session&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;The default keybindings of the tmux &lt;code&gt;choose-tree&lt;/code&gt; and &lt;code&gt;choose-session&lt;/code&gt; that I&#xA;use are listed below.  J/K are very intuitive, but I just learned about h,l,/.&#xA;When I do use one of these, the / (search) can be super helpful to find&#xA;sessions/windows faster.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;action&lt;/th&gt;&#xA;&lt;th&gt;key&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;fold&lt;/td&gt;&#xA;&lt;td&gt;h&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;unfold&lt;/td&gt;&#xA;&lt;td&gt;l&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;up&lt;/td&gt;&#xA;&lt;td&gt;k&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;down&lt;/td&gt;&#xA;&lt;td&gt;j&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;search&lt;/td&gt;&#xA;&lt;td&gt;/&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;prefixc-w-prefixc-g&#34;&gt;prefix+c-w prefix+c-g &lt;a href=&#34;#prefixc-w-prefixc-g&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;open a project&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I have set up to make it easy to open my non-work projects &lt;em&gt;(in my ~/git directory)&lt;/em&gt;&#xA;and my work projects &lt;em&gt;(in my ~/work directory)&lt;/em&gt;.  I bound &lt;code&gt;prefix+c-g&lt;/code&gt; and&#xA;&lt;code&gt;prefix+c-w&lt;/code&gt; to open a new session in their respective directories.  I like&#xA;mapping common prefix commands with control to keep my pinky mashed on&#xA;that control key.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ~/.tmux.conf&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; C-w new-window -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;work-session-picker&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ta ~/work&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; C-g new-window -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;git-session-picker&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ta ~/git&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;!-- ![create a new session from my ~/git directory](https://images.waylonwalker.com/tmux-navigation-2021-prefix+c-g.gif &#34;using prefix+c-g&#34;) --&gt;&#xA;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-prefix+c-g.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-prefix+c-g.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;prefixc-j&#34;&gt;prefix+c-j &lt;a href=&#34;#prefixc-j&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;jump to session&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now that I have &lt;code&gt;ta&lt;/code&gt; rocking with a good create or attach setup, I am rarely&#xA;toggling through a list of running sessions, but I am doing it with&#xA;&lt;code&gt;prefix+c-j&lt;/code&gt; when I do it. Keeping my finger on control and pressing &lt;code&gt;&amp;lt;space&amp;gt;+j&lt;/code&gt;.&#xA;This keybinding uses fzf to fuzzy match to an existing session and attach.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; C-j new-window -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;session-switcher&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;tmux list-sessions | sed -E &amp;#39;s/:.*&lt;/span&gt;$&lt;span class=&#34;s2&#34;&gt;//&amp;#39; | grep -v \&amp;#34;^&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;tmux display-message -p &lt;span class=&#34;s1&#34;&gt;&amp;#39;#S&amp;#39;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;\$\&amp;#34; | fzf --reverse | xargs tmux switch-client -t&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;!-- ![jump to existing sessions with prefix+c-j](https://images.waylonwalker.com/tmux-navigation-2021-prefix+c-j.gif &#34;using prefix+c-j&#34;) --&gt;&#xA;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-prefix+c-j.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-prefix+c-j.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;m-n-m-p&#34;&gt;M-N M-P &lt;a href=&#34;#m-n-m-p&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;next/prev&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Next and Previous sessions.  This is super handy when working with under 3&#xA;sessions to be able to cycle through sessions holding &lt;code&gt;shift+alt&lt;/code&gt; and pressing&#xA;&lt;code&gt;n&lt;/code&gt; or &lt;code&gt;p&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;!-- ![jump to next or previous sessions with m-N or m-P](https://images.waylonwalker.com/tmux-navigation-2021-m-N-M-P.gif &#34;using m-N and m-P&#34;) --&gt;&#xA;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-m-N-M-P.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-m-N-M-P.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;tkill&#34;&gt;tkill &lt;a href=&#34;#tkill&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;time to clean up&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;It’s easy to get a long crufty list of sessions running throughout the day.&#xA;Typically this is not too bad on system resources compared to running vscode in&#xA;every working project, but it does make it more challenging to manage and wade&#xA;through the sessions list.  I use a handy shell alias that’s been in my zshrc&#xA;for quite some time.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;tkill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;for s in \$(tmux list-sessions | awk &amp;#39;{print \$1}&amp;#39; | rg &amp;#39;:&amp;#39; -r &amp;#39;&amp;#39; | fzy); do tmux kill-session -t \$s; done;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I don’t have this one set up with a nice hotkey, but it works for my&#xA;fingers.  I often pop open a lower split(&lt;code&gt;M-s&lt;/code&gt;), run &lt;code&gt;tkill&lt;/code&gt;, and close (&lt;code&gt;M-x&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;!-- ![create a new session git-diff switch back to original session with prefix+c-g then use tkill to kill the git-diff session](https://images.waylonwalker.com/tmux-navigation-2021-tkill.gif &#34;tkill example&#34;) --&gt;&#xA;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-tkill.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-tkill.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;last-session&#34;&gt;Last Session &lt;a href=&#34;#last-session&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;back&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;While &lt;code&gt;M-n&lt;/code&gt; and &lt;code&gt;M-p&lt;/code&gt; work well with a small, focused number of sessions, I often&#xA;end up with too many sessions open, and it’s not efficient to remember a double&#xA;&lt;code&gt;M-N&lt;/code&gt; followed by a triple &lt;code&gt;M-P&lt;/code&gt; to get back and forth.  Most often, I want to&#xA;get between two sessions quickly, no matter what the order is.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-B switch-client -l&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-b switch-client -l&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-m-b.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-m-b.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Once I get two sessions back to back, I can switch between them with insane&#xA;speed and precision.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;more-precision&#34;&gt;More Precision &lt;a href=&#34;#more-precision&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;one keystroke&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The final layer of precision is for my most current project. I need to get&#xA;to these with a single keystroke.  These are bound to a set of keybindings that were&#xA;readily available, just above the home row.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; C-t new-session -A -s todo &lt;span class=&#34;s2&#34;&gt;&amp;#34;cd ~/work/todo &amp;amp;&amp;amp; nvim -O backlog.md doing.md done.md&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-i new-session -A -s ww3 &lt;span class=&#34;s2&#34;&gt;&amp;#34;cd ~/git/ww3/ &amp;amp;&amp;amp; nvim&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-o new-session -A -s images_waylonwalker_com &lt;span class=&#34;s2&#34;&gt;&amp;#34;cd ~/git/images.waylonwalker.com/ &amp;amp;&amp;amp; nvim&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-m-i-m-o.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-m-i-m-o.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;These few directories are always at my fingertips, encouraging me to keep better notes&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;And yes, I did steal this last one from &lt;a href=&#34;https://twitter.com/ThePrimeagen&#34;&gt;Harpoon-man&lt;/a&gt; By The Way.&lt;/p&gt;&#xA;&lt;h2 id=&#34;hub-and-spoke&#34;&gt;Hub and Spoke &lt;a href=&#34;#hub-and-spoke&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;M-i M-b&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I have really been digging this hub and spoke workflow where I am rocking away&#xA;on a project hit &lt;code&gt;M-I&lt;/code&gt;, take some notes then hit &lt;code&gt;M-b&lt;/code&gt; to get back to where I&#xA;was.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/tmux-nav-hub-spoke.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/tmux-nav-hub-spoke.png&#34; alt=&#34;hub and spoke&#34;/ data-glightbox=&#34;description: hub and spoke&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Model of my current workflow&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;example&#34;&gt;Example &lt;a href=&#34;#example&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Here is an example of how I use the hub and spoke model to get to notes on my&#xA;blog and back to my project quickly.&lt;/p&gt;&#xA;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-quickly-access-notes.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-quickly-access-notes.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;example-workflow&#34;&gt;Example workflow &lt;a href=&#34;#example-workflow&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;open tmux session with ta&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;prefix+c-g&lt;/code&gt; start work in a project using a fuzzy matcher&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;M-t&lt;/code&gt; over to my todo list&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;M-b&lt;/code&gt; back to my project&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;M-i&lt;/code&gt; to my blog to look up notes/make notes&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;M-b&lt;/code&gt; back to my project&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;prefix+c-g&lt;/code&gt; start work in another project using a fuzzy matcher&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;M-t&lt;/code&gt; over to my todo list&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;M-b&lt;/code&gt; back to my project&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;prefix+c-j&lt;/code&gt; fuzzy back to the first project&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;M-b&lt;/code&gt; back to the second project&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;Please let me know your thoughts.&#xA;&lt;a href=&#34;https://twitter.com/_WaylonWalker&#34;&gt;@waylonwalker&lt;/a&gt;, this one took me a bit&#xA;longer to put together with all of the animated gif’s, but I think it helps&#xA;visually show how I navigate tmux every day.&lt;/p&gt;&#xA;&lt;h2 id=&#34;please-give-it-a-share-if-you-liked-it&#34;&gt;Please give it a share if you liked it &lt;a href=&#34;#please-give-it-a-share-if-you-liked-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you liked it, give it a share and tag me on&#xA;&lt;a href=&#34;https://twitter.com/_WaylonWalker&#34;&gt;twitter&lt;/a&gt;.  I don’t often ask but this&#xA;article took a bit more to put together than my normal post.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;related-links&#34;&gt;Related Links &lt;a href=&#34;#related-links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://twitter.com/christoomey&#34;&gt;Chris Toomey’s&lt;/a&gt; Tmux Course&lt;/li&gt;&#xA;&lt;li&gt;my &lt;a href=&#34;https://github.com/WaylonWalker/devtainer/blob/main/bin/.local/bin/ta&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ta script&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;my &lt;a href=&#34;https://github.com/WaylonWalker/devtainer/blob/main/tmux/.tmux.conf&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;.tmux.conf&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ dereknheiley compactyl</title>
    <id>https://waylonwalker.com/dereknheiley-compactyl/</id>
    <updated>2021-05-11T01:00:28Z</updated>
    <published>2021-05-11T01:00:28Z</published>
    <link href="https://waylonwalker.com/dereknheiley-compactyl/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across compactyl from dereknheiley, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/dereknheiley/compactyl&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;compactyl&lt;/a&gt; from &lt;a href=&#34;https://github.com/dereknheiley&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dereknheiley&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ moduloindustries thinkeys</title>
    <id>https://waylonwalker.com/moduloindustries-thinkeys/</id>
    <updated>2021-05-10T19:48:16Z</updated>
    <published>2021-05-10T19:48:16Z</published>
    <link href="https://waylonwalker.com/moduloindustries-thinkeys/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about thinkeys, an amazing project by moduloindustries. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/moduloindustries/thinkeys&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;thinkeys&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/moduloindustries&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;moduloindustries&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Split ortholinear custom replacement keyboard with TrackPoint for ThinkPad laptops.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Trim unused git branches</title>
    <id>https://waylonwalker.com/trim-branches/</id>
    <updated>2021-05-07T09:47:24Z</updated>
    <published>2021-05-07T09:47:24Z</published>
    <link href="https://waylonwalker.com/trim-branches/" rel="alternate" type="text/html"></link>
    <content type="html">&lt;h2 id=&#34;trim-branches-no-longer-on-origin&#34;&gt;Trim branches no longer on origin &lt;a href=&#34;#trim-branches-no-longer-on-origin&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git remote prune origin --dry-run&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git remote prune origin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;find-branches-already-merged&#34;&gt;Find branches already merged &lt;a href=&#34;#find-branches-already-merged&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# list remote branches that have already been merged into main&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git branch -r --merged&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# list local branches that have already been merged into main&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git branch --merged&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>What is if __name__ == &#34;__main___&#34;, and how do I use it.</title>
    <id>https://waylonwalker.com/if_name_main/</id>
    <updated>2021-05-07T09:47:24Z</updated>
    <published>2021-05-07T09:47:24Z</published>
    <link href="https://waylonwalker.com/if_name_main/" rel="alternate" type="text/html"></link>
    <summary type="text">change_speed = (speed) =&gt; [...document.querySelectorAll(&#39;video&#39;)].map(v =&gt; v.playbackRate=v.playbackRate+speed)</summary>
    <content type="html">&lt;script&gt;&#xA;change_speed = (speed) =&gt; [...document.querySelectorAll(&#39;video&#39;)].map(v =&gt; v.playbackRate=v.playbackRate+speed)&#xA;&lt;/script&gt;&#xA;&lt;p&gt;When a python module is called it is assigned the &lt;code&gt;__name__&lt;/code&gt; of &lt;code&gt;__main__&lt;/code&gt;&#xA;otherwise if it’s imported it will be assigned the &lt;code&gt;__name__&lt;/code&gt; of the module.&lt;/p&gt;&#xA;&lt;h2 id=&#34;concrete-example&#34;&gt;Concrete example &lt;a href=&#34;#concrete-example&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let’s create a module to play with &lt;code&gt;__name__&lt;/code&gt; a bit.  We will call this module&#xA;&lt;code&gt;nodes.py&lt;/code&gt;.  It is a module that we may want to run by it’self or import and use&#xA;in other modules.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;ch&#34;&gt;#!python&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# nodes.py&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;vm&#34;&gt;__name__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;nodes&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;sys&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;__main__&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;you have imported me &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;vm&#34;&gt;__name__&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; from &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sys&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;modules&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vm&#34;&gt;__file__&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;vm&#34;&gt;__name__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;you are running me as main&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I have set this module up to execute one of two if statements based on whether&#xA;the module it’self is being ran or if the module is being imported.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Note it is not common to have a &lt;code&gt;if __name__ == &amp;#34;nodes&amp;#34;:&lt;/code&gt; block, this is just&#xA;for demnonstration purposes.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;running-python-nodespy&#34;&gt;running python nodes.py &lt;a href=&#34;#running-python-nodespy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Running a python script with the command &lt;code&gt;python &amp;lt;filename.py&amp;gt;&lt;/code&gt; will execute&#xA;your script top to bottom.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python nodes.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;This will print out &lt;code&gt;you are running me as main&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/if_name_main_python_nodes.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/if_name_main_python_nodes.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/install-miniconda/&#34; class=&#34;wikilink&#34; data-title=&#34;How to Install miniconda on linux (from the command line only)&#34; data-description=&#34;Installing miniconda from only the command line can be a bit of an intimidating task your first time. Lets walk through how to do it.&#34; data-date=&#34;2020-08-10&#34; data-preview=&#34;Installing miniconda from only the command line can be a bit of an intimidating task your first time. Lets walk through how to do it.&#34;&gt;How to Install miniconda on linux (from the command line only)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If you don’t already have python installed try using miniconda or replit.com&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;running-nodespy&#34;&gt;running ./nodes.py &lt;a href=&#34;#running-nodespy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can also simply execute the script from bash if you first set the module to&#xA;be executable.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;chmod +x nodes.py&#xA;./nodes.py&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/if_name_main_nodes.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/if_name_main_nodes.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Note once you have set the file to be executable, it will remain executable&#xA;&lt;code&gt;chmod +x nodes.py&lt;/code&gt; is only needed one time, even if you edit the file.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;pipelinepy&#34;&gt;pipeline.py &lt;a href=&#34;#pipelinepy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let’s create a second module &lt;code&gt;pipeline.py&lt;/code&gt; and import the first module &lt;code&gt;nodes&lt;/code&gt; and see what happens.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;ch&#34;&gt;#!python&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# pipeline.py&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;nodes&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Just like nodes we can run pipeline either way if it’s executable&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python pipeline.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# must run chmod +x pipeline.py first.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./pipeline.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Either way it will print out &lt;code&gt;you have imported me nodes from ./pipeline.py&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/if_name_main_pipeline.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/if_name_main_pipeline.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;repl&#34;&gt;REPL &lt;a href=&#34;#repl&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If we were to &lt;code&gt;import nodes&lt;/code&gt; from the repl we would see an error in this case,&#xA;due to the fact that there is no &lt;code&gt;__main__&lt;/code&gt; file since it’s a repl session.&lt;/p&gt;&#xA;&lt;h2 id=&#34;use-cases&#34;&gt;Use Cases &lt;a href=&#34;#use-cases&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The main use case for &lt;code&gt;if __name__ == &amp;#34;__main__&amp;#34;:&lt;/code&gt; is flexibility.  Simply&#xA;importing a module should not execute any code, print anything to the screen,&#xA;change your filesystem, or generally have any side effects in most cases. It is&#xA;something that most python users would not expect.  We can use this block to&#xA;make it such that the module can be both imported and executed.&lt;/p&gt;&#xA;&lt;h3 id=&#34;rich&#34;&gt;rich &lt;a href=&#34;#rich&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://github.com/willmcgugan/rich&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rich&lt;/a&gt; library uses it to make&#xA;examples of each module print to the screen if it’s executed.  I personally&#xA;think this is a fantastic idea.&lt;/p&gt;&#xA;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/if_name_main_rich.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/if_name_main_rich.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;h3 id=&#34;etl&#34;&gt;etl &lt;a href=&#34;#etl&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;In my world of data analysis we often setup a script of functions that will&#xA;behave as an etl pipeline of sorts.  Since we may want to reuse some of these&#xA;functions in other scripts it’s common to hide the actual execution of these&#xA;functions in a &lt;code&gt;if __name__ == &amp;#34;__main__&amp;#34;:&lt;/code&gt; block so that we don’t start making&#xA;changes to the data simply by importing the module.&lt;/p&gt;&#xA;&lt;h3 id=&#34;cli&#34;&gt;cli &lt;a href=&#34;#cli&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Most cli applications will leverage &lt;code&gt;if __name__ == &amp;#34;__main__&amp;#34;:&lt;/code&gt; to run&#xA;something when called as a script instead of being imported. This allows us dt&#xA;do things such as testing much easier.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Check out the example on the first page of the&#xA;&lt;a href=&#34;https://click.palletsprojects.com/en/7.x/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/click.palletsprojects.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/click.palletsprojects.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;click&lt;/a&gt; framework’s docs&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;recap&#34;&gt;Recap &lt;a href=&#34;#recap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;if __name__ == &amp;#34;__main__&amp;#34;:&lt;/code&gt; is not so cryptic or scary, it’s just looking to&#xA;see if this module was called as a script or imported from somewhere else, and&#xA;executing some different behavior based on how it was called.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;vm&#34;&gt;__name__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;you are running me as main&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;related-links&#34;&gt;Related Links &lt;a href=&#34;#related-links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;example from &lt;a href=&#34;https://github.com/willmcgugan/rich/blob/master/rich/live.py#L271&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rich.live&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://click.palletsprojects.com/en/7.x/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/click.palletsprojects.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/click.palletsprojects.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;click&lt;/a&gt; framework’s docs&lt;/li&gt;&#xA;&lt;li&gt;try it yourself in your browser with &lt;a href=&#34;https://replit.com&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/replit.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/replit.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;replit.com&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;StackOverflow: &lt;a href=&#34;https://stackoverflow.com/questions/419163/what-does-if-name-main-do&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/stackoverflow.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/stackoverflow.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;What does if &lt;strong&gt;name&lt;/strong&gt; == “&lt;strong&gt;main&lt;/strong&gt;”: do?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Create a Virtual File Gallery with Symlinks</title>
    <id>https://waylonwalker.com/symlink-gallery/</id>
    <updated>2021-05-05T08:23:33Z</updated>
    <published>2021-05-05T08:23:33Z</published>
    <link href="https://waylonwalker.com/symlink-gallery/" rel="alternate" type="text/html"></link>
    <summary type="text">Creating a directory that is a union of several directories can be achieved with a few symlinks at the command line.</summary>
    <content type="html">&lt;p&gt;Creating a directory that is a union of several directories can be achieved&#xA;with a few symlinks at the command line.&lt;/p&gt;&#xA;&lt;h2 id=&#34;creating-a-virtual-file-gallery&#34;&gt;Creating a Virtual File Gallery &lt;a href=&#34;#creating-a-virtual-file-gallery&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is how I am creating a virtual directory of all my projects that is a&#xA;combination of both work and not-work projects.  I am creating symlinks for&#xA;every directory under &lt;code&gt;~/work&lt;/code&gt; and &lt;code&gt;~/git&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -rf ~/projects&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir ~/projects&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -sf ~/work/* ~/projects&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -sf ~/git/* ~/projects&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;⚠ Notice that first I am recreating the directory each time. This will ensure&#xA;that any project that is deleted from their actual directory is removed from&#xA;the virtual gallery.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;updating-the-gallery&#34;&gt;Updating the gallery &lt;a href=&#34;#updating-the-gallery&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Since links are always kept up to date without any extra work, all the data is&#xA;still in the same place it started.  But as new directories are added to any&#xA;project directory they will not be automatically added to the virtual gallery.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;cron&lt;/li&gt;&#xA;&lt;li&gt;bashrc/zshrc&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If you’re concerned about system resources, you can add it to a cron job to run&#xA;at a regular schedule that makes sense to you.  For me, I just popped those 4&#xA;lines right in my &lt;code&gt;~/.zshrc&lt;/code&gt;.  It’s a bit overkill, maybe bloat, but it runs in&#xA;an impercieveable amount of time.&lt;/p&gt;&#xA;&lt;h2 id=&#34;automatically-cd-to-the-real-directory&#34;&gt;Automatically CD to the real directory &lt;a href=&#34;#automatically-cd-to-the-real-directory&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;When you cd into a &lt;code&gt;~/projects/my-proj&lt;/code&gt; directory, your &lt;code&gt;$PWD&lt;/code&gt; will still be&#xA;&lt;code&gt;~/projects/my-proj&lt;/code&gt;.  I did not want this for my use case.  I wanted to follow&#xA;the symlink to the real directory.  I found two options that worked for me.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;alias cd=&amp;#39;cd -P&amp;#39;&#xA;set -o physical&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Add either of these to your &lt;code&gt;.bashrc&lt;/code&gt;/&lt;code&gt;.zshrc&lt;/code&gt; to follow symlinks to the&#xA;actual directory.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ dandavison delta</title>
    <id>https://waylonwalker.com/dandavison-delta/</id>
    <updated>2021-05-02T16:14:24Z</updated>
    <published>2021-05-02T16:14:24Z</published>
    <link href="https://waylonwalker.com/dandavison-delta/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered delta by dandavison, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/dandavison/delta&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;delta&lt;/a&gt; by &lt;a href=&#34;https://github.com/dandavison&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dandavison&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;A syntax-highlighting pager for &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt;, diff, grep, and blame output&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ monkeytypegame monkeytype</title>
    <id>https://waylonwalker.com/monkeytypegame-monkeytype/</id>
    <updated>2021-05-02T15:12:57Z</updated>
    <published>2021-05-02T15:12:57Z</published>
    <link href="https://waylonwalker.com/monkeytypegame-monkeytype/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred monkeytype by monkeytypegame. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/monkeytypegame/monkeytype&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;monkeytype&lt;/a&gt; by &lt;a href=&#34;https://github.com/monkeytypegame&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;monkeytypegame&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;The most customizable typing website with a minimalistic design and a ton of features. Test yourself in various modes, track your progress and improve your speed.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ jbyuki ntangle.nvim</title>
    <id>https://waylonwalker.com/jbyuki-ntangle-nvim/</id>
    <updated>2021-04-29T12:41:48Z</updated>
    <published>2021-04-29T12:41:48Z</published>
    <link href="https://waylonwalker.com/jbyuki-ntangle-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out ntangle.nvim by jbyuki. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/jbyuki/ntangle.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ntangle.nvim&lt;/a&gt; by &lt;a href=&#34;https://github.com/jbyuki&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jbyuki&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;literate programming for neovim&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ fabi1cazenave termopen.vim</title>
    <id>https://waylonwalker.com/fabi1cazenave-termopen-vim/</id>
    <updated>2021-04-26T12:38:10Z</updated>
    <published>2021-04-26T12:38:10Z</published>
    <link href="https://waylonwalker.com/fabi1cazenave-termopen-vim/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on termopen.vim, created by fabi1cazenave.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/fabi1cazenave/termopen.vim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;termopen.vim&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/fabi1cazenave&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fabi1cazenave&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Easy integration of TUI apps in Neovim: Ranger, LF, Tig… Tetris…&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ karimknaebel nvim-lspinstall</title>
    <id>https://waylonwalker.com/karimknaebel-nvim-lspinstall/</id>
    <updated>2021-04-26T12:19:21Z</updated>
    <published>2021-04-26T12:19:21Z</published>
    <link href="https://waylonwalker.com/karimknaebel-nvim-lspinstall/" rel="alternate" type="text/html"></link>
    <summary type="text">karimknaebel has done a fantastic job with nvim-lspinstall. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/karimknaebel&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;karimknaebel&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/karimknaebel/nvim-lspinstall&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-lspinstall&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Provides the missing :LspInstall for nvim-lspconfig&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ kabouzeid nvim-lspinstall</title>
    <id>https://waylonwalker.com/kabouzeid-nvim-lspinstall/</id>
    <updated>2021-04-26T12:19:21Z</updated>
    <published>2021-04-26T12:19:21Z</published>
    <link href="https://waylonwalker.com/kabouzeid-nvim-lspinstall/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by nvim-lspinstall from kabouzeid.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/kabouzeid/nvim-lspinstall&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-lspinstall&lt;/a&gt; from &lt;a href=&#34;https://github.com/kabouzeid&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kabouzeid&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Provides the missing :LspInstall for nvim-lspconfig&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Conni2461 dotfiles</title>
    <id>https://waylonwalker.com/conni2461-dotfiles/</id>
    <updated>2021-04-23T13:04:09Z</updated>
    <published>2021-04-23T13:04:09Z</published>
    <link href="https://waylonwalker.com/conni2461-dotfiles/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? dotfiles by Conni2461.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/Conni2461/dotfiles&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dotfiles&lt;/a&gt; by &lt;a href=&#34;https://github.com/Conni2461&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Conni2461&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Current dotfiles and scripts&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>How to Install micromamba on linux (from the comamnd line only)</title>
    <id>https://waylonwalker.com/install-micromamba/</id>
    <updated>2021-04-21T13:32:27Z</updated>
    <published>2021-04-21T13:32:27Z</published>
    <link href="https://waylonwalker.com/install-micromamba/" rel="alternate" type="text/html"></link>
    <summary type="text">I really like using conda () as my python virtual environment manager of choice. It&#39;s simple and it includes its own python interpreter using the version...</summary>
    <content type="html">&lt;p&gt;I really like using conda (&lt;code&gt;miniconda&lt;/code&gt;) as my python &lt;a href=&#34;/virtual-environment/&#34; class=&#34;glossary-term&#34; title=&#34;Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...&#34;&gt;virtual environment&lt;/a&gt;&#xA;manager of choice.  It’s simple and it includes its own python interpreter&#xA;using the version that I specify at creation.&lt;/p&gt;&#xA;&lt;h2 id=&#34;mamba&#34;&gt;Mamba &lt;a href=&#34;#mamba&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;from their &lt;a href=&#34;https://github.com/mamba-org/mamba&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;readme&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;Mamba is a reimplementation of the conda package manager in C++.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;parallel downloading of repository data and package files using multi-threading&lt;/li&gt;&#xA;&lt;li&gt;libsolv for much faster dependency solving, a state of the art library used in the RPM package manager of Red Hat, Fedora and OpenSUSE&lt;/li&gt;&#xA;&lt;li&gt;core parts of mamba are implemented in C++ for maximum efficiency&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;At the same time, mamba utilize the same command line parser, package&#xA;installation and deinstallation code and transaction verification routines as&#xA;conda to stay as compatible as possible.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;installing-micromamba&#34;&gt;Installing Micromamba &lt;a href=&#34;#installing-micromamba&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Similar to miniconda micromamba can be installed with a few lines of bash&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget -qO- https://micromamba.snakepit.net/api/micromamba/linux-64/latest &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tar -xvj bin/micromamba&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./bin/micromamba shell init -s bash -p ~/micromamba&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; ~/.bashrc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;creating-environments-with-micromamba&#34;&gt;Creating Environments with Micromamba &lt;a href=&#34;#creating-environments-with-micromamba&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Creating new environments with micromamba is pretty similar to using conda.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;micromamba create -n mamba-new &lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;3.9 -y -c conda-forge&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;-c-is-required&#34;&gt;-c is required &lt;a href=&#34;#-c-is-required&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I was unable to figure out how to configure channels to &lt;code&gt;micromamba&lt;/code&gt;, so I&#xA;needed to add &lt;code&gt;-c conda-forge&lt;/code&gt; to my commands.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                           __&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          __  ______ ___  ____ _____ ___  / /_  ____ _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         / / / / __ &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;__ &lt;span class=&#34;se&#34;&gt;\/&lt;/span&gt; __ &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;/ __ &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;__ &lt;span class=&#34;se&#34;&gt;\/&lt;/span&gt; __ &lt;span class=&#34;se&#34;&gt;\/&lt;/span&gt; __ &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        / /_/ / / / / / / /_/ / / / / / / /_/ / /_/ /&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       / .___/_/ /_/ /_/&lt;span class=&#34;se&#34;&gt;\_&lt;/span&gt;_,_/_/ /_/ /_/_.___/&lt;span class=&#34;se&#34;&gt;\_&lt;/span&gt;_,_/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      /_/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;WARNING No &lt;span class=&#34;s1&#34;&gt;&amp;#39;channels&amp;#39;&lt;/span&gt; specified&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Encountered problems &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; solving:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  - nothing provides requested python 3.9**&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ERROR   Could not solve &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; environment specs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;⚠ micromamba thows this error when &lt;code&gt;-c conda-forge&lt;/code&gt; is missing from the create command.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;speed&#34;&gt;Speed &lt;a href=&#34;#speed&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;micromamba is built for speed.  I tried it out in a replit.com session, while&#xA;it felt quite snappy creating a new environment was still within a few seconds&#xA;of conda on subsequent environment creations.  Their marketing says it should&#xA;be faster, but for what I use conda for I didn’t see it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;pip&#34;&gt;pip &lt;a href=&#34;#pip&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I used conda install years ago while on windows machines struggling to compile&#xA;c-extensions and install certain troublesome packages, but I haven’t used a&#xA;&lt;code&gt;conda install&lt;/code&gt; in years, pip works just fine for my use.&lt;/p&gt;&#xA;&lt;h2 id=&#34;useful-links&#34;&gt;Useful Links &lt;a href=&#34;#useful-links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;GitHub: &lt;a href=&#34;https://github.com/mamba-org/mamba&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/mamba-org/mamba&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Gitter: &lt;a href=&#34;https://gitter.im/QuantStack/Lobby&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/gitter.im.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/gitter.im.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://gitter.im/QuantStack/Lobby&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Documentation: &lt;a href=&#34;https://mamba.readthedocs.io/en/latest/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/mamba.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/mamba.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://mamba.readthedocs.io/en/latest/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nvim-treesitter nvim-treesitter-textobjects</title>
    <id>https://waylonwalker.com/nvim-treesitter-nvim-treesitter-textobjects/</id>
    <updated>2021-04-20T20:11:13Z</updated>
    <published>2021-04-20T20:11:13Z</published>
    <link href="https://waylonwalker.com/nvim-treesitter-nvim-treesitter-textobjects/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out nvim-treesitter and their project nvim-treesitter-textobjects.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/nvim-treesitter&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-treesitter&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/nvim-treesitter/nvim-treesitter-textobjects&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-treesitter-textobjects&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nvim-telescope telescope-project.nvim</title>
    <id>https://waylonwalker.com/nvim-telescope-telescope-project-nvim/</id>
    <updated>2021-04-20T20:10:15Z</updated>
    <published>2021-04-20T20:10:15Z</published>
    <link href="https://waylonwalker.com/nvim-telescope-telescope-project-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">telescope-project.nvim by nvim-telescope is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/nvim-telescope/telescope-project.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;telescope-project.nvim&lt;/a&gt; by &lt;a href=&#34;https://github.com/nvim-telescope&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-telescope&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nvimdev lspsaga.nvim</title>
    <id>https://waylonwalker.com/nvimdev-lspsaga-nvim/</id>
    <updated>2021-04-19T12:52:14Z</updated>
    <published>2021-04-19T12:52:14Z</published>
    <link href="https://waylonwalker.com/nvimdev-lspsaga-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across lspsaga.nvim from nvimdev, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/nvimdev/lspsaga.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lspsaga.nvim&lt;/a&gt; from &lt;a href=&#34;https://github.com/nvimdev&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvimdev&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;improve neovim lsp experience&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ rmagatti auto-session</title>
    <id>https://waylonwalker.com/rmagatti-auto-session/</id>
    <updated>2021-04-18T01:37:39Z</updated>
    <published>2021-04-18T01:37:39Z</published>
    <link href="https://waylonwalker.com/rmagatti-auto-session/" rel="alternate" type="text/html"></link>
    <summary type="text">rmagatti has done a fantastic job with auto-session. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/rmagatti&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rmagatti&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/rmagatti/auto-session&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;auto-session&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;A small automated session manager for Neovim&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Vim Wsl Clipboard</title>
    <id>https://waylonwalker.com/vim-wsl-clipboard/</id>
    <updated>2021-04-17T00:00:00Z</updated>
    <published>2021-04-17T00:00:00Z</published>
    <link href="https://waylonwalker.com/vim-wsl-clipboard/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve long used neovim from within windows wsl, and for far too long, I went without a proper way to get text out of it and into windows.</summary>
    <content type="html">&lt;p&gt;I’ve long used neovim from within windows wsl, and for far too long, I went&#xA;without a proper way to get text out of it and into windows.&lt;/p&gt;&#xA;&lt;h2 id=&#34;wsl-has-access-to-cmd-applications&#34;&gt;wsl has access to cmd applications &lt;a href=&#34;#wsl-has-access-to-cmd-applications&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;wsl can access clip.exe.  You can do some cool things with it, such as&#xA;cat a file into the clipboard, sending output from a command to the clipboard,&#xA;or set an autocmd group in vim to send yank to the windows clipboard.&lt;/p&gt;&#xA;&lt;h2 id=&#34;using-clipexe&#34;&gt;using clip.exe &lt;a href=&#34;#using-clipexe&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let’s say you want to send a teammate the tail of a log file over chat. You can&#xA;tail the file into clip.exe.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tail -n &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; info.log &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; clip.exe&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;pipe streams of text into clip.exe&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;make-it-a-bit-more-natural&#34;&gt;make it a bit more natural &lt;a href=&#34;#make-it-a-bit-more-natural&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I recently made mine feel a bit more natural by aliasing it to clip.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;clip&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;clip.exe&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;pop this in your ~/.bashrc or ~/.zshrc&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;yanking-to-windows-clipboard-from-vim&#34;&gt;yanking to windows clipboard from vim &lt;a href=&#34;#yanking-to-windows-clipboard-from-vim&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I use neovim as my daily text editor and its a pain to share code with a&#xA;teammate over chat, stack overflow, into a gist, or whatever you need.  The&#xA;following snippet has been quite useful and flawless for me.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;system&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;uname -r&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=~&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Microsoft&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;augroup&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Yank&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;!&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;TextYankPost&lt;/span&gt; * :&lt;span class=&#34;nx&#34;&gt;call&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;system&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/mnt/c/windows/system32/clip.exe &amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;@&amp;#34;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;augroup&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;END&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;endif&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;add this to your ~/.vimrc or your ~/.config/nvim/init.vim&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;wsl2&#34;&gt;Wsl2 &lt;a href=&#34;#wsl2&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Based on some&#xA;&lt;a href=&#34;https://github.com/WaylonWalker/waylonwalker.com/issues/4&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;feedback&lt;/a&gt;&#xA;from &lt;a href=&#34;https://github.com/l-sannin&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;l-sannin&lt;/a&gt; the ‘uname -r’ command now&#xA;returns &lt;code&gt;uname -r command returns &amp;#39;5.10.16.3-microsoft-standard-WSL2&amp;#39;&lt;/code&gt;&#xA;So you will need an all lowercase microsoft.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;system&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;uname -r&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=~&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;microsoft&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;augroup&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Yank&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;!&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;TextYankPost&lt;/span&gt; * :&lt;span class=&#34;nx&#34;&gt;call&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;system&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/mnt/c/windows/system32/clip.exe &amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;@&amp;#34;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;augroup&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;END&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;endif&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Th3Whit3Wolf onebuddy</title>
    <id>https://waylonwalker.com/th3whit3wolf-onebuddy/</id>
    <updated>2021-04-16T13:41:57Z</updated>
    <published>2021-04-16T13:41:57Z</published>
    <link href="https://waylonwalker.com/th3whit3wolf-onebuddy/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by onebuddy from Th3Whit3Wolf.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/Th3Whit3Wolf/onebuddy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;onebuddy&lt;/a&gt; from &lt;a href=&#34;https://github.com/Th3Whit3Wolf&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Th3Whit3Wolf&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Light and dark atom one theme&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ awesome-streamers awesome-streamerrc</title>
    <id>https://waylonwalker.com/awesome-streamers-awesome-streamerrc/</id>
    <updated>2021-04-16T13:21:20Z</updated>
    <published>2021-04-16T13:21:20Z</published>
    <link href="https://waylonwalker.com/awesome-streamers-awesome-streamerrc/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by awesome-streamerrc from awesome-streamers.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/awesome-streamers/awesome-streamerrc&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;awesome-streamerrc&lt;/a&gt; from &lt;a href=&#34;https://github.com/awesome-streamers&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;awesome-streamers&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Dotfiles for various streamers on Twitch.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nvim-telescope telescope-fzf-native.nvim</title>
    <id>https://waylonwalker.com/nvim-telescope-telescope-fzf-native-nvim/</id>
    <updated>2021-04-15T23:07:23Z</updated>
    <published>2021-04-15T23:07:23Z</published>
    <link href="https://waylonwalker.com/nvim-telescope-telescope-fzf-native-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on telescope-fzf-native.nvim, created by nvim-telescope.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/nvim-telescope/telescope-fzf-native.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;telescope-fzf-native.nvim&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/nvim-telescope&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-telescope&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;FZF sorter for telescope written in c&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>kedro replit</title>
    <id>https://waylonwalker.com/kedro172_replit/</id>
    <updated>2021-04-15T12:37:29Z</updated>
    <published>2021-04-15T12:37:29Z</published>
    <link href="https://waylonwalker.com/kedro172_replit/" rel="alternate" type="text/html"></link>
    <summary type="text">I am trying to see what an embeded replit</summary>
    <content type="html">&lt;p&gt;I am trying to see what an embeded replit&lt;/p&gt;&#xA;&lt;iframe height=&#34;400px&#34; width=&#34;100%&#34; src=&#34;https://replit.com/@WaylonWalker/kedro-172?lite=true&#34; scrolling=&#34;no&#34; frameborder=&#34;no&#34; allowtransparency=&#34;true&#34; allowfullscreen=&#34;true&#34; sandbox=&#34;allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-modals&#34;&gt;&lt;/iframe&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ euclidianAce ltreesitter</title>
    <id>https://waylonwalker.com/euclidianace-ltreesitter/</id>
    <updated>2021-04-14T15:05:07Z</updated>
    <published>2021-04-14T15:05:07Z</published>
    <link href="https://waylonwalker.com/euclidianace-ltreesitter/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? ltreesitter by euclidianAce.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/euclidianAce/ltreesitter&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ltreesitter&lt;/a&gt; by &lt;a href=&#34;https://github.com/euclidianAce&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;euclidianAce&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Standalone tree sitter bindings for the Lua language&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ hadronized hop.nvim</title>
    <id>https://waylonwalker.com/hadronized-hop-nvim/</id>
    <updated>2021-04-12T13:22:58Z</updated>
    <published>2021-04-12T13:22:58Z</published>
    <link href="https://waylonwalker.com/hadronized-hop-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by hop.nvim from hadronized.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/hadronized/hop.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;hop.nvim&lt;/a&gt; from &lt;a href=&#34;https://github.com/hadronized&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;hadronized&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Neovim motions on speed!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ arl gitmux</title>
    <id>https://waylonwalker.com/arl-gitmux/</id>
    <updated>2021-04-10T13:48:18Z</updated>
    <published>2021-04-10T13:48:18Z</published>
    <link href="https://waylonwalker.com/arl-gitmux/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by gitmux from arl.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/arl/gitmux&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gitmux&lt;/a&gt; from &lt;a href=&#34;https://github.com/arl&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;arl&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;💻 &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;Git&lt;/a&gt; in your tmux status bar&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ jab bidict</title>
    <id>https://waylonwalker.com/jab-bidict/</id>
    <updated>2021-04-08T22:12:23Z</updated>
    <published>2021-04-08T22:12:23Z</published>
    <link href="https://waylonwalker.com/jab-bidict/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out bidict by jab. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/jab/bidict&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;bidict&lt;/a&gt; by &lt;a href=&#34;https://github.com/jab&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jab&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;The bidirectional mapping library for Python.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ photopea photopea</title>
    <id>https://waylonwalker.com/photopea-photopea/</id>
    <updated>2021-04-07T23:46:23Z</updated>
    <published>2021-04-07T23:46:23Z</published>
    <link href="https://waylonwalker.com/photopea-photopea/" rel="alternate" type="text/html"></link>
    <summary type="text">photopea by photopea is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/photopea/photopea&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;photopea&lt;/a&gt; by &lt;a href=&#34;https://github.com/photopea&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;photopea&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;Photopea is online image editor&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tehmaze lolcat</title>
    <id>https://waylonwalker.com/tehmaze-lolcat/</id>
    <updated>2021-04-07T19:54:02Z</updated>
    <published>2021-04-07T19:54:02Z</published>
    <link href="https://waylonwalker.com/tehmaze-lolcat/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about lolcat, an amazing project by tehmaze. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/tehmaze/lolcat&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lolcat&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/tehmaze&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tehmaze&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Rainbows and unicorns (without Ruby! jay!)&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ charmbracelet bubbles</title>
    <id>https://waylonwalker.com/charmbracelet-bubbles/</id>
    <updated>2021-04-07T12:34:06Z</updated>
    <published>2021-04-07T12:34:06Z</published>
    <link href="https://waylonwalker.com/charmbracelet-bubbles/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about bubbles, an amazing project by charmbracelet. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/charmbracelet/bubbles&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;bubbles&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/charmbracelet&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;charmbracelet&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;TUI components for Bubble Tea 🫧&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ charmbracelet lipgloss</title>
    <id>https://waylonwalker.com/charmbracelet-lipgloss/</id>
    <updated>2021-04-07T03:17:31Z</updated>
    <published>2021-04-07T03:17:31Z</published>
    <link href="https://waylonwalker.com/charmbracelet-lipgloss/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out charmbracelet and their project lipgloss.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/charmbracelet&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;charmbracelet&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/charmbracelet/lipgloss&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lipgloss&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Style definitions for nice terminal layouts 👄&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nvim-lua plenary.nvim</title>
    <id>https://waylonwalker.com/nvim-lua-plenary-nvim/</id>
    <updated>2021-04-05T15:38:12Z</updated>
    <published>2021-04-05T15:38:12Z</published>
    <link href="https://waylonwalker.com/nvim-lua-plenary-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">plenary.nvim by nvim-lua is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/nvim-lua/plenary.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;plenary.nvim&lt;/a&gt; by &lt;a href=&#34;https://github.com/nvim-lua&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-lua&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;plenary: full; complete; entire; absolute; unqualified. All the lua functions I don’t want to write twice.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Pytest capsys</title>
    <id>https://waylonwalker.com/pytest-capsys/</id>
    <updated>2021-04-05T08:46:08Z</updated>
    <published>2021-04-05T08:46:08Z</published>
    <link href="https://waylonwalker.com/pytest-capsys/" rel="alternate" type="text/html"></link>
    <summary type="text">Testing print/log statements in pytest can be a bit tricky, capsys makes it super easy, but I often struggle to find it.</summary>
    <content type="html">&lt;p&gt;Testing print/log statements in pytest can be a bit tricky, capsys makes it&#xA;super easy, but I often struggle to find it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;capsys&#34;&gt;capsys &lt;a href=&#34;#capsys&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;capsys is a builtin pytest fixture that can be passed into any test to capture&#xA;stdin/stdout. For a more comprehensive description check out the docs on&#xA;&lt;a href=&#34;https://docs.pytest.org/en/stable/capture.html#accessing-captured-output-from-a-test-function&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/docs.pytest.org.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/docs.pytest.org.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;capsys&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;using-capsys&#34;&gt;using capsys &lt;a href=&#34;#using-capsys&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Simply create a test function that accepts capsys as an argument and pytest&#xA;will give you a capsys opject.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;test_print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;capsys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;hello&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;captured&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;capsys&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;readouterr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;assert&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;hello&amp;#39;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;captured&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;out&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;world&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;captured&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;capsys&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;readouterr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;assert&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;world&amp;#39;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;captured&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;out&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ WaylonWalker kedro-diff</title>
    <id>https://waylonwalker.com/waylonwalker-kedro-diff/</id>
    <updated>2021-04-02T02:04:05Z</updated>
    <published>2021-04-02T02:04:05Z</published>
    <link href="https://waylonwalker.com/waylonwalker-kedro-diff/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by kedro-diff from WaylonWalker.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/WaylonWalker/kedro-diff&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-diff&lt;/a&gt; from &lt;a href=&#34;https://github.com/WaylonWalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;WaylonWalker&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;quickly diff kedro history&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ThePrimeagen git-worktree.nvim</title>
    <id>https://waylonwalker.com/theprimeagen-git-worktree-nvim/</id>
    <updated>2021-04-02T01:23:26Z</updated>
    <published>2021-04-02T01:23:26Z</published>
    <link href="https://waylonwalker.com/theprimeagen-git-worktree-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">I like ThePrimeagen&#39;s project git-worktree.nvim.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/ThePrimeagen&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ThePrimeagen’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/ThePrimeagen/git-worktree.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;git-worktree.nvim&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ kuator nvim</title>
    <id>https://waylonwalker.com/kuator-nvim/</id>
    <updated>2021-04-01T03:19:31Z</updated>
    <published>2021-04-01T03:19:31Z</published>
    <link href="https://waylonwalker.com/kuator-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out nvim by kuator. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/kuator/nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim&lt;/a&gt; by &lt;a href=&#34;https://github.com/kuator&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kuator&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;There are many neovim configurations, but this one is mine…&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ jamesabel awsimple</title>
    <id>https://waylonwalker.com/jamesabel-awsimple/</id>
    <updated>2021-03-29T13:41:24Z</updated>
    <published>2021-03-29T13:41:24Z</published>
    <link href="https://waylonwalker.com/jamesabel-awsimple/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? awsimple by jamesabel.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/jamesabel/awsimple&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;awsimple&lt;/a&gt; by &lt;a href=&#34;https://github.com/jamesabel&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jamesabel&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Simple API for basic AWS services&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Building Rich a Dev Server</title>
    <id>https://waylonwalker.com/markata-dev-server/</id>
    <updated>2021-03-27T11:23:26Z</updated>
    <published>2021-03-27T11:23:26Z</published>
    <link href="https://waylonwalker.com/markata-dev-server/" rel="alternate" type="text/html"></link>
    <summary type="text">**</summary>
    <content type="html">&lt;p&gt;&lt;strong&gt;Draft Post&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;I’ve really been digging &lt;a href=&#34;https://twitter.com/willmcgugan&#34;&gt;&lt;/a&gt;&lt;a href=&#34;https://willmcgugan.github.io&#34; class=&#34;mention  has-avatar has-avatar-before&#34; data-name=&#34;Will McGugan&#34; data-bio=&#34;Will McGugan’s essays&#34; data-avatar=&#34;http://willmcgugan.github.io/images/will2025.jpeg&#34; data-handle=&#34;@willmcgugan&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/willmcgugan.github.io.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/willmcgugan.github.io.png&#34;&gt;@willmcgugan&lt;/a&gt;’s&#xA;&lt;a href=&#34;https://github.com/willmcgugan/rich&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rich&lt;/a&gt; library for creating TUI like&#xA;interfaces in python. I’ve only recently started to take full advantage of it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;dev-server&#34;&gt;Dev Server &lt;a href=&#34;#dev-server&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I am working on a project in which I want to have a dev&#xA;server running continuously in the background. I really&#xA;like dev servers theat automatically chooose an unused&#xA;port and list out the running pid so that I can kill it if&#xA;I need to.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;automatic port number&lt;/li&gt;&#xA;&lt;li&gt;auto-restart&lt;/li&gt;&#xA;&lt;li&gt;display &lt;em&gt;( port, pid, uptime )&lt;/em&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;finding-the-port&#34;&gt;finding the port &lt;a href=&#34;#finding-the-port&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I am very novice at best when it comes to sockets, the following function came&#xA;from searching StackOverflow for how to tell if a port is in use. I&#xA;recursively check if a port is being used, if it is I increment by one until I&#xA;find an unused port to return.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;find_port&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;port&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;8000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Find a port not in ues starting at given port&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;socket&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;socket&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;socket&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;socket&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AF_INET&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;socket&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SOCK_STREAM&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connect_ex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;localhost&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;port&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;find_port&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;port&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;port&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;port&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;the-dev-server&#34;&gt;The Dev Server &lt;a href=&#34;#the-dev-server&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I am going super basic here and just running &lt;code&gt;python -m http.server &amp;lt;port&amp;gt;&lt;/code&gt;.&#xA;It works for what I need it for, it hosts my files for the browser to display,&#xA;and if I try a route without an index.&lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;html&lt;/a&gt; it gives me a decent file list.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;subprocess&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;proc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;subprocess&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Popen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;python&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;-m&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;http.server&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;find_port&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)],)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Optionally if you wanted a live-reload you could opt into &lt;code&gt;live-reload&lt;/code&gt; from&#xA;pypi.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The above snippet will start my dev server on the first open port starting at&#xA;&lt;code&gt;8000&lt;/code&gt; and give me a &lt;code&gt;subprocess.Popen&lt;/code&gt; object. From there I can see a bit of&#xA;information about the process.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# returns the process id&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;proc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pid&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# returns none if proc is still running&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;proc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;poll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;rich&#34;&gt;Rich &lt;a href=&#34;#rich&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;a quick aside&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/willmcgugan/rich&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rich&lt;/a&gt; will assist in creating a beautiful&#xA;terminal interface with minimal effort. Here we are going to build a reuable&#xA;component to later use inside of a rich layout. When using &lt;code&gt;rich.print&lt;/code&gt; or the&#xA;live display rich will execute a &lt;code&gt;__rich__&lt;/code&gt; method on our objects.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Min&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;__rich__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Panel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Panel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;hello world&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;make_min_layout&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;layout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Layout&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;layout&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;split&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Layout&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;upper&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Layout&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;lower&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;layout&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;upper&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;update&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Min&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;layout&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;lower&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;update&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Min&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;layout&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;__repr__&lt;/code&gt; - custom method&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Panel&lt;/code&gt; - box around a renderable&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Layout&lt;/code&gt; - split and nest renderables&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;There are many components to rich, but the basics I am using so far here are&#xA;making my own components with a &lt;code&gt;__repr__&lt;/code&gt; method, &lt;code&gt;Panel&lt;/code&gt;, and &lt;code&gt;Layout&lt;/code&gt;.&#xA;Panel is an object that will by default take up as much space as it can and&#xA;draw a rounded border around itself. Layout is an object that accepts other&#xA;rich renderables, can be split and nested.&lt;/p&gt;&#xA;&lt;h2 id=&#34;final-result&#34;&gt;Final Result &lt;a href=&#34;#final-result&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is a image of the final result running. Here I have&#xA;the server running on the top split and kill the running&#xA;server several times. You will see a quick flash of &lt;span style=&#34;color: red&#34;&gt;server died&lt;/span&gt; followed by the&#xA;sever back up and running on a new pid.&lt;/p&gt;&#xA;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/markata-dev-server-a1.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/markata-dev-server-a1.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Server&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__init__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;auto_restart&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;port&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;find_port&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;start_server&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;auto_restart&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;auto_restart&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;start_server&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;subprocess&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;proc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;subprocess&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Popen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;python&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;-m&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;http.server&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;port&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;stdout&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;subprocess&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PIPE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;stderr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;subprocess&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PIPE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;__rich__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Panel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;proc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;poll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Panel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;[green]serving on port: [gold1]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;port&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; [green]using pid: [gold1]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;proc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pid&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;[/]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;auto_restart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;start_server&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Panel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;[red]server died&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;future-state&#34;&gt;Future State &lt;a href=&#34;#future-state&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Future state this is going to be integrated into the main layout for my&#xA;personal website SSG markata.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/markata-live-server-a2.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/markata-live-server-a2.png&#34; alt=&#34;markata live server&#34;/ data-glightbox=&#34;description: markata live server&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nvim-telescope telescope.nvim</title>
    <id>https://waylonwalker.com/nvim-telescope-telescope-nvim/</id>
    <updated>2021-03-26T16:06:13Z</updated>
    <published>2021-03-26T16:06:13Z</published>
    <link href="https://waylonwalker.com/nvim-telescope-telescope-nvim/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? telescope.nvim by nvim-telescope.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/nvim-telescope/telescope.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;telescope.nvim&lt;/a&gt; by &lt;a href=&#34;https://github.com/nvim-telescope&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-telescope&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Find, Filter, Preview, Pick. All lua, all the time.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ThePrimeagen harpoon</title>
    <id>https://waylonwalker.com/theprimeagen-harpoon/</id>
    <updated>2021-03-26T16:06:10Z</updated>
    <published>2021-03-26T16:06:10Z</published>
    <link href="https://waylonwalker.com/theprimeagen-harpoon/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on harpoon, created by ThePrimeagen.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/ThePrimeagen/harpoon&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;harpoon&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/ThePrimeagen&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ThePrimeagen&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ MaggieAppleton maggieappleton.com</title>
    <id>https://waylonwalker.com/maggieappleton-maggieappleton-com/</id>
    <updated>2021-03-26T03:02:28Z</updated>
    <published>2021-03-26T03:02:28Z</published>
    <link href="https://waylonwalker.com/maggieappleton-maggieappleton-com/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on maggieappleton.com by MaggieAppleton.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/MaggieAppleton/maggieappleton.com&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;maggieappleton.com&lt;/a&gt; by &lt;a href=&#34;https://github.com/MaggieAppleton&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;MaggieAppleton&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;⚠️ Now retired. My previous, poorly constructed digital garden built with Gatsby and MDX. Updated garden here: &lt;a href=&#34;https://github.com/MaggieAppleton/maggieappleton.com-V2&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/MaggieAppleton/maggieappleton.com-V2&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tmate-io tmate</title>
    <id>https://waylonwalker.com/tmate-io-tmate/</id>
    <updated>2021-03-25T17:38:26Z</updated>
    <published>2021-03-25T17:38:26Z</published>
    <link href="https://waylonwalker.com/tmate-io-tmate/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out tmate-io and their project tmate.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/tmate-io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmate-io&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/tmate-io/tmate&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmate&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Instant Terminal Sharing&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ drivendataorg cookiecutter-data-science</title>
    <id>https://waylonwalker.com/drivendataorg-cookiecutter-data-science/</id>
    <updated>2021-03-24T19:20:55Z</updated>
    <published>2021-03-24T19:20:55Z</published>
    <link href="https://waylonwalker.com/drivendataorg-cookiecutter-data-science/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on cookiecutter-data-science by drivendataorg.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/drivendataorg/cookiecutter-data-science&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cookiecutter-data-science&lt;/a&gt; by &lt;a href=&#34;https://github.com/drivendataorg&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;drivendataorg&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A logical, reasonably standardized, but flexible project structure for doing and sharing data science work.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Site Down During Build</title>
    <id>https://waylonwalker.com/site-down-during-build/</id>
    <updated>2021-03-22T00:00:00Z</updated>
    <published>2021-03-22T00:00:00Z</published>
    <link href="https://waylonwalker.com/site-down-during-build/" rel="alternate" type="text/html"></link>
    <summary type="text">Recently I noticed a new netlify site of mine was down while I was checking to see if new content was live. Later found out this was consistent after each...</summary>
    <content type="html">&lt;p&gt;Recently I noticed a new netlify site of mine was down while I was checking to&#xA;see if new content was live. Later found out this was consistent after each&#xA;and every push the site would go gown as soon as I hit push, and would not come&#xA;back until the build finished.&lt;/p&gt;&#xA;&lt;h2 id=&#34;is-this-normal&#34;&gt;Is this normal? &lt;a href=&#34;#is-this-normal&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Do other Netlify sites go down during build???&lt;/p&gt;&#xA;&lt;p&gt;Short Answer NO. All of my google fu lead me to believe I was alone and none of my other sites do this.&lt;/p&gt;&#xA;&lt;h2 id=&#34;digging-into-my-build&#34;&gt;Digging into my build &lt;a href=&#34;#digging-into-my-build&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;My deploy script ends with the following. After resetting keys and watching it build half a dozen&#xA;times I determined that everything was working as normal here.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;- name: Deploy to Netlify&#xA;uses: nwtgck/actions-netlify@v1.1.12&#xA;with:&#xA;    publish-dir: &amp;#34;./markout&amp;#34;&#xA;    production-branch: markout&#xA;    production-deploy: true&#xA;    deploy-message: &amp;#34;Deploy markout from GitHub Actions&amp;#34;&#xA;env:&#xA;    NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}&#xA;    NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;opening-the-nelify-console&#34;&gt;Opening the Nelify Console &lt;a href=&#34;#opening-the-nelify-console&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;After poking at the netlify console for hours I realized that the issue was&#xA;that netlify was still auto-deploying from a no longer existing directory and&#xA;would cause 404’s for every page. During build, then my build from GitHub&#xA;Actions would deploy with the netlify cli.&lt;/p&gt;&#xA;&lt;div class=&#34;center-img&#34;&gt;&#xA;    &lt;a href=&#34;https://images.waylonwalker.com/netlify-build-images-waylonwalker.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; alt=&#34;images build&#34; src=&#34;https://images.waylonwalker.com/netlify-build-images-waylonwalker.png&#34;/ data-glightbox=&#34;description: images build&#34;&gt;&lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Netlify really likes to put a lot of warnings up when you are not deploying&#xA;from them. I tured off automatic deploys, swore to the netlify gods this is&#xA;what I wanted. Pushed a new deploy and 🎉 THE SITE DID NOT GO DOWN.&lt;/p&gt;&#xA;&lt;p&gt;jdiv class=‘center-img’&amp;gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/netlify-build-waylonwalker.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; alt=&#34;site build&#34; src=&#34;https://images.waylonwalker.com/netlify-build-waylonwalker.png&#34;/ data-glightbox=&#34;description: site build&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Kedro pipeline_registry.py</title>
    <id>https://waylonwalker.com/kedro-pipeline-registry/</id>
    <updated>2021-03-20T00:00:00Z</updated>
    <published>2021-03-20T00:00:00Z</published>
    <link href="https://waylonwalker.com/kedro-pipeline-registry/" rel="alternate" type="text/html"></link>
    <summary type="text">With the realease of came a new module in the project template . Here are some notes that I learned while playing with this new module.</summary>
    <content type="html">&lt;p&gt;With the realease of &lt;code&gt;kedro==0.17.2&lt;/code&gt; came a new module in the project template&#xA;&lt;code&gt;pipeline_registry.py&lt;/code&gt;.  Here are some notes that I learned while playing with&#xA;this new module.&lt;/p&gt;&#xA;&lt;h2 id=&#34;migrating-to-pipeline-registrypy&#34;&gt;migrating to &lt;code&gt;pipeline_registry.py&lt;/code&gt; &lt;a href=&#34;#migrating-to-pipeline-registrypy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;create a &lt;code&gt;src/&amp;lt;package-name&amp;gt;/pipeline_registry.py&lt;/code&gt; file create a&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;register_pipelines&lt;/code&gt; function in &lt;code&gt;pipeline_registry.py&lt;/code&gt; that mirrors the&lt;/li&gt;&#xA;&lt;li&gt;register_pipelines method from your &lt;code&gt;hooks.py&lt;/code&gt; module do not bring the&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;hook_impl&lt;/code&gt; decorator remove register_pipelines method on your &lt;code&gt;ProjectHooks&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;class&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You should now have something that looks like this in your&#xA;&lt;code&gt;src/&amp;lt;package-name&amp;gt;/pipeline_registry.py&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Project pipelines.&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;typing&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Dict&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.pipeline&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;register_pipelines&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Register the project&amp;#39;s pipelines.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    Returns: A mapping from a pipeline name to a ``Pipeline`` object.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;__default__&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([])}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;pipeline_registry only works in &lt;code&gt;kedro&amp;gt;=0.17.2&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;conflict-resolution&#34;&gt;Conflict Resolution &lt;a href=&#34;#conflict-resolution&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;What happens If I register pipelines in both places&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I was not able to find any official documentation on how conflict resolution&#xA;worked so I stepped into a project and added to both my &lt;code&gt;hooks.py&lt;/code&gt; and&#xA;&lt;code&gt;pipeline_registry.py&lt;/code&gt; file.  I noticed that it would pick up pipelines from&#xA;both modules, but pipelines from &lt;code&gt;hooks.py&lt;/code&gt; always take precedence.  The entire&#xA;duplicate pipeline will be over written by the one from &lt;code&gt;hooks.py&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;kedro automatically merges pipelines from both hooks.py takes precedence&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;ready-to-update&#34;&gt;Ready to update &lt;a href=&#34;#ready-to-update&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;In my experience there were no issues upgrading from &lt;code&gt;0.17.1&lt;/code&gt; to &lt;code&gt;0.17.2&lt;/code&gt;.  I&#xA;would reccomend only having one &lt;code&gt;register_pipelines&lt;/code&gt; so decide to migrate to&#xA;the new &lt;code&gt;pipeline_registry.py&lt;/code&gt; or keep it in your &lt;code&gt;hooks.py&lt;/code&gt;, but both is only&#xA;going to lead to confusion.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://twitter.com/datajoely/status/1375193511264456705&#34;&gt;https://twitter.com/datajoely/status/1375193511264456705&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ smitajit bufutils.vim</title>
    <id>https://waylonwalker.com/smitajit-bufutils-vim/</id>
    <updated>2021-03-14T15:34:13Z</updated>
    <published>2021-03-14T15:34:13Z</published>
    <link href="https://waylonwalker.com/smitajit-bufutils-vim/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out smitajit and their project bufutils.vim.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/smitajit&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;smitajit&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/smitajit/bufutils.vim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;bufutils.vim&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;bufutils.vim provide utilities to open, close, refresh, move, resize, zoom buffers faster&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Rigellute spotify-tui</title>
    <id>https://waylonwalker.com/rigellute-spotify-tui/</id>
    <updated>2021-03-08T23:21:02Z</updated>
    <published>2021-03-08T23:21:02Z</published>
    <link href="https://waylonwalker.com/rigellute-spotify-tui/" rel="alternate" type="text/html"></link>
    <summary type="text">I like Rigellute&#39;s project spotify-tui.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/Rigellute&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Rigellute’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/Rigellute/spotify-tui&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;spotify-tui&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Spotify for the terminal written in Rust 🚀&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ swyxio technical-community-builders</title>
    <id>https://waylonwalker.com/swyxio-technical-community-builders/</id>
    <updated>2021-03-06T02:02:15Z</updated>
    <published>2021-03-06T02:02:15Z</published>
    <link href="https://waylonwalker.com/swyxio-technical-community-builders/" rel="alternate" type="text/html"></link>
    <summary type="text">I like swyxio&#39;s project technical-community-builders.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/swyxio&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;swyxio’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/swyxio/technical-community-builders&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;technical-community-builders&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;companies hiring technical community builders&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Minyus Minyus</title>
    <id>https://waylonwalker.com/minyus-minyus/</id>
    <updated>2021-03-06T02:02:00Z</updated>
    <published>2021-03-06T02:02:00Z</published>
    <link href="https://waylonwalker.com/minyus-minyus/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred Minyus by Minyus. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/Minyus/Minyus&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Minyus&lt;/a&gt; by &lt;a href=&#34;https://github.com/Minyus&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Minyus&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ uranusjr simpleindex</title>
    <id>https://waylonwalker.com/uranusjr-simpleindex/</id>
    <updated>2021-03-03T04:20:11Z</updated>
    <published>2021-03-03T04:20:11Z</published>
    <link href="https://waylonwalker.com/uranusjr-simpleindex/" rel="alternate" type="text/html"></link>
    <summary type="text">I like uranusjr&#39;s project simpleindex.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/uranusjr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;uranusjr’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/uranusjr/simpleindex&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;simpleindex&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ lorenabalan lorenabalan</title>
    <id>https://waylonwalker.com/lorenabalan-lorenabalan/</id>
    <updated>2021-02-25T14:12:28Z</updated>
    <published>2021-02-25T14:12:28Z</published>
    <link href="https://waylonwalker.com/lorenabalan-lorenabalan/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across lorenabalan from lorenabalan, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/lorenabalan/lorenabalan&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lorenabalan&lt;/a&gt; from &lt;a href=&#34;https://github.com/lorenabalan&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lorenabalan&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;Personal repo&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ rhysd vim.wasm</title>
    <id>https://waylonwalker.com/rhysd-vim-wasm/</id>
    <updated>2021-02-17T16:27:13Z</updated>
    <published>2021-02-17T16:27:13Z</published>
    <link href="https://waylonwalker.com/rhysd-vim-wasm/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across vim.wasm from rhysd, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/rhysd/vim.wasm&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vim.wasm&lt;/a&gt; from &lt;a href=&#34;https://github.com/rhysd&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rhysd&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;Vim editor ported to WebAssembly&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ dataengineerone de1-python</title>
    <id>https://waylonwalker.com/dataengineerone-de1-python/</id>
    <updated>2021-02-01T02:27:22Z</updated>
    <published>2021-02-01T02:27:22Z</published>
    <link href="https://waylonwalker.com/dataengineerone-de1-python/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered de1-python by dataengineerone, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/dataengineerone/de1-python&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;de1-python&lt;/a&gt; by &lt;a href=&#34;https://github.com/dataengineerone&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dataengineerone&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;Curated collection of DE1’s favorite kedro pieces.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ markserv markserv</title>
    <id>https://waylonwalker.com/markserv-markserv/</id>
    <updated>2021-01-28T19:33:04Z</updated>
    <published>2021-01-28T19:33:04Z</published>
    <link href="https://waylonwalker.com/markserv-markserv/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered markserv by markserv, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/markserv/markserv&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;markserv&lt;/a&gt; by &lt;a href=&#34;https://github.com/markserv&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;markserv&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;🏁  serve markdown as &lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;html&lt;/a&gt; (GitHub style), index directories, live-reload as you edit&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ facelessuser pymdown-extensions</title>
    <id>https://waylonwalker.com/facelessuser-pymdown-extensions/</id>
    <updated>2021-01-27T18:46:30Z</updated>
    <published>2021-01-27T18:46:30Z</published>
    <link href="https://waylonwalker.com/facelessuser-pymdown-extensions/" rel="alternate" type="text/html"></link>
    <summary type="text">facelessuser has done a fantastic job with pymdown-extensions. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/facelessuser&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;facelessuser&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/facelessuser/pymdown-extensions&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pymdown-extensions&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Extensions for Python Markdown&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tkhyn dirsync</title>
    <id>https://waylonwalker.com/tkhyn-dirsync/</id>
    <updated>2021-01-25T13:37:50Z</updated>
    <published>2021-01-25T13:37:50Z</published>
    <link href="https://waylonwalker.com/tkhyn-dirsync/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out dirsync by tkhyn. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/tkhyn/dirsync&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dirsync&lt;/a&gt; by &lt;a href=&#34;https://github.com/tkhyn&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tkhyn&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ andrewlin12 markdown2png</title>
    <id>https://waylonwalker.com/andrewlin12-markdown2png/</id>
    <updated>2021-01-22T14:14:50Z</updated>
    <published>2021-01-22T14:14:50Z</published>
    <link href="https://waylonwalker.com/andrewlin12-markdown2png/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out andrewlin12 and their project markdown2png.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/andrewlin12&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;andrewlin12&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/andrewlin12/markdown2png&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;markdown2png&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Render markdown to PNG (or other formats)&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Stand With Your Team</title>
    <id>https://waylonwalker.com/stand-with-your-team/</id>
    <updated>2021-01-22T00:00:00Z</updated>
    <published>2021-01-22T00:00:00Z</published>
    <link href="https://waylonwalker.com/stand-with-your-team/" rel="alternate" type="text/html"></link>
    <summary type="text">People who are quick to toss team members under a bus are not well trusted or highly thought of and it will lead to some toxic team dynamics.</summary>
    <content type="html">&lt;p&gt;People who are quick to toss team members under a bus are not well trusted or&#xA;highly thought of and it will lead to some toxic team dynamics.&lt;/p&gt;&#xA;&lt;h2 id=&#34;building-steam&#34;&gt;Building Steam &lt;a href=&#34;#building-steam&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;While collaborating on any project there are going to be decisions made that&#xA;aren’t necessarily your favorite, during a summer internship my mentor made&#xA;some decisions that I was not on board with, but I accepted his wisdom and&#xA;moved forward with little push back.&lt;/p&gt;&#xA;&lt;h2 id=&#34;full-spead-ahead&#34;&gt;Full Spead Ahead &lt;a href=&#34;#full-spead-ahead&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;During a review, leadership showed interest in the option that I wanted to go&#xA;towards.  I was quick to jump up and say I  told you so right then and there&#xA;and pitch reasons why my idea was so much better.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-aftermath&#34;&gt;The Aftermath &lt;a href=&#34;#the-aftermath&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I walked out so &lt;strong&gt;proud&lt;/strong&gt; that leadership recognized my idea, but I will never&#xA;forget the look on my teammate’s face and what he told me after the meeting.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;“Wow quick to throw me under the bus in front of everyone 😢”.   I&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;~ my teammate&lt;/p&gt;&#xA;&lt;h2 id=&#34;realizing-what-happened&#34;&gt;Realizing what Happened &lt;a href=&#34;#realizing-what-happened&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It was at this moment that I threw my mentor, a good &lt;strong&gt;friend&lt;/strong&gt; in front of a&#xA;bus that was at full speed.  I will never forget this moment and the importance&#xA;of being a good trustworthy team player.&lt;/p&gt;&#xA;&lt;h2 id=&#34;speak-your-mind-be-heard-shut-up&#34;&gt;Speak your Mind, be heard, shut up &lt;a href=&#34;#speak-your-mind-be-heard-shut-up&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This day I learned that there is a time to speak your mind.  While that bus is&#xA;sitting idle it would have hurt no one.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;There were times to hear out ideas, and there were times that we need to accept&#xA;the decisions the team made.  The team that you were a part of and had a chance&#xA;to steer.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;There are times where it’s appropriate to sit down and shut up.&lt;/p&gt;&#xA;&lt;h2 id=&#34;your-story-&#34;&gt;Your Story 👇 &lt;a href=&#34;#your-story-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Do you have a story of how not standing with your team caused you pain later&#xA;on.  I would love to hear and learn from your experience.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Blogging For Me</title>
    <id>https://waylonwalker.com/blogging-for-me/</id>
    <updated>2021-01-21T00:00:00Z</updated>
    <published>2021-01-21T00:00:00Z</published>
    <link href="https://waylonwalker.com/blogging-for-me/" rel="alternate" type="text/html"></link>
    <summary type="text">I create this blog with one person in mind, me.</summary>
    <content type="html">&lt;p&gt;I create this blog with one person in mind, me.&lt;/p&gt;&#xA;&lt;h2 id=&#34;there-are-others-like-me&#34;&gt;There are others like me &lt;a href=&#34;#there-are-others-like-me&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is not completely selfish, as there are likely many others out there that&#xA;think similarly to me.  Everyone comes from different backgrounds and varying&#xA;levels of experience.  In no way do you need to be an expert to create content&#xA;others will benefit from.&lt;/p&gt;&#xA;&lt;h2 id=&#34;accurate&#34;&gt;Accurate &lt;a href=&#34;#accurate&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I am as accurate as possible.  I don’t know everything, and If I waited for&#xA;that to happen I would never post, or write at such a high level no one else&#xA;(including me) would ever want to read.&lt;/p&gt;&#xA;&lt;p&gt;Generally I know that I am directionally accurate for most of the article.  In&#xA;fact there is often a part of the article that I don’t feel the best about.  It&#xA;may have been some code that could have been better.  I try to point these&#xA;things out.  Often when I am and point out where I know there is&#xA;improvement to be had I get the most welcoming comments, “that was just fine&#xA;how you did that”, or “I tried that myself and saw a better abstraction.&lt;/p&gt;&#xA;&lt;h2 id=&#34;create-the-articles-i-want-to-read&#34;&gt;Create the articles I want to read &lt;a href=&#34;#create-the-articles-i-want-to-read&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Generally the articles I want to read are directly relatable to things I am&#xA;currently working on and vary over time.  Over the last year its been leaning a&#xA;bit more towards automation with&#xA;&lt;a href=&#34;https://waylonwalker.com/linux/&#34;&gt;bash&lt;/a&gt;,&#xA;&lt;a href=&#34;https://waylonwalker.com/python/&#34;&gt;python&lt;/a&gt;,&#xA;&lt;a href=&#34;https://waylonwalker.com/kedro/&#34;&gt;kedro&lt;/a&gt; tools.&lt;/p&gt;&#xA;&lt;h2 id=&#34;on-brand&#34;&gt;On Brand &lt;a href=&#34;#on-brand&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I try to stay on brand to who I am.  I remember writing my first articles.  I&#xA;was trying to be whitty, and include funny memes.  Thats not me.  I am not a&#xA;commedian, and generally memes go right over my head.  I can remember back in&#xA;High School, I was the one that didn’t understand a lot of pop culture and was&#xA;kinda treated as if I was always living under a rock.  I knew it was true and I&#xA;owned it, so no one ever got too mean about it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;honest-never-fake&#34;&gt;Honest, never fake &lt;a href=&#34;#honest-never-fake&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I will not try to pretend that I know everything.  You may read my blog on&#xA;occasion and think I know a lot, also possible that you think “wow what an&#xA;idiot”.  I welcome you to share your thoughts and techniques in a positive way.&#xA;I often cringe at some of my old posts and think about how differently I would&#xA;approach something not that long after posting.  I honest, never fake know what&#xA;I need to know and don’t pretend to know anything outside of my wheelhouse.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ twintproject twint</title>
    <id>https://waylonwalker.com/twintproject-twint/</id>
    <updated>2021-01-20T20:47:28Z</updated>
    <published>2021-01-20T20:47:28Z</published>
    <link href="https://waylonwalker.com/twintproject-twint/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered twint by twintproject, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/twintproject/twint&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;twint&lt;/a&gt; by &lt;a href=&#34;https://github.com/twintproject&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;twintproject&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;An advanced Twitter scraping &amp;amp; OSINT tool written in Python that doesn’t use Twitter’s API, allowing you to scrape a user’s followers, following, Tweets and more while evading most API limitations.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pytest-dev pluggy</title>
    <id>https://waylonwalker.com/pytest-dev-pluggy/</id>
    <updated>2021-01-20T19:17:25Z</updated>
    <published>2021-01-20T19:17:25Z</published>
    <link href="https://waylonwalker.com/pytest-dev-pluggy/" rel="alternate" type="text/html"></link>
    <summary type="text">I like pytest-dev&#39;s project pluggy.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/pytest-dev&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pytest-dev’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/pytest-dev/pluggy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pluggy&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A minimalist production ready plugin system&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ to-mc checksumdir</title>
    <id>https://waylonwalker.com/to-mc-checksumdir/</id>
    <updated>2021-01-20T15:32:44Z</updated>
    <published>2021-01-20T15:32:44Z</published>
    <link href="https://waylonwalker.com/to-mc-checksumdir/" rel="alternate" type="text/html"></link>
    <summary type="text">to-mc has done a fantastic job with checksumdir. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/to-mc&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;to-mc&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/to-mc/checksumdir&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;checksumdir&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Simple package to compute a single deterministic hash of the file contents of a directory.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Minimal Kedro Pipeline</title>
    <id>https://waylonwalker.com/minimal-kedro-pipeline/</id>
    <updated>2021-01-20T00:00:00Z</updated>
    <published>2021-01-20T00:00:00Z</published>
    <link href="https://waylonwalker.com/minimal-kedro-pipeline/" rel="alternate" type="text/html"></link>
    <summary type="text">How small can a minimum kedro pipeline ready to package be? I made one within 4 files that you can pip install. It&#39;s only a total of 35 lines of python, 8 in...</summary>
    <content type="html">&lt;p&gt;How small can a minimum kedro pipeline ready to package be?  I made one within 4 files that you can pip install.  It’s only a total of 35 lines of python, 8 in &lt;code&gt;setup.py&lt;/code&gt; and 27 in &lt;code&gt;mini_kedro_pipeline.py&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;📝 Note this is only a composable pipeline, not a full project, it does not contain a catalog or runner.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;minimal-kedro-pipeline&#34;&gt;Minimal Kedro Pipeline &lt;a href=&#34;#minimal-kedro-pipeline&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have everything for this post hosted in this &lt;a href=&#34;https://github.com/WaylonWalker/mini-kedro-pipeline&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gihub repo&lt;/a&gt;, you can fork it, clone it, or just follow along.&lt;/p&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation &lt;a href=&#34;#installation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install git+https://github.com/WaylonWalker/mini-kedro-pipeline&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;caveats&#34;&gt;Caveats &lt;a href=&#34;#caveats&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This repo represents the minimal amount of structure to build a kedro pipeline that can be shared across projects.  Its installable, and drops right into your &lt;code&gt;hooks.py&lt;/code&gt; or &lt;code&gt;run.py&lt;/code&gt; modules.  It is not a runnable pipeline.  At this point&#xA;I think the config loader requires to have a logging config file.&lt;/p&gt;&#xA;&lt;p&gt;This is a sharable pipeline that can be used across many different projects.&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage &lt;a href=&#34;#usage&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# hooks.py&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;mini_kedro_project&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;mkp&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;ProjectHooks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@hook_impl&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;register_pipelines&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Register the project&amp;#39;s pipeline.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        Returns:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;            A mapping from a pipeline name to a ``Pipeline`` object.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;__default__&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([]),&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;mkp&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mkp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;implemantation&#34;&gt;Implemantation &lt;a href=&#34;#implemantation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This builds on another post that I made about creating the minimal python package.  I am not sure if it should be called a package, it’s a module, but what do you call it after you build it and host it on pypi?&lt;/p&gt;&#xA;&lt;p&gt;[[ minimal-python-package ]]&lt;/p&gt;&#xA;&lt;h2 id=&#34;directory-structure&#34;&gt;Directory structure &lt;a href=&#34;#directory-structure&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── .gitignore&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── README.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── setup.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── my_pipeline.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;setuppy&#34;&gt;setup.py &lt;a href=&#34;#setuppy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is a very minimal &lt;code&gt;setup.py&lt;/code&gt;.  This is enough to get you started with a package that you can share across your team.  In practice, there is a bit more that you might want to include as your project grows.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;setuptools&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;setup&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;setup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;MiniKedroPipeline&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;0.1.0&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;py_modules&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;mini_kedro_pipeline&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;install_requires&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;mini-kedro-pipelinepy&#34;&gt;mini_kedro_pipeline.py &lt;a href=&#34;#mini-kedro-pipelinepy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The mini kedro pipeline looks like any set of nodes in your project.  Many projects will separate nodes and functions, I prefer to keep them close together.  The default recommendation is also to have a &lt;code&gt;create_pipelines&lt;/code&gt; function that returns the pipeline.&lt;/p&gt;&#xA;&lt;p&gt;This pattern creates a singleton, if you were to reference the same pipeline in multiple places within the same running interpreter and modify the one you would run into issues.  I don’t foresee myself running into this issue, but maybe as more features become available I will change my mind.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;An example of a minimal kedro pipeline project&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.pipeline&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;__version__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;0.1.0&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;__author__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Waylon S. Walker&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;create_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;creates a dictionary of sample data&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;beans&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;raw_data&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;create_raw_data&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;mult_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;multiplies each record of each item by 100&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;item&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mult_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;raw_data&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;mult_data&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;create_mult_data&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;kedro-in-scripts&#34;&gt;Kedro in scripts &lt;a href=&#34;#kedro-in-scripts&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/kedro-in-scripts/&#34; class=&#34;wikilink&#34; data-title=&#34;Using Kedro In Scripts&#34; data-description=&#34;With the latest releases of kedro , it is now possible to run kedro pipelines from within scripts. While I would not start a project with this technique, it...&#34; data-date=&#34;2021-05-23&#34; data-preview=&#34;With the latest releases of kedro , it is now possible to run kedro pipelines from within scripts. While I would not start a project with this technique, it...&#34;&gt;Using Kedro In Scripts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If you enjoyed this one check out this companion article where I build a fully runnable kedro project in a single script.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;share-your-pipelines&#34;&gt;Share your pipelines &lt;a href=&#34;#share-your-pipelines&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Go forth and share your pipelines across projects.  Let me know, do you share pipelines or catalogs across projects?&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Markdown Cli</title>
    <id>https://waylonwalker.com/markdown-cli/</id>
    <updated>2021-01-20T00:00:00Z</updated>
    <published>2021-01-20T00:00:00Z</published>
    <link href="https://waylonwalker.com/markdown-cli/" rel="alternate" type="text/html"></link>
    <summary type="text">This is a post that may be a work in progress for awhile, Its a collections of thoughts on managing my blog, but could be translated into anythiung that is...</summary>
    <content type="html">&lt;p&gt;This is a post that may be a work in progress for awhile, Its a collections of&#xA;thoughts on managing my blog, but could be translated into anythiung that is&#xA;just a collection of markdown.&lt;/p&gt;&#xA;&lt;h2 id=&#34;listing-things&#34;&gt;Listing things &lt;a href=&#34;#listing-things&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;posts&lt;/li&gt;&#xA;&lt;li&gt;tags&lt;/li&gt;&#xA;&lt;li&gt;draft posts&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;data&#34;&gt;data &lt;a href=&#34;#data&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;frontmatter&lt;/li&gt;&#xA;&lt;li&gt;filepath&lt;/li&gt;&#xA;&lt;li&gt;content&lt;/li&gt;&#xA;&lt;li&gt;template&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;render-content&#34;&gt;render content &lt;a href=&#34;#render-content&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Markdown.Markdown&lt;/li&gt;&#xA;&lt;li&gt;support extentsions&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;frontmatter-cleaning&#34;&gt;frontmatter cleaning. &lt;a href=&#34;#frontmatter-cleaning&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;provide ways to hook in or clean up the frontmatter&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;markatamarkata-methods&#34;&gt;Markata.Markata methods &lt;a href=&#34;#markatamarkata-methods&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;load&lt;/li&gt;&#xA;&lt;li&gt;render&lt;/li&gt;&#xA;&lt;li&gt;save&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;markatapost-methods&#34;&gt;Markata.Post methods &lt;a href=&#34;#markatapost-methods&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;load&lt;/li&gt;&#xA;&lt;li&gt;render&lt;/li&gt;&#xA;&lt;li&gt;save&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;markata-plugins&#34;&gt;Markata plugins &lt;a href=&#34;#markata-plugins&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;before_load&lt;/li&gt;&#xA;&lt;li&gt;before_post_load&lt;/li&gt;&#xA;&lt;li&gt;after_load&lt;/li&gt;&#xA;&lt;li&gt;after_post_load&lt;/li&gt;&#xA;&lt;li&gt;before_save&lt;/li&gt;&#xA;&lt;li&gt;before_post_save&lt;/li&gt;&#xA;&lt;li&gt;after_save&lt;/li&gt;&#xA;&lt;li&gt;after_post_save&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;markata-plugins-1&#34;&gt;Markata plugins &lt;a href=&#34;#markata-plugins-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;cleanse_frontmatter&lt;/li&gt;&#xA;&lt;li&gt;html_feed&lt;/li&gt;&#xA;&lt;li&gt;json_feed&lt;/li&gt;&#xA;&lt;li&gt;rss_feed&lt;/li&gt;&#xA;&lt;li&gt;save_posts&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;cli&#34;&gt;CLI &lt;a href=&#34;#cli&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ markata list tags&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;data&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ markata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;title&amp;#34;&lt;/span&gt;: &lt;span class=&#34;s2&#34;&gt;&amp;#34;post title&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;: &lt;span class=&#34;s2&#34;&gt;&amp;#34;this is a post&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;filepath&amp;#34;&lt;/span&gt;: &lt;span class=&#34;s2&#34;&gt;&amp;#34;path_to.md&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;: &lt;span class=&#34;s2&#34;&gt;&amp;#34;the content of the post&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;html&amp;#34;&lt;/span&gt;: &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;p&amp;gt;the content of the post&amp;lt;/p&amp;gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>My Content Strategy For 2021</title>
    <id>https://waylonwalker.com/2021-content-strategy/</id>
    <updated>2021-01-19T00:00:00Z</updated>
    <published>2021-01-19T00:00:00Z</published>
    <link href="https://waylonwalker.com/2021-content-strategy/" rel="alternate" type="text/html"></link>
    <summary type="text">I am making another push in 2021 to get my content out in the world and meeting users where they are. See how I plan to execute.</summary>
    <content type="html">&lt;p&gt;I am making another push in 2021 to get my content out in the world and meeting users where they are. See how I plan to execute.&lt;/p&gt;&#xA;&lt;h2 id=&#34;platforms&#34;&gt;Platforms &lt;a href=&#34;#platforms&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;waylonwalker.com&lt;/li&gt;&#xA;&lt;li&gt;Twitter&lt;/li&gt;&#xA;&lt;li&gt;DEV&lt;/li&gt;&#xA;&lt;li&gt;hashnode&lt;/li&gt;&#xA;&lt;li&gt;Medium&lt;/li&gt;&#xA;&lt;li&gt;LinkedIn&lt;/li&gt;&#xA;&lt;li&gt;Anchor&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;markdown&#34;&gt;Markdown &lt;a href=&#34;#markdown&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;My content is written in markdown, all markdown. I find that markdown does a really great job at getting out of the way and letting ideas flow onto the page. I am never fussing with fonts and formatting while physically writing posts. Not that I don’t spend way more time than I need to tweak these things on my own personal site where everything gets posted.&lt;/p&gt;&#xA;&lt;h2 id=&#34;articles&#34;&gt;Articles &lt;a href=&#34;#articles&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Much of what I create is inside of short articles that get posted to my personal site &lt;a href=&#34;https://waylonwalker.com&#34;&gt;waylonwalker.com&lt;/a&gt;. These will get cross-posted to &lt;a href=&#34;https://dev.to/waylonwalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/dev.to.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/dev.to.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;DEV&lt;/a&gt;,&#xA;&lt;a href=&#34;https://h.waylonwalker.com/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/h.waylonwalker.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/h.waylonwalker.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;hashnode&lt;/a&gt;, &lt;a href=&#34;https://waylonwalker.medium.com/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/waylonwalker.medium.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/waylonwalker.medium.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Medium&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I have made cross-posting a bit easier for myself by posting the markdown for each article next to the post on my personal site. Add .md to any post and there is the source.&lt;/p&gt;&#xA;&lt;p&gt;Should I be giving my articles to Medium?? Personally, I am not a fan of the bait and switch that they did with adding a paywall years after launch. From what I can tell authors are not getting paid much from it, users are discouraged when they are blocked, and they really only promote articles that are behind the paywall.&lt;/p&gt;&#xA;&lt;p&gt;In the end, I am a fan of meeting users where they are, if they like Medium I don’t want them to miss my content.&lt;/p&gt;&#xA;&lt;h2 id=&#34;more-catalytic&#34;&gt;More Catalytic &lt;a href=&#34;#more-catalytic&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;soft skills&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;My articles are very code-heavy, I do want to transition over to some more evergreen type of posts that are long-lasting. I want to create some more content around how to be a good developer, data scientist, engineer, whatever you call yourself.&lt;/p&gt;&#xA;&lt;p&gt;Personally, this is some of the content I enjoy consuming, but for some reason is not something I tend to create.&lt;/p&gt;&#xA;&lt;h2 id=&#34;slides&#34;&gt;Slides &lt;a href=&#34;#slides&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I am really enjoying the slide output of my articles on&#xA;&lt;a href=&#34;https://www.linkedin.com/in/waylonwalker/detail/recent-activity/shares/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.linkedin.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.linkedin.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;LinkedIn&lt;/a&gt;. It makes for something that is unique and easy to digest. I have a pandoc script that takes in the markdown from my posts and kicks out a set of slides, so it’s quick and easy to do. Not every post works well this way by many have so&#xA;far.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://images.waylonwalker.com/linkedin-activity-slides.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/linkedin-activity-slides.gif&#34; alt=&#34;my linked in slide&#xA;activity&#34;/ data-glightbox=&#34;description: my linked in slide&#xA;activity&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;threads&#34;&gt;Threads &lt;a href=&#34;#threads&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;With less success (shares, views, likes) I have been converting articles over to Twitter threads as they are released, again not every article works well this way, but many do.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://twitter.com/_WaylonWalker/status/1349716127887347717&#34; class=&#34;hoverlink&#34;&gt;https://twitter.com/_WaylonWalker/status/1349716127887347717&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;simplicity&#34;&gt;Simplicity &lt;a href=&#34;#simplicity&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;just write markdown&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the end, everything needs to be simple and build off of the original markdown post. Automation should be in a place where it makes sense. I am no longer manually creating cover art or article descriptions, those are scripted out of the article itself.&lt;/p&gt;&#xA;&lt;p&gt;I have come cli tooling in place to simplify my process. Expect more of that to come.&lt;/p&gt;&#xA;&lt;h2 id=&#34;audio&#34;&gt;Audio &lt;a href=&#34;#audio&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have set up a podcast where I read out my posts, but the time that I have available to read them is very constraining to the process. It may be something that I figure out how to work out or something that I drop. It’s something that I think would be really nice, but still trying to figure out how to do it.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/audio-for-blog/&#34; class=&#34;hoverlink&#34;&gt;https://waylonwalker.com/audio-for-blog/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I personally really like this as I often find a cool blog article that I want to read, but it’s time to cook dinner or drive somewhere. Articles with audio make it super convenient to consume while doing a task requiring eye contact.&lt;/p&gt;&#xA;&lt;h2 id=&#34;tldr&#34;&gt;TLDR &lt;a href=&#34;#tldr&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Meet Users Where They are.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Quickly Edit Posts</title>
    <id>https://waylonwalker.com/quickly-edit-posts/</id>
    <updated>2021-01-18T00:00:00Z</updated>
    <published>2021-01-18T00:00:00Z</published>
    <link href="https://waylonwalker.com/quickly-edit-posts/" rel="alternate" type="text/html"></link>
    <summary type="text">Recently I automated starting new posts with a python script. Today I want to work on the next part that is editing those posts quickly.</summary>
    <content type="html">&lt;p&gt;Recently I automated starting new posts with a python script.  Today I want to&#xA;work on the next part that is editing those posts quickly.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/automating-my-post-starter/&#34; class=&#34;wikilink&#34; data-title=&#34;Automating my Post Starter&#34; data-description=&#34;One thing we all dread is mundane work of getting started, and all the hoops it takes to get going. This year I want to post more often and I am taking some...&#34; data-date=&#34;2020-12-11&#34; data-preview=&#34;One thing we all dread is mundane work of getting started, and all the hoops it takes to get going. This year I want to post more often and I am taking some...&#34;&gt;Automating my Post Starter&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Check out this post about setting up my posts with python 🐍&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;enter-bash&#34;&gt;Enter Bash &lt;a href=&#34;#enter-bash&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;For the process of editing a post I just need to open the file in vim quickly.&#xA;I dont need much in the way of parsing and setting up the frontmatter.  I think&#xA;this is a simple job for a &lt;strong&gt;bash&lt;/strong&gt; script and fzf.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;change to the root of my blog&lt;/li&gt;&#xA;&lt;li&gt;fuzzy find the post&lt;/li&gt;&#xA;&lt;li&gt;open it with vim&lt;/li&gt;&#xA;&lt;li&gt;change back to the directory I was in&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;bash-function&#34;&gt;bash function &lt;a href=&#34;#bash-function&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;For this I am going to go with a bash function.  This is partly due to being&#xA;able to track where I was and get back.  Also the line with nvim will run fzf&#xA;everytime you source your &lt;code&gt;~/.alias&lt;/code&gt; file which is not what we want.&lt;/p&gt;&#xA;&lt;p&gt;Lets setup the &lt;strong&gt;boilerplate&lt;/strong&gt;.  Its going to create a function called ep&#xA;&lt;code&gt;&amp;#34;edit post&amp;#34;&lt;/code&gt;, track our current directory, create a sub function &lt;code&gt;_ep&lt;/code&gt;.  Then&#xA;call that function and cd back to where we were no matter if &lt;code&gt;_ep&lt;/code&gt; fails or&#xA;succeeds.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;boilerplate&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ep &lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;_dir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;pwd&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    _ep &lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# open file here&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    _ep &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$_dir&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$_dir&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/reusable-bash/&#34; class=&#34;wikilink&#34; data-title=&#34;Creating Reusable Bash Scripts&#34; data-description=&#34;Bash is a language that is quite useful for automation no matter what language you write in. Bash can do so many powerful system-level tasks. Even if you are...&#34; data-date=&#34;2020-08-13&#34; data-preview=&#34;Bash is a language that is quite useful for automation no matter what language you write in. Bash can do so many powerful system-level tasks. Even if you are...&#34;&gt;Creating Reusable Bash Scripts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;check out this post for more information about writing reusable bash scripts.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;fzf&#34;&gt;FZF &lt;a href=&#34;#fzf&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let’s focus in on that &lt;code&gt;_ep&lt;/code&gt; function here that is going to do the bulk of the&#xA;work to edit the post.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;cd to where I want to edit from&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ~/git/waylonwalkerv2/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Next I need to find all markdown pages within my posts directory.  There is&#xA;probably a better way to filter with the &lt;code&gt;find&lt;/code&gt; command directly, but I am not&#xA;worried about perf here and I knew how to do it without google.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;find all markdown&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;find ~/git/waylonwalkerv2/src/pages/ &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep .md$&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now that we can list all potential posts, sending the selected post back to&#xA;neovim is as easy as piping those files into fzf inside of a command&#xA;substitution that is called with neovim.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;putting together the edit command&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$EDITOR&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;find ~/git/waylonwalkerv2/src/pages/ &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep .md$ &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fzf&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;final-script&#34;&gt;Final Script &lt;a href=&#34;#final-script&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;final ep function&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ep &lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;_dir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;pwd&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    _ep &lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ~/git/waylonwalkerv2/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$EDITOR&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;find ~/git/waylonwalkerv2/src/pages/ &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep .md$ &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fzf&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    _ep &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$_dir&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$_dir&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Gitui is a blazing fast terminal git interface</title>
    <id>https://waylonwalker.com/gitui/</id>
    <updated>2021-01-17T00:00:00Z</updated>
    <published>2021-01-17T00:00:00Z</published>
    <link href="https://waylonwalker.com/gitui/" rel="alternate" type="text/html"></link>
    <summary type="text">Gitui is a terminal-based git user interface (TUI) that will change the way that you work with git. I have been a long-time user of the git cli, and it&#39;s...</summary>
    <content type="html">&lt;p&gt;Gitui is a terminal-based &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; user interface (TUI) that will change the way&#xA;that you work with git. I have been a long-time user of the git cli, and it’s&#xA;been hard to beat, mostly because there is nothing that keeps my fingers on the&#xA;keyboard quite like it, except &lt;code&gt;gitui&lt;/code&gt; which comes with some great ways to very&#xA;quickly walk through a git project.&lt;/p&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;installation &lt;a href=&#34;#installation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Go to their [releases]https://github.com/extrawurst/gitui/releases) page,&#xA;download the latest build, and pop it on your PATH.  I have the following&#xA;stuffed away in some install scripts to get the latest version.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;install latest release&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;GITUI_VERSION&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;curl --silent https://github.com/extrawurst/gitui/releases/latest &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tr -d &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#34;&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sed &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/^.*tag\///g&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sed &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/&amp;gt;.*$//g&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sed &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/^v//&amp;#39;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://github.com/extrawurst/gitui/releases/download/v&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;GITUI_VERSION&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;/gitui-linux-musl.tar.gz -O- -q &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tar -zxf - -C /usr/bin/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;run-gitui&#34;&gt;run &lt;code&gt;gitui&lt;/code&gt; &lt;a href=&#34;#run-gitui&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It opens blazing fast.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gitui&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;quick-commits&#34;&gt;Quick Commits &lt;a href=&#34;#quick-commits&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Sometimes I edit a number of files and want to commit them one at a time, this&#xA;is painful in the git cli and my main use case for &lt;code&gt;gitui&lt;/code&gt;.  &lt;code&gt;gitui&lt;/code&gt; shows&#xA;unstaged changes at the top, staged changes on the bottom, and a diff on the&#xA;right.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/gitui-status.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/gitui-status.png&#34; alt=&#34;gitui status&#34;/ data-glightbox=&#34;description: gitui status&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;navigate-with-hjkl&#34;&gt;Navigate with hjkl &lt;a href=&#34;#navigate-with-hjkl&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;By default, &lt;code&gt;gitui&lt;/code&gt; uses arrow keys, but simply copying&#xA;&lt;a href=&#34;https://github.com/extrawurst/gitui/blob/master/vim_style_key_config.ron&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vim_style_key_config.ron&lt;/a&gt;&#xA;to your config directory will get you vim-like keybindings.&lt;/p&gt;&#xA;&lt;h2 id=&#34;workflow&#34;&gt;workflow &lt;a href=&#34;#workflow&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Generally, I pop open &lt;code&gt;gitui&lt;/code&gt;, use j/k to get to the file I want to commit,&#xA;glance at the diff to the right, press enter to stage the file, sc to switch&#xA;focus to the saged files and commit, write my commit message hit enter and&#xA;done.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;w/s:   to toggle focus between working and staged changes&lt;/li&gt;&#xA;&lt;li&gt;j/k:   to scroll each section&lt;/li&gt;&#xA;&lt;li&gt;h/l:   switch between left and right side&lt;/li&gt;&#xA;&lt;li&gt;enter: toggle file from working or staging&lt;/li&gt;&#xA;&lt;li&gt;c:     start a commit message&lt;/li&gt;&#xA;&lt;li&gt;p:     push&lt;/li&gt;&#xA;&lt;li&gt;&lt;c-c&gt;: quit&lt;/c-c&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;other-panes&#34;&gt;Other Panes &lt;a href=&#34;#other-panes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I am in the &lt;code&gt;Status [1]&lt;/code&gt; pane 90% of the time, but it also has three other&#xA;panes for &lt;code&gt;Log [2]&lt;/code&gt;, &lt;code&gt;Stashing [3]&lt;/code&gt;, and &lt;code&gt;Stashes [4]&lt;/code&gt;.  I do not really use&#xA;the stashes panes, but the &lt;code&gt;Log [2]&lt;/code&gt; pane is quite useful to quickly go through&#xA;the last set of commits and see the diff for each of them.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-ui-do-you-use-for-git&#34;&gt;What UI do you use for git &lt;a href=&#34;#what-ui-do-you-use-for-git&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let me know what ui you use for git, do you stick to the cli, use a gui, or use&#xA;a similar &lt;code&gt;TUI&lt;/code&gt; interface?&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Kedro - My Data Is Not A Table</title>
    <id>https://waylonwalker.com/kedro-pickle/</id>
    <updated>2021-01-14T00:00:00Z</updated>
    <published>2021-01-14T00:00:00Z</published>
    <link href="https://waylonwalker.com/kedro-pickle/" rel="alternate" type="text/html"></link>
    <summary type="text">In python data science/engineering most of our data is in the form of some sort of table, typically a DataFrame from a library like pandas, spark, or dask.</summary>
    <content type="html">&lt;p&gt;In python data science/engineering most of our data is in the form of some sort&#xA;of table, typically a DataFrame from a library like pandas, spark, or dask.&lt;/p&gt;&#xA;&lt;h2 id=&#34;dataframes-are-the-heart-of-most-pipelines&#34;&gt;DataFrames are the heart of most pipelines &lt;a href=&#34;#dataframes-are-the-heart-of-most-pipelines&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;These containers for data contain many convenient methods to manipulate table&#xA;like data structures.  Sometimes we leverage other data types, namely vanilla&#xA;types like lists and dicts, or even numpy data types.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/what-is-kedro/&#34; class=&#34;wikilink&#34; data-title=&#34;What is Kedro&#34; data-description=&#34;Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...&#34; data-date=&#34;2021-08-17&#34; data-preview=&#34;Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...&#34;&gt;What is Kedro&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;unfamiliar with kedro, check out this post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;sometimes-datasets-are-not-tables&#34;&gt;Sometimes datasets are not tables &lt;a href=&#34;#sometimes-datasets-are-not-tables&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There are times when our data doesn’t fit nicely into a DataFrame. Lucky for us&#xA;Kedro has pickle support out of the box.  Pickle is a way to store any python&#xA;object to disk.  Beware that pickle files coming from an unknown source can run&#xA;malicous code and are considered unsafe.  For the most part though when you&#xA;read and write your own pickle files they are a good tool to consider.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;See more about &lt;a href=&#34;https://docs.python.org/3/library/pickle.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/docs.python.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/docs.python.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pickle&lt;/a&gt; from python.org.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;cataloging-pickle&#34;&gt;Cataloging Pickle &lt;a href=&#34;#cataloging-pickle&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I may have a dictionary that describes some cars.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;truck-012-abc&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s1&#34;&gt;&amp;#39;type&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;truck&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s1&#34;&gt;&amp;#39;sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s1&#34;&gt;&amp;#39;weight&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;9024&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s1&#34;&gt;&amp;#39;accesories&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;leather&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;audio-1&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In the catalog we will simply set the type as &lt;code&gt;pickle.PickleDataSet&lt;/code&gt; and give&#xA;it a filepath.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;cars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/cars.pkl&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pickle.PickleDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;This filepath does not have to be on the local filesystem it can be on the&#xA;cloud thanks to how kedro utilizes fsspec for each of its datasets.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;loading-the-dataset&#34;&gt;Loading the dataset &lt;a href=&#34;#loading-the-dataset&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The benefit of cataloging this dataset compared to leaving it as a&#xA;&lt;code&gt;MemoryDataSet&lt;/code&gt; is that you can easily load this data back into memory for&#xA;further development or debugging without running any of the pipeline.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;cars&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ asottile babi</title>
    <id>https://waylonwalker.com/asottile-babi/</id>
    <updated>2021-01-11T04:47:17Z</updated>
    <published>2021-01-11T04:47:17Z</published>
    <link href="https://waylonwalker.com/asottile-babi/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out asottile and their project babi.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/asottile&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;asottile&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/asottile/babi&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;babi&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;a text editor&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Quickly Change Conda Env With Fzf</title>
    <id>https://waylonwalker.com/quickly-change-conda-env-with-fzf/</id>
    <updated>2021-01-11T00:00:00Z</updated>
    <published>2021-01-11T00:00:00Z</published>
    <link href="https://waylonwalker.com/quickly-change-conda-env-with-fzf/" rel="alternate" type="text/html"></link>
    <summary type="text">Changing conda environments is a bit verbose, I use a function with fzf that both lists environments and selects the one I want in one go.</summary>
    <content type="html">&lt;p&gt;Changing conda environments is a bit verbose, I use a function with fzf that&#xA;both lists environments and selects the one I want in one go.&lt;/p&gt;&#xA;&lt;h2 id=&#34;conda&#34;&gt;Conda &lt;a href=&#34;#conda&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have used conda as a &lt;a href=&#34;/virtual-environment/&#34; class=&#34;glossary-term&#34; title=&#34;Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...&#34;&gt;virtual environment&lt;/a&gt; tool for years now.  I started using&#xA;conda for its simplicity to install packages on windows, but now that has&#xA;gotten so much better and it’s been years since I have run a &lt;code&gt;conda install&lt;/code&gt;&#xA;command.  I’m sure that I could use a different environment manager, but it&#xA;works for me and makes sense.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What environment manager do you use for python?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Conda environments are stored in a central location such as&#xA;&lt;code&gt;~/miniconda3/envs/&lt;/code&gt; and not with the project.  They contain both the python&#xA;interpreter and packages for that env.&lt;/p&gt;&#xA;&lt;h2 id=&#34;conda-create&#34;&gt;Conda create &lt;a href=&#34;#conda-create&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Conda environments are created with the &lt;code&gt;conda create&lt;/code&gt; command.  At this point,&#xA;you will need to name your env and select the python version.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda create -n my_env &lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;3.8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;After running this command you will have a directory &lt;code&gt;~/miniconda3/envs/my_env&lt;/code&gt;&#xA;with a base python install.  It will not be active yet.&lt;/p&gt;&#xA;&lt;h2 id=&#34;list-environments&#34;&gt;List environments &lt;a href=&#34;#list-environments&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Before activating an environment I often want to list the environments that I&#xA;have installed which are often upwards of 70, so it’s hard to remember them&#xA;all.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda info --envs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;After running this command you will see something like the following.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# conda environments:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;base                     /home/waylon/miniconda3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;my_env                   /home/waylon/my_env&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;activating-an-environment&#34;&gt;Activating an environment &lt;a href=&#34;#activating-an-environment&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Activating a conda environment will do some magic to your current shells&#xA;&lt;code&gt;$PATH&lt;/code&gt; variable to ensure that the environment that you select is preferred&#xA;over the base environment.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda activate my_env&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;ready-to-work&#34;&gt;Ready to work &lt;a href=&#34;#ready-to-work&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now you can install packages for your project in an isolated environment safe&#xA;from wrecking another project or being wrecked by another project.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install -r requirements.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;using-fzf&#34;&gt;Using fzf &lt;a href=&#34;#using-fzf&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;a bit less verbose&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/junegunn/fzf&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fzf&lt;/a&gt; is an amazing tool for the terminal that&#xA;is a generic fuzzy matcher.  It is super performant and can handle insane&#xA;amounts of text and is brilliant at figuring out what you mean with just a few&#xA;characters.  We can use it here to list out all of our conda environments and&#xA;select the one we want to activate with just a few keystrokes.&lt;/p&gt;&#xA;&lt;h3 id=&#34;selecting-the-environment&#34;&gt;Selecting the environment &lt;a href=&#34;#selecting-the-environment&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Piping our list of environments directly into &lt;code&gt;fzf&lt;/code&gt; gives us a fuzzy selection&#xA;where we can type a few characters and it will return the row we were looking&#xA;for.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda info --envs &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fzf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This returns us something like this which also includes the path where it is&#xA;located.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;my_env                 /home/walkews/miniconda3/envs/my_env&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;getting-just-the-environment-name&#34;&gt;getting just the environment name &lt;a href=&#34;#getting-just-the-environment-name&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;To get just the name without the path I pipe the output into awk.  There are&#xA;many ways to do this in bash, this is the way that worked for me at the time I&#xA;made this function.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda info --envs &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fzf &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $1}&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;time-to-activate&#34;&gt;Time to activate &lt;a href=&#34;#time-to-activate&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Functions that use &lt;code&gt;fzf&lt;/code&gt; can be a bit odd, running them in a subshell with the&#xA;$() syntax generally makes it super simple to utilize the output.  No matter&#xA;how many times I have tried without running it in a subshell it’s always buggy&#xA;without it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda activate &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;conda info --envs &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fzf &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $1}&amp;#39;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This will now run conda activate on the environment that we select with fzf.&lt;/p&gt;&#xA;&lt;h3 id=&#34;make-it-a-function&#34;&gt;Make it a function &lt;a href=&#34;#make-it-a-function&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;We don’t want to type that out every time we want to activate an environment. I&#xA;keep a function called &lt;code&gt;a&lt;/code&gt; in my &lt;code&gt;~/.bashrc&lt;/code&gt; and &lt;code&gt;~/.zshrc&lt;/code&gt; so that I can&#xA;activate an environment with a single character.  Yes, I switch environments&#xA;often enough to justify the valuable namespace of a single character.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;a &lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  conda activate &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;conda info --envs &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fzf &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $1}&amp;#39;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/reusable-bash/&#34; class=&#34;wikilink&#34; data-title=&#34;Creating Reusable Bash Scripts&#34; data-description=&#34;Bash is a language that is quite useful for automation no matter what language you write in. Bash can do so many powerful system-level tasks. Even if you are...&#34; data-date=&#34;2020-08-13&#34; data-preview=&#34;Bash is a language that is quite useful for automation no matter what language you write in. Bash can do so many powerful system-level tasks. Even if you are...&#34;&gt;Creating Reusable Bash Scripts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on writing reusable bash scripts check out one of my&#xA;favorite articles&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I am always on the lookout for cool new use cases for &lt;code&gt;fzf&lt;/code&gt;, if you have one please share it with me.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Vim Replace Visual Star</title>
    <id>https://waylonwalker.com/vim-replace-visual-star/</id>
    <updated>2021-01-10T00:00:00Z</updated>
    <published>2021-01-10T00:00:00Z</published>
    <link href="https://waylonwalker.com/vim-replace-visual-star/" rel="alternate" type="text/html"></link>
    <summary type="text">Replacing text based on whats in the current search register is a quite handy tool that I use often. I believe I picked this tip up from Nick Janetakis,...</summary>
    <content type="html">&lt;p&gt;Replacing text based on whats in the current search register is a quite handy&#xA;tool that I use often.  I believe I picked this tip up from Nick Janetakis,&#xA;check out his YouTube channel for some amazing vim tips.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=fP_ckZ30gbs&#34; class=&#34;hoverlink  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34;&gt;https://www.youtube.com/watch?v=fP_ckZ30gbs&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;If there is one thing that I Like most about vim it’s the ability to hack on it&#xA;and make it work well for you.&lt;/p&gt;&#xA;&lt;h2 id=&#34;replacing-text-in-vim&#34;&gt;Replacing text in vim &lt;a href=&#34;#replacing-text-in-vim&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Vim can often be a bit verbose, but that’s ok because we can hack on it, and&#xA;make our own shortcuts and keybindings.  For instance, finding and replacing&#xA;text requires using a command at the vim command-line &lt;code&gt;:&lt;/code&gt;.  Replacing foo with&#xA;bar looks like this &lt;code&gt;:%s/foo/bar/g&lt;/code&gt;, the final g means all of the foos, not just&#xA;the first one on the line.&lt;/p&gt;&#xA;&lt;h2 id=&#34;making-it-better&#34;&gt;making it better &lt;a href=&#34;#making-it-better&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have a keybinding in my &lt;code&gt;init.vim&lt;/code&gt; that will allow me to search for a pattern&#xA;with the usual &lt;code&gt;/&lt;/code&gt; character, page through them as normal with &lt;code&gt;n&lt;/code&gt; and &lt;code&gt;N&lt;/code&gt;, but&#xA;when I press &lt;code&gt;&amp;lt;C-R&amp;gt;&lt;/code&gt; it will populate the replace command for me so that all I&#xA;need to do is type out the new text.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;nnoremap&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; :%&lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/&amp;lt;C-R&amp;gt;///&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;note-on-the-c-r&#34;&gt;Note on the &lt;code&gt;&amp;lt;C-R&amp;gt;/&lt;/code&gt; &lt;a href=&#34;#note-on-the-c-r&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;In command mode &lt;code&gt;:&lt;/code&gt; vim allows you to paste any text from any register into the&#xA;current command.  The &lt;code&gt;&amp;lt;C-R&amp;gt;/&lt;/code&gt; will paste the text from the current search&#xA;register into the command.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;&amp;lt;C-R&amp;gt;&lt;/code&gt; in command mode can paste text from any register, you can see what&#xA;registers are in use with the &lt;code&gt;:reg&lt;/code&gt; command.  There are a lot of them and many&#xA;get populated automatically as you yank text or create macros.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/save-vim-macro/&#34; class=&#34;wikilink&#34; data-title=&#34;Save Vim Macro&#34; data-description=&#34;If you are like me, you have created a macro or two that is pure glory, and you forget how you made it after a day or so, or you immediately want to store it...&#34; data-date=&#34;2021-01-04&#34; data-preview=&#34;If you are like me, you have created a macro or two that is pure glory, and you forget how you made it after a day or so, or you immediately want to store it...&#34;&gt;Save Vim Macro&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Also see how to use &lt;c-r&gt; to save macros to key bindings easily&lt;/c-r&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Minimal Python Package</title>
    <id>https://waylonwalker.com/minimal-python-package/</id>
    <updated>2021-01-10T00:00:00Z</updated>
    <published>2021-01-10T00:00:00Z</published>
    <link href="https://waylonwalker.com/minimal-python-package/" rel="alternate" type="text/html"></link>
    <summary type="text">What does it take to create an installable python package that can be hosted on pypi?</summary>
    <content type="html">&lt;p&gt;What does it take to create an installable python package that can be hosted on pypi?&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-the-minimal-python-package&#34;&gt;What is the minimal python package &lt;a href=&#34;#what-is-the-minimal-python-package&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;setup.py&lt;/li&gt;&#xA;&lt;li&gt;my_module.py&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This post is somewhat inspired by the bottle framework, which is famously created as a single python module.  Yes, a whole web framework is written in one file.&lt;/p&gt;&#xA;&lt;h2 id=&#34;directory-structure&#34;&gt;Directory structure &lt;a href=&#34;#directory-structure&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── setup.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── my_pipeline.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;setuppy&#34;&gt;setup.py &lt;a href=&#34;#setuppy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;setuptools&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;setup&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;setup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;0.1.0&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;py_modules&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;my_pipeline&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;install_requires&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;name&#34;&gt;name &lt;a href=&#34;#name&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The name of the package can contain any letters, numbers, “_”, or “-”.  Even if it’s for internal/personal consumption only I usually check for discrepancy with pypi so that you don’t run into conflicts.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Note that pypi treats “-” and “_” as the same thing, beware of name clashes&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;version&#34;&gt;version &lt;a href=&#34;#version&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is the version number of your package.  Most packages follow&#xA;&lt;a href=&#34;https://semver.org&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/semver.org.jpg&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/semver.org.jpg&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;semver&lt;/a&gt;.  At a high level its three numbers separated by a &lt;code&gt;.&lt;/code&gt; that follow the format &lt;code&gt;major.minor.patch&lt;/code&gt;.  It’s a common courtesy to only break APIs on major changes, new releases on minor, and fixes on patch.  This can become much more blurry in practice so checkout &lt;a href=&#34;https://semver.org/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/semver.org.jpg&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/semver.org.jpg&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;semver.org&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;py-modules&#34;&gt;py_modules &lt;a href=&#34;#py-modules&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Typically most packages use the &lt;code&gt;packages&lt;/code&gt; argument combined with&#xA;&lt;code&gt;find_packages&lt;/code&gt;, but for this minimal package, we are only creating one &lt;code&gt;.py&lt;/code&gt; file.&lt;/p&gt;&#xA;&lt;h2 id=&#34;using-packages-instead&#34;&gt;Using packages instead &lt;a href=&#34;#using-packages-instead&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;setuptools&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;setup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;find_packages&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;setup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;0.1.0&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;packages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;find_packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;install_requires&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;install-requires&#34;&gt;install_requires &lt;a href=&#34;#install-requires&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;These are your external dependencies that come from pypi.  They go in this list but are often pulled in from a file called &lt;code&gt;requirements.txt&lt;/code&gt;.  Other developers may look for this file and want to do a &lt;code&gt;pip install -r requirements.txt&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;clean&#34;&gt;Clean? &lt;a href=&#34;#clean&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;One thing to be careful of here is that everything sits at the top level API, when you users import your module and hit tab they are going to see a lot of stuff unless you hide all of your internal functions behind an &lt;code&gt;_&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;minimal&#34;&gt;Minimal &lt;a href=&#34;#minimal&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Can you create a python package with less than two files and less than 8 lines? Should you?  I really like a minimal point to get started from for quick and simple prototypes.  You can always pull a more complicated &lt;code&gt;cookiecutter&lt;/code&gt; template later if the project is successful.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ jameslittle230 stork</title>
    <id>https://waylonwalker.com/jameslittle230-stork/</id>
    <updated>2021-01-09T15:52:43Z</updated>
    <published>2021-01-09T15:52:43Z</published>
    <link href="https://waylonwalker.com/jameslittle230-stork/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out jameslittle230 and their project stork.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/jameslittle230&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jameslittle230&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/jameslittle230/stork&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;stork&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;🔎 Impossibly fast web search, made for static sites.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>If Tmux</title>
    <id>https://waylonwalker.com/if-tmux/</id>
    <updated>2021-01-09T00:00:00Z</updated>
    <published>2021-01-09T00:00:00Z</published>
    <link href="https://waylonwalker.com/if-tmux/" rel="alternate" type="text/html"></link>
    <summary type="text">I do much of my work from tmux, I love it so much that I want to setup some functionality that puts me in tmux even if I didn&#39;t ask for it.</summary>
    <content type="html">&lt;p&gt;I do much of my work from tmux, I love it so much that I want to setup some&#xA;functionality that puts me in tmux even if I didn’t ask for it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;bash-function&#34;&gt;Bash Function &lt;a href=&#34;#bash-function&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Bash function to check if the shell is in a tmux session.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;in_tmux &lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$TMUX&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;using-the-bash-function&#34;&gt;Using the bash function &lt;a href=&#34;#using-the-bash-function&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I often open up vim to do some quite edits, but before I know it I have several&#xA;splits open and I need access to another shell utility, but I forgot to start&#xA;in tmux.  This function makes sure tht I start in tmux everytime.&lt;/p&gt;&#xA;&lt;p&gt;Using &lt;code&gt;if_tmux&lt;/code&gt; to ensure vim is opened in tmux.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim &lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  in_tmux &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; nvim &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; bash -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    tmux new-session -d;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    tmux send-keys nvim Space +GFiles C-m;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    tmux -2 attach-session -d;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    &amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I am not quite sure if this is proper use of the &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; and &lt;code&gt;||&lt;/code&gt;, let me know if&#xA;you have a better way to do one thing if &lt;code&gt;in_tmux&lt;/code&gt; returns true and another if&#xA;it returns faslse.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tpope vim-commentary</title>
    <id>https://waylonwalker.com/tpope-vim-commentary/</id>
    <updated>2021-01-08T13:41:26Z</updated>
    <published>2021-01-08T13:41:26Z</published>
    <link href="https://waylonwalker.com/tpope-vim-commentary/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on vim-commentary, created by tpope.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/tpope/vim-commentary&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vim-commentary&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/tpope&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tpope&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;commentary.vim: comment stuff out&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tpope vim-fugitive</title>
    <id>https://waylonwalker.com/tpope-vim-fugitive/</id>
    <updated>2021-01-08T13:41:17Z</updated>
    <published>2021-01-08T13:41:17Z</published>
    <link href="https://waylonwalker.com/tpope-vim-fugitive/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about vim-fugitive, an amazing project by tpope. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/tpope/vim-fugitive&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vim-fugitive&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/tpope&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tpope&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;fugitive.vim: A &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;Git&lt;/a&gt; wrapper so awesome, it should be illegal&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tpope vim-surround</title>
    <id>https://waylonwalker.com/tpope-vim-surround/</id>
    <updated>2021-01-08T13:41:06Z</updated>
    <published>2021-01-08T13:41:06Z</published>
    <link href="https://waylonwalker.com/tpope-vim-surround/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on vim-surround by tpope.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/tpope/vim-surround&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vim-surround&lt;/a&gt; by &lt;a href=&#34;https://github.com/tpope&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tpope&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;surround.vim: Delete/change/add parentheses/quotes/XML-tags/much more with ease&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ kedro-org kedro-starters</title>
    <id>https://waylonwalker.com/kedro-org-kedro-starters/</id>
    <updated>2021-01-06T22:26:48Z</updated>
    <published>2021-01-06T22:26:48Z</published>
    <link href="https://waylonwalker.com/kedro-org-kedro-starters/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on kedro-starters, created by kedro-org.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/kedro-org/kedro-starters&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-starters&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/kedro-org&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-org&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Templates for your Kedro projects.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Save Vim Macro</title>
    <id>https://waylonwalker.com/save-vim-macro/</id>
    <updated>2021-01-04T00:00:00Z</updated>
    <published>2021-01-04T00:00:00Z</published>
    <link href="https://waylonwalker.com/save-vim-macro/" rel="alternate" type="text/html"></link>
    <summary type="text">If you are like me, you have created a macro or two that is pure glory, and you forget how you made it after a day or so, or you immediately want to store it...</summary>
    <content type="html">&lt;p&gt;If you are like me, you have created a macro or two that is pure glory, and you forget how you made it after a day or so, or you immediately want to store it away as a custom keybinding. As with most things with vim, it’s easy to do once you understand it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;creating-a-macro&#34;&gt;Creating a Macro &lt;a href=&#34;#creating-a-macro&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;One of the earliest things we all learn to do in vim is to create macros, custom sets of functionality stored in a register that can be replayed later.&lt;/p&gt;&#xA;&lt;p&gt;To create a macro, get into normal mode, then type &lt;code&gt;q&lt;/code&gt; followed by a letter that you want to store the macro under.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;qq&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Note: a common throw-away macro register is q because it’s easy to hit qq from normal mode to start recording.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;replaying-a-macro&#34;&gt;Replaying a Macro &lt;a href=&#34;#replaying-a-macro&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Macros can be replayed using &lt;code&gt;@&lt;/code&gt; followed by the letter that you stored the macro under.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;@&lt;span class=&#34;nx&#34;&gt;q&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;registers&#34;&gt;Registers &lt;a href=&#34;#registers&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Registers are nothing more than a single character key mapping to a value of some text. As you &lt;code&gt;yank&lt;/code&gt;, &lt;code&gt;delete&lt;/code&gt;, or create macros in vim, it automatically stores text into these registers.&lt;/p&gt;&#xA;&lt;p&gt;When you hit &lt;code&gt;p&lt;/code&gt; paste it’s simply pasting in the default register. You can also paste in any other register by hitting &lt;code&gt;&amp;#34;qp&lt;/code&gt; where q is the register that you want to paste in.&lt;/p&gt;&#xA;&lt;h2 id=&#34;listing-registers&#34;&gt;Listing Registers &lt;a href=&#34;#listing-registers&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;To see what you have stored in each register, use the &lt;code&gt;:reg&lt;/code&gt; command. This is a powerful tool that I have underutilized for a long time. It is really great to see what you have in each register.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;reg&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;making-a-macro-into-a-shortcut&#34;&gt;making a macro into a shortcut &lt;a href=&#34;#making-a-macro-into-a-shortcut&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;a little &amp;lt;c-r&amp;gt; magic&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Thgve magical shortcut that makes it easy is that control + r &lt;code&gt;&amp;lt;C-R&amp;gt;&lt;/code&gt; followed by a register will paste that register wherever you currently are, including the command mode.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;nnoremap&lt;/span&gt; {&lt;span class=&#34;nx&#34;&gt;binding&lt;/span&gt;} &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;{&lt;span class=&#34;nx&#34;&gt;register&lt;/span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;editing-a-macro&#34;&gt;Editing a Macro &lt;a href=&#34;#editing-a-macro&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;relieve some of that Macro Pressure&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now that we understand that macros are simply strings of text placed into a register, it becomes a bit more intuitive to edit them after being created.&lt;/p&gt;&#xA;&lt;p&gt;First, paste the contents of the register into your current working buffer.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;q&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then edit the macro and add it back to that buffer and delete it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;#34;qdd&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If your macro had multiple lines in it, you might need to.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;#34;qdj&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;#34;qd2j&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;make-it-recursive&#34;&gt;Make it recursive &lt;a href=&#34;#make-it-recursive&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;One use case of editing a macro may be making it recursive after trying it out a few times. Macros can become recursive by simply calling themselves after running.&lt;/p&gt;&#xA;&lt;p&gt;Paste in the macro.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;q&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Go to the end of the line and add &lt;code&gt;@q&lt;/code&gt; to get called again.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;A&lt;/span&gt; @&lt;span class=&#34;nx&#34;&gt;q&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Replace the &lt;code&gt;q&lt;/code&gt; register with the updated macro.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;#34;qd&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Note: don’t use this in a shortcut as the macro may change. If you want to call the keybinding again, you will have to use noremap instead of nnoremap, but be careful as recursive remaps can be dangerous.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;recap&#34;&gt;Recap &lt;a href=&#34;#recap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;#34; record a macro&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;q&lt;/span&gt;{&lt;span class=&#34;nx&#34;&gt;register&lt;/span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;#34; play a macro&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;@{&lt;span class=&#34;nx&#34;&gt;register&lt;/span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;#34; list registers&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;reg&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;#34; map a macro to a keyboard shortcut&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;nnoremap&lt;/span&gt; {&lt;span class=&#34;nx&#34;&gt;binding&lt;/span&gt;} &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;{&lt;span class=&#34;nx&#34;&gt;register&lt;/span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;#34; edit a macro&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;{&lt;span class=&#34;nx&#34;&gt;register&lt;/span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;#34;{register}dd&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;#34; make a macro recursive&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;R&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;{&lt;span class=&#34;nx&#34;&gt;register&lt;/span&gt;}&lt;span class=&#34;nx&#34;&gt;A&lt;/span&gt;@&lt;span class=&#34;nx&#34;&gt;q&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;esc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&amp;#34;{&lt;span class=&#34;nx&#34;&gt;register&lt;/span&gt;}&lt;span class=&#34;nx&#34;&gt;dd&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Live Substitution In Neovim</title>
    <id>https://waylonwalker.com/neovim-live-substitution/</id>
    <updated>2021-01-04T00:00:00Z</updated>
    <published>2021-01-04T00:00:00Z</published>
    <link href="https://waylonwalker.com/neovim-live-substitution/" rel="alternate" type="text/html"></link>
    <summary type="text">Replacing text in vim can be quite frustrating especially since it doesn&#39;t have live feedback to what is changing. Today I was watching Josh Branchaud&#39;s...</summary>
    <content type="html">&lt;p&gt;Replacing text in vim can be quite frustrating especially since it doesn’t have&#xA;live feedback to what is changing. Today I was watching Josh Branchaud’s&#xA;Vim-Unalphabet series on Youtuve and realized that his vim was doing this and I&#xA;had to have it.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://twitter.com/_WaylonWalker/status/1346081617199198210&#34;&gt;https://twitter.com/_WaylonWalker/status/1346081617199198210&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-to-do-it&#34;&gt;How to do it &lt;a href=&#34;#how-to-do-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I had to do a bit of searching and found a great post from &lt;a href=&#34;https://vimcasts.org/episodes/neovim-eyecandy/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/vimcasts.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/vimcasts.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vimcasts&lt;/a&gt; that shows exactly how to get the live search and replace highlighting using &lt;code&gt;inccomand&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;h-inccommand&#34;&gt;:h inccommand &lt;a href=&#34;#h-inccommand&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;inccommand&amp;#39;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;icm&amp;#39;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;default&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nx&#34;&gt;global&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt; &amp;#34;nosplit&amp;#34;: Shows the effects of a command incrementally, as you type.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt; &amp;#34;split&amp;#34;  : Also shows partial off-screen results in a preview window.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nx&#34;&gt;Works&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;:&lt;span class=&#34;nx&#34;&gt;substitute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;:&lt;span class=&#34;nx&#34;&gt;smagic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;:&lt;span class=&#34;nx&#34;&gt;snomagic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;. &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;hl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Substitute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nx&#34;&gt;If&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;preview&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;too&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;slow&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;exceeds&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;redrawtime&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;then&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;inccommand&amp;#39;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;is&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nx&#34;&gt;automatically&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;disabled&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;until&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;mode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;done&lt;/span&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;add-this-to-your-config&#34;&gt;Add this to your config &lt;a href=&#34;#add-this-to-your-config&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I believe that this is a neovim only feature, add it into your&#xA;&lt;code&gt;~/.config/nvim/init.vim&lt;/code&gt; file. You can see it in my&#xA;&lt;a href=&#34;https://github.com/WaylonWalker/devtainer/blob/main/nvim/.config/nvim/settings.vim#L155&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dotfiles&lt;/a&gt;&#xA;as well.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;inccommand&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;nosplit&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;see-it-in-action&#34;&gt;See it in Action &lt;a href=&#34;#see-it-in-action&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://images.waylonwalker.com/nvim-live-substitute-inccommand.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/nvim-live-substitute-inccommand.gif&#34; alt=&#34;example live&#xA;substitution&#34;/ data-glightbox=&#34;description: example live&#xA;substitution&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-video-that-inspired-this&#34;&gt;The Video that inspired this &lt;a href=&#34;#the-video-that-inspired-this&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Check out Josh Branchaud’s great series on the Vim-Unalphabet.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=5jMiYtXz2QA&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://www.youtube.com/watch?v=5jMiYtXz2QA&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ khzaw vim-conceal</title>
    <id>https://waylonwalker.com/khzaw-vim-conceal/</id>
    <updated>2021-01-03T00:56:45Z</updated>
    <published>2021-01-03T00:56:45Z</published>
    <link href="https://waylonwalker.com/khzaw-vim-conceal/" rel="alternate" type="text/html"></link>
    <summary type="text">khzaw has done a fantastic job with vim-conceal. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/khzaw&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;khzaw&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/khzaw/vim-conceal&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vim-conceal&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;A vim plugin making use of vim’s conceal feature for additional visual eyecandy.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Newsboat</title>
    <id>https://waylonwalker.com/newsboat/</id>
    <updated>2021-01-02T00:00:00Z</updated>
    <published>2021-01-02T00:00:00Z</published>
    <link href="https://waylonwalker.com/newsboat/" rel="alternate" type="text/html"></link>
    <summary type="text">Web browsers are a black hole of productivity. I try to use them as little as possible when it is time to focus. I try to use , , or with ipython, or --help...</summary>
    <content type="html">&lt;p&gt;Web browsers are a black hole of productivity.  I try to use them as little as&#xA;possible when it is time to focus.  I try to use &lt;code&gt;help&lt;/code&gt;, &lt;code&gt;?&lt;/code&gt;, or &lt;code&gt;??&lt;/code&gt; with&#xA;ipython, or –help at the command line as much as possible.  What about that&#xA;time I am trying to see what my online friends are posting on their sites?  I&#xA;used to used google reader quite heavily before that was taken down.&lt;/p&gt;&#xA;&lt;h2 id=&#34;newsboat&#34;&gt;Newsboat &lt;a href=&#34;#newsboat&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I am going to give a terminal rss reader a try for a bit and see how that goes&#xA;for me.  I have really struggled to get into an rss reader since google reader&#xA;died.&lt;/p&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;installation &lt;a href=&#34;#installation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I installed with the reccomended snap for Ubuntu.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo snap install newsboat&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;adding-feeds&#34;&gt;Adding feeds &lt;a href=&#34;#adding-feeds&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;super simple&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Running help for newsboat directed me towards their config files at the bottom.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ newsboat --help&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;newsboat r2.22&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;usage: /snap/newsboat/3849/usr/local/bin/newsboat &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-i &amp;lt;file&amp;gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;-e&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-u &amp;lt;urlfile&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-c &amp;lt;cachefile&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-x &amp;lt;command&amp;gt; ...&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-h&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -e, --export-to-opml        &lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; OPML feed to stdout&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -r, --refresh-on-start      refresh feeds on start&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -i, --import-from-opml&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;lt;file&amp;gt;   import OPML file&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -u, --url-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;lt;urlfile&amp;gt;    &lt;span class=&#34;nb&#34;&gt;read&lt;/span&gt; RSS feed URLs from &amp;lt;urlfile&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -c, --cache-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;lt;cachefile&amp;gt;    use &amp;lt;cachefile&amp;gt; as cache file&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -C, --config-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;lt;configfile&amp;gt;  &lt;span class=&#34;nb&#34;&gt;read&lt;/span&gt; configuration from &amp;lt;configfile&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -X, --vacuum            compact the cache&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -x, --execute&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;lt;command&amp;gt;...  execute list of commands&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -q, --quiet         quiet startup&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -v, --version           get version information&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -l, --log-level&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;lt;loglevel&amp;gt;  write a log with a certain loglevel &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;valid values: &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; to 6&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -d, --log-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;lt;logfile&amp;gt;    use &amp;lt;logfile&amp;gt; as output log file&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -E, --export-to-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;lt;file&amp;gt; &lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; list of &lt;span class=&#34;nb&#34;&gt;read&lt;/span&gt; articles to &amp;lt;file&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -I, --import-from-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;lt;file&amp;gt;   import list of &lt;span class=&#34;nb&#34;&gt;read&lt;/span&gt; articles from &amp;lt;file&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -h, --help          this &lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        --cleanup           remove unreferenced items from cache&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Files:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    - configuration:  /home/nic/snap/newsboat/3849/.newsboat/config&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    - feed URLs:      /home/nic/snap/newsboat/3849/.newsboat/urls&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    - cache:          /home/nic/snap/newsboat/3849/.newsboat/cache.db&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Support at &lt;span class=&#34;c1&#34;&gt;#newsboat at https://freenode.net or on our mailing list https://groups.google.com/g/newsboat&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;For more information, check out https://newsboat.org/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I just need to edit its urls file.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvim ~/snap/newsboat/3849/.newsboat/urls&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The Urls file is just a list of urls to rss feeds.  Adding mine in allowed me to see all of my posts.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;https://waylonwalker.com/rss.xml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;config&#34;&gt;Config &lt;a href=&#34;#config&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I took most of my config from a &lt;a href=&#34;https://evantravers.com/articles/2020/04/15/reworking-my-rss-reading/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/evantravers.com.svg&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/evantravers.com.svg&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;blog&#xA;post&lt;/a&gt;&#xA;that I found by Evan Travers.  It set some sane defaults to the reading width&#xA;and vim keys.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# https://evantravers.com/articles/2020/04/15/reworking-my-rss-reading/&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Hide feeds where all the items are read.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;show-read-feeds no&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Make the text width readable&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;text-width &lt;span class=&#34;m&#34;&gt;50&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Use multiple threads to download all the news faster.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;reload-threads &lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# browser ~/bin/newsboat-browser.sh&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# browser &amp;#34;/usr/bin/brave-browser %u&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# unbind keys&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unbind-key ENTER&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unbind-key j&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unbind-key k&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unbind-key J&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unbind-key K&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unbind-key ^D&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unbind-key ^U&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unbind-key o&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unbind-key g&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unbind-key G&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# bind keys - vim style&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key j down&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key k up&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key l open&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key h quit&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key ^D pagedown&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key ^U pageup&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key b toggle-source-view&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key U toggle-show-read-feeds&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key u show-urls&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key g home&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key G end&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key b open-in-browser-and-mark-read&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key B open-in-browser&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key i sort&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key I rev-sort&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;gui-browser&#34;&gt;GUI Browser &lt;a href=&#34;#gui-browser&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;No matter how many different guides I tried I keedp getting &lt;code&gt;error code 127&lt;/code&gt;&#xA;when trying to &lt;code&gt;open-in-browser&lt;/code&gt;.  Please let me know if you know how to fix&#xA;this. For now I am just going to roll with it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;heres-how-it-looks&#34;&gt;Here’s how it looks &lt;a href=&#34;#heres-how-it-looks&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/newsboat-feed-waylonwalker-com.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/newsboat-feed-waylonwalker-com.png&#34; alt=&#34;newsboat feed&#34;/ data-glightbox=&#34;description: newsboat feed&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;browsing a feed in newsboat&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/newsboat-article.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/newsboat-article.png&#34; alt=&#34;newsboat article&#34;/ data-glightbox=&#34;description: newsboat article&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;reading an article in newsboat&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Large Refactor At The Command Line</title>
    <id>https://waylonwalker.com/refactor-in-cli/</id>
    <updated>2020-12-30T00:00:00Z</updated>
    <published>2020-12-30T00:00:00Z</published>
    <link href="https://waylonwalker.com/refactor-in-cli/" rel="alternate" type="text/html"></link>
    <summary type="text">As projects grow patterns that worked early on break and we need to change things to make the project easier to work with, and more welcoming to new developers.</summary>
    <content type="html">&lt;p&gt;As projects grow patterns that worked early on break and we need to change things to make the project easier to work with, and more welcoming to new developers.&lt;/p&gt;&#xA;&lt;h2 id=&#34;&lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt;&#34;&gt;git &lt;a href=&#34;#git&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Before you start mucking up a project with wild commands at the terminal check that you have a super clean git status. We may make some mistakes and need a way to undo 100’s files and git makes it really easy if you start with a clean history.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git status&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If we are ready to begin work we should see a response like this.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;On branch main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nothing to commit, working tree clean&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;It would also be wise to do this inside of a branch.  The minute you try to do something wild in your working branch someone will walk by and ask you to do a five-minute task, but your deep in refactoring and haven’t left yourself a clean way back.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git branch my-big-refactor&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;grepr&#34;&gt;grepr &lt;a href=&#34;#grepr&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Time for the meat of this refactor replacing text across our project.  I often will pop this bash function into my terminal session and tweak it as needed. This function is called &lt;code&gt;grepr&lt;/code&gt; for &lt;code&gt;grep&lt;/code&gt; then &lt;code&gt;replace&lt;/code&gt;.  It will recursively search for a given pattern inside your working directory, then use &lt;code&gt;sed&lt;/code&gt; to replace that pattern with another.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grepr&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;grep -iRl &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$2&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/g&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If your pattern contains &lt;code&gt;/&lt;/code&gt; characters such as for URLs you can swap the &lt;code&gt;/&lt;/code&gt;’s in the &lt;code&gt;sed&lt;/code&gt; command for &lt;code&gt;|&lt;/code&gt;’s.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grepr&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;grep -iRl &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s|&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$2&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;|g&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can find this function and more of my bash notes.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/bash/&#34; class=&#34;wikilink&#34; data-title=&#34;📝 Bash Notes&#34; data-description=&#34;Waylon Walker&amp;#39;s Bash Notes&#34; data-date=&#34;2019-09-08&#34; data-preview=&#34;Waylon Walker&amp;#39;s Bash Notes&#34;&gt;📝 Bash Notes&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;example&#34;&gt;Example &lt;a href=&#34;#example&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I recently flattened this blog so blogs are under the top-level rather than under &lt;code&gt;/blog&lt;/code&gt; and I used this technique to swap internal links to the new format.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grepr&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;grep -iRl &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s|&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$2&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;|g&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grepr &lt;span class=&#34;s2&#34;&gt;&amp;#34;https://waylonwalker.com/blog/&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;https://waylonwalker.com/&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;git-diff&#34;&gt;git diff &lt;a href=&#34;#git-diff&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;After running the replace command the first thing I want to see is everything that changed.  Looking at git diff will highlight exactly what changed since our last commit.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git diff&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;work-in-small-steps&#34;&gt;Work in small steps &lt;a href=&#34;#work-in-small-steps&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you’re happy with the results commit them now.  It’s best to do these commands that have a large effect on the entire project in small steps.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;moved routes from /blog to /&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Working in small steps gives us an easy way to undo steps that may have been a mistake before it’s too late.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/master-no-more/&#34; class=&#34;wikilink&#34; data-title=&#34;Master No More&#34; data-description=&#34;It&amp;#39;s been a long time coming. We use some very harsh language within tech so much sometimes that we become numb to it. It&amp;#39;s time to do my very small part in...&#34; data-date=&#34;2020-06-11&#34; data-preview=&#34;It&amp;#39;s been a long time coming. We use some very harsh language within tech so much sometimes that we become numb to it. It&amp;#39;s time to do my very small part in...&#34;&gt;Master No More&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I used the technique from this post to switch master to main on my blog.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;git-reset&#34;&gt;git reset &lt;a href=&#34;#git-reset&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;How I do Mass Undo&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;be careful&lt;/strong&gt; work from a branch, make sure you started clean&lt;/p&gt;&#xA;&lt;p&gt;Let’s say I wanted to change every occurrence of one variable name to another.&#xA;Lets try to replace replace &lt;code&gt;pandas.CSVDataSet&lt;/code&gt; with &lt;code&gt;pandas.ParquetDataSet&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grepr&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;grep -iRl &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s|&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$2&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;|g&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grepr &lt;span class=&#34;s2&#34;&gt;&amp;#34;pandas.CSVDataSet&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pandas.ParquetDataSet&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Upon inspection of the &lt;code&gt;git diff&lt;/code&gt; we notice that there was an unintentional change to the &lt;code&gt;docs/standard-storage.md&lt;/code&gt; file. To revert the entire change we can run.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;note&lt;/strong&gt; These resets are irreversible.  Make sure that you started with a clean &lt;code&gt;git status&lt;/code&gt; and you are confident that you didn’t have any work on your machine, not in the remote repo.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;match the remote and wipe out any changes&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git reset --hard origin/main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;match our last commit&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git reset --hard HEAD&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;agr&#34;&gt;agr &lt;a href=&#34;#agr&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have an alternative version that I occasionally use as well that utilizes the silver searcher &lt;code&gt;ag&lt;/code&gt;.  It does a great job at following your .gitignore rules with no fuss, and can filter down to file extensions simply with flags like &lt;code&gt;--md&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;agr&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;ag -l &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$2&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/g&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;git-clean&#34;&gt;git clean &lt;a href=&#34;#git-clean&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;how I remove untracked files&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Sometimes our refactoring requires moving files around. If we want to undo steps like this git will not clean up untracked files.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv conf/base/sales-catalog.yml conf/base/sales/catalg.yml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;clean up untracked files&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clean -f&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;clean up untracked directories&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clean -d&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;clean up ignored files&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clean -x&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;-x&lt;/code&gt; can be a bit dangerous, be careful with it.  You can lose significant time by wiping out a &lt;code&gt;node_modules&lt;/code&gt;, &lt;code&gt;venv&lt;/code&gt;, or credentials.&lt;/p&gt;&#xA;&lt;h2 id=&#34;git--checkout&#34;&gt;git  checkout &lt;a href=&#34;#git--checkout&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;How I undo single files&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;If our command was mostly successful, but just a few extra files were touched I will manually revert them with &lt;code&gt;git checkout &amp;lt;filename&amp;gt;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout conf/base/supply-catalog.yml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;git-checkout---&#34;&gt;git checkout – &lt;a href=&#34;#git-checkout---&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;How I undo an entire directory&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Sometimes we need to undo an entire directory.  This command will undo changes&#xA;to all of the tracked files in the repo.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout -- /src/pages/blog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;gitui&#34;&gt;gitui &lt;a href=&#34;#gitui&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I really love using &lt;code&gt;gitui&lt;/code&gt; as a handy terminal interface to browse logs, diffs, and commit a few files at a time.  It starts up crazy fast and is very intuitive to navigate through diffs of changes like this one file at a time if the &lt;code&gt;git diff&lt;/code&gt; gets too overwhelming.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/extrawurst/gitui/&#34; class=&#34;hoverlink  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34;&gt;https://github.com/extrawurst/gitui/&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Ipython-Config</title>
    <id>https://waylonwalker.com/ipython-config/</id>
    <updated>2020-12-20T00:00:00Z</updated>
    <published>2020-12-20T00:00:00Z</published>
    <link href="https://waylonwalker.com/ipython-config/" rel="alternate" type="text/html"></link>
    <summary type="text">I use my ipython terminal daily. It&#39;s my go to way of running python most of the time. After you use it for a little bit you will probably want to setup a...</summary>
    <content type="html">&lt;p&gt;I use my ipython terminal daily.  It’s my go to way of running python most of&#xA;the time.  After you use it for a little bit you will probably want to setup a&#xA;bit of your own configuration.&lt;/p&gt;&#xA;&lt;h2 id=&#34;install-ipython&#34;&gt;install ipython &lt;a href=&#34;#install-ipython&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Activate your &lt;a href=&#34;/virtual-environment/&#34; class=&#34;glossary-term&#34; title=&#34;Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...&#34;&gt;virtual environment&lt;/a&gt; of choice and pip install it.  Any time you&#xA;are running your project in a virtual environment, you will need to install&#xA;ipython inside it to access those packages from ipython.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install ipython&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;You are using a virtual environment right? Virtual environments like venv or&#xA;conda can save you a ton of pain down the road.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;profile-default&#34;&gt;profile_default &lt;a href=&#34;#profile-default&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;When you install ipython you start out with no config at all.  Runnign &lt;code&gt;ipython profile create&lt;/code&gt; will start a new profile called &lt;code&gt;profile_default&lt;/code&gt; that contains&#xA;all of the default configuration.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ipython profile create&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This command will create a directory &lt;code&gt;~/.ipython/profile_default&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;multiple-configurations&#34;&gt;multiple configurations &lt;a href=&#34;#multiple-configurations&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can run multiple configurations by naming them with &lt;code&gt;ipython profile create [profile_name]&lt;/code&gt; This command will create a directory&#xA;&lt;code&gt;~/.ipython/[profile_name]&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ipython profile create my_profile&#xA;ipython --profile=my-profile&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;startup&#34;&gt;startup &lt;a href=&#34;#startup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Inside the profile there will be a startup directory&#xA;&lt;code&gt;~/.ipython/profile_default/startup&lt;/code&gt;.  Ipython will execute each of the files&#xA;in this directory on startup.  This is particularly handy to create custom&#xA;prompts, search, or import packages automatically for certian profiles.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/custom-ipython-prompt/&#34; class=&#34;wikilink&#34; data-title=&#34;Custom Ipython Prompt&#34; data-description=&#34;I&amp;#39;ve grown tired of the standard ipython prompt as it doesn&amp;#39;t do much to give me any useful information. The default one gives out a line number that only...&#34; data-date=&#34;2020-12-20&#34; data-preview=&#34;I&amp;#39;ve grown tired of the standard ipython prompt as it doesn&amp;#39;t do much to give me any useful information. The default one gives out a line number that only...&#34;&gt;Custom Ipython Prompt&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This post creates a custom ipython prompt by creating a&#xA;&lt;code&gt;~/.ipython/profile_default/startup/prompt.py&lt;/code&gt; file.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;ipython-configpy&#34;&gt;ipython_config.py &lt;a href=&#34;#ipython-configpy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There are tons of options that are in the &lt;code&gt;ipython_config.py&lt;/code&gt; file.  My&#xA;favorite is to automatically enable my favorite magic command autoreload.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/autoreload-ipython/&#34; class=&#34;wikilink&#34; data-title=&#34;Autoreload in Ipython&#34; data-description=&#34;Autoreload in python&#34; data-date=&#34;2019-09-08&#34; data-preview=&#34;Autoreload in python&#34;&gt;Autoreload in Ipython&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;InteractiveShellApp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extensions&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;autoreload&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;InteractiveShellApp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exec_lines&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%a&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;utoreload 2&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;InteractiveShellApp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exec_lines&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;print(&amp;#34;Warning: disable autoreload in ipython_config.py to improve performance.&amp;#34;)&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;want-automatic-imports&#34;&gt;Want automatic imports?? &lt;a href=&#34;#want-automatic-imports&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/pyflyby/&#34; class=&#34;wikilink&#34; data-title=&#34;Smoother Python with automatic imports | pyflyby&#34; data-description=&#34;This is not a flaky works half the time kind of plugin, it&amp;#39;s a seriously smooth editing experience. I&amp;#39;ve just started using pyflyby, and it is solid so far....&#34; data-date=&#34;2021-12-20&#34; data-preview=&#34;This is not a flaky works half the time kind of plugin, it&amp;#39;s a seriously smooth editing experience. I&amp;#39;ve just started using pyflyby, and it is solid so far....&#34;&gt;Smoother Python with automatic imports | pyflyby&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This article covers how I setup automatic imports in ipython&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Custom Ipython Prompt</title>
    <id>https://waylonwalker.com/custom-ipython-prompt/</id>
    <updated>2020-12-20T00:00:00Z</updated>
    <published>2020-12-20T00:00:00Z</published>
    <link href="https://waylonwalker.com/custom-ipython-prompt/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve grown tired of the standard ipython prompt as it doesn&#39;t do much to give me any useful information. The default one gives out a line number that only...</summary>
    <content type="html">&lt;p&gt;I’ve grown tired of the standard ipython prompt as it doesn’t do much to give&#xA;me any useful information.  The default one gives out a line number that only&#xA;seems to add anxiety as I am working on a simple problem and see that number&#xA;grow to several hundred.  I start to question my ability 🤦‍♂️.&lt;/p&gt;&#xA;&lt;h2 id=&#34;configuration&#34;&gt;Configuration &lt;a href=&#34;#configuration&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you already have an ipython config you can move on otherwise check out this&#xA;post on creating an ipython config.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/ipython-config/&#34; class=&#34;wikilink&#34; data-title=&#34;Ipython-Config&#34; data-description=&#34;I use my ipython terminal daily. It&amp;#39;s my go to way of running python most of the time. After you use it for a little bit you will probably want to setup a...&#34; data-date=&#34;2020-12-20&#34; data-preview=&#34;I use my ipython terminal daily. It&amp;#39;s my go to way of running python most of the time. After you use it for a little bit you will probably want to setup a...&#34;&gt;Ipython-Config&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-dream-prompt&#34;&gt;The Dream Prompt &lt;a href=&#34;#the-dream-prompt&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I want something similar to the starship prompt I am using in the&#xA;shell.  I want to be able to quickly see my python version,&#xA;environment name, and &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; branch.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;python version&lt;/li&gt;&#xA;&lt;li&gt;active environment&lt;/li&gt;&#xA;&lt;li&gt;git branch&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/my-zsh-prompt.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/my-zsh-prompt.png&#34; alt=&#34;my zsh prompt&#34;/ data-glightbox=&#34;description: my zsh prompt&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This is my zsh prompt I am using for inspiration&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;basic-prompt&#34;&gt;Basic Prompt &lt;a href=&#34;#basic-prompt&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is mostly boilerplate that I found from various google&#xA;searches, but this gets me a basic green chevron as my prompt.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;IPython.terminal.prompts&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Prompts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;MyPrompt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Prompts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;in_prompt_tokens&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cli&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Prompt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;❯ &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,),&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;out_prompt_tokens&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cli&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ip&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_ipython&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ip&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;prompts&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MyPrompt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;The rest of this post will build off of this boilerplate and add&#xA;to the &lt;code&gt;in_prompt_tokens&lt;/code&gt; method of MyPrompt&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;colors&#34;&gt;Colors &lt;a href=&#34;#colors&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I mostly set the colors of my prompt throughout this post by guessing and&#xA;trying different attributes under the Token.&lt;/p&gt;&#xA;&lt;h2 id=&#34;red-if-error&#34;&gt;Red If Error &lt;a href=&#34;#red-if-error&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I found that the &lt;code&gt;Prompts&lt;/code&gt; subclass has many of the same methods as the ipython&#xA;object, so I would often use that for inspection.  Looking through the ipython&#xA;class I found a boolean under &lt;code&gt;shell.last_execution_succeeded&lt;/code&gt; that would give&#xA;me if the last execution was successful or not.  I did an inline if statemetn&#xA;to set the color to a &lt;code&gt;Token.Generic.Error&lt;/code&gt; if this was false.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;in_prompt_tokens&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cli&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Prompt&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shell&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;last_execution_succeeded&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Generic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s2&#34;&gt;&amp;#34;❯ &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;python-version&#34;&gt;Python Version &lt;a href=&#34;#python-version&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Next up to list out the python version that is running.  I grabbed the version&#xA;from &lt;code&gt;platform.python_version&lt;/code&gt;, this seemed to get me the most concise version&#xA;that I was looking for to match the starship prompt.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;update imports&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;platform&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;python_version&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;update prompt&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;in_prompt_tokens&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cli&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;v&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;python_version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Prompt&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shell&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;last_execution_succeeded&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Generic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s2&#34;&gt;&amp;#34;❯ &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;python-environment&#34;&gt;Python environment &lt;a href=&#34;#python-environment&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Since I use conda for my environments I chose to pull the name of the&#xA;environment from the &lt;code&gt;CONDA_DEFAULT_ENV&lt;/code&gt; environment variable that is set by&#xA;conda when you change your environment.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;update imports&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;platform&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;python_version&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;os&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;update prompt&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;in_prompt_tokens&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cli&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Prompt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;©&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Prompt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;environ&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;CONDA_DEFAULT_ENV&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;v&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;python_version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Prompt&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shell&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;last_execution_succeeded&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Generic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s2&#34;&gt;&amp;#34;❯ &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;git-branch&#34;&gt;Git Branch &lt;a href=&#34;#git-branch&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Git branch was a bit tricky.  There might be a better way to get it,&#xA;but I was sticking with things I knew, the git cli and python.  I&#xA;did need to do a bit of googling to figure out that git has a&#xA;&lt;code&gt;--show-current&lt;/code&gt; option.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;getting the current git branch&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_branch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;subprocess&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;check_output&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;s2&#34;&gt;&amp;#34;git branch --show-current&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;shell&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;stderr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;subprocess&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DEVNULL&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;decode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;utf-8&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;replace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;except&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;BaseException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;  If this is run form a non-git directory you will quickly find git&#xA;errors after every command as this function tries to ask for the git branch.&#xA;Sending stderr to devnull will avoid this inconvenience.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;add git branch to prompt&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;in_prompt_tokens&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cli&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Generic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Subheading&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;↪&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Generic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Subheading&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_branch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Prompt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;©&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Prompt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;environ&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;CONDA_DEFAULT_ENV&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;v&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;python_version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Prompt&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shell&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;last_execution_succeeded&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Generic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s2&#34;&gt;&amp;#34;❯ &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;add-current-directory-name&#34;&gt;Add current directory name &lt;a href=&#34;#add-current-directory-name&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I am a big fan of pathlib so that is what I will use to get the path. If I&#xA;planned on using python &lt;code&gt;&amp;lt;3.6&lt;/code&gt; I would probably use something else, but this is&#xA;what I know and I can’t think of the last time I used &lt;code&gt;&amp;lt;3.6&amp;gt;&lt;/code&gt; for anything.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;update imports&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pathlib&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;add git branch to prompt&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;in_prompt_tokens&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cli&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;OutPrompt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;absolute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Generic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Subheading&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;↪&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Generic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Subheading&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_branch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Prompt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;©&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Prompt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;environ&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;CONDA_DEFAULT_ENV&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;v&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;python_version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Prompt&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shell&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;last_execution_succeeded&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Generic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s2&#34;&gt;&amp;#34;❯ &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;final-script&#34;&gt;Final Script &lt;a href=&#34;#final-script&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;That’s it for my prompt at the moment.  I have been using it for about a week.&#xA;It seems to have everything I need so far, and skips on things I don’t need.&lt;/p&gt;&#xA;&lt;p&gt;Enjoy the full script.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;my final prompt&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;IPython.terminal.prompts&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Prompts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pathlib&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;os&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;platform&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;python_version&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;subprocess&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_branch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;subprocess&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;check_output&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;s2&#34;&gt;&amp;#34;git branch --show-current&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;shell&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;stderr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;subprocess&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DEVNULL&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;decode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;utf-8&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;replace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;except&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;BaseException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;MyPrompt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Prompts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;in_prompt_tokens&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cli&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;OutPrompt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;absolute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Generic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Subheading&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;↪&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Generic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Subheading&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_branch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Prompt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;©&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Prompt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;environ&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;CONDA_DEFAULT_ENV&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;v&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;python_version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Entity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ipython&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Prompt&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;shell&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;last_execution_succeeded&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Generic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;s2&#34;&gt;&amp;#34;❯ &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;out_prompt_tokens&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cli&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ip&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_ipython&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ip&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;prompts&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MyPrompt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;want-automatic-imports&#34;&gt;Want automatic imports?? &lt;a href=&#34;#want-automatic-imports&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/pyflyby/&#34; class=&#34;wikilink&#34; data-title=&#34;Smoother Python with automatic imports | pyflyby&#34; data-description=&#34;This is not a flaky works half the time kind of plugin, it&amp;#39;s a seriously smooth editing experience. I&amp;#39;ve just started using pyflyby, and it is solid so far....&#34; data-date=&#34;2021-12-20&#34; data-preview=&#34;This is not a flaky works half the time kind of plugin, it&amp;#39;s a seriously smooth editing experience. I&amp;#39;ve just started using pyflyby, and it is solid so far....&#34;&gt;Smoother Python with automatic imports | pyflyby&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This article covers how I setup automatic imports in ipython&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ christoomey vim-tmux-runner</title>
    <id>https://waylonwalker.com/christoomey-vim-tmux-runner/</id>
    <updated>2020-12-13T22:21:21Z</updated>
    <published>2020-12-13T22:21:21Z</published>
    <link href="https://waylonwalker.com/christoomey-vim-tmux-runner/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by vim-tmux-runner from christoomey.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/christoomey/vim-tmux-runner&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vim-tmux-runner&lt;/a&gt; from &lt;a href=&#34;https://github.com/christoomey&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;christoomey&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Vim and tmux, sittin’ in a tree…&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ fkromer awesome-kedro</title>
    <id>https://waylonwalker.com/fkromer-awesome-kedro/</id>
    <updated>2020-12-13T21:15:37Z</updated>
    <published>2020-12-13T21:15:37Z</published>
    <link href="https://waylonwalker.com/fkromer-awesome-kedro/" rel="alternate" type="text/html"></link>
    <summary type="text">I like fkromer&#39;s project awesome-kedro.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/fkromer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fkromer’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/fkromer/awesome-kedro&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;awesome-kedro&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ChristianChiarulli machfiles</title>
    <id>https://waylonwalker.com/christianchiarulli-machfiles/</id>
    <updated>2020-12-13T03:18:31Z</updated>
    <published>2020-12-13T03:18:31Z</published>
    <link href="https://waylonwalker.com/christianchiarulli-machfiles/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred machfiles by ChristianChiarulli. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/ChristianChiarulli/machfiles&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;machfiles&lt;/a&gt; by &lt;a href=&#34;https://github.com/ChristianChiarulli&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ChristianChiarulli&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;The dotfiles you see in all my videos&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ LunarVim LunarVim</title>
    <id>https://waylonwalker.com/lunarvim-lunarvim/</id>
    <updated>2020-12-13T03:18:14Z</updated>
    <published>2020-12-13T03:18:14Z</published>
    <link href="https://waylonwalker.com/lunarvim-lunarvim/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out LunarVim and their project LunarVim.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/LunarVim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;LunarVim&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/LunarVim/LunarVim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;LunarVim&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;🌙 LunarVim is an IDE layer for Neovim. Completely free and community driven.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ joelhooks joelhooks-com</title>
    <id>https://waylonwalker.com/joelhooks-joelhooks-com/</id>
    <updated>2020-12-11T17:00:42Z</updated>
    <published>2020-12-11T17:00:42Z</published>
    <link href="https://waylonwalker.com/joelhooks-joelhooks-com/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? joelhooks-com by joelhooks.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/joelhooks/joelhooks-com&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;joelhooks-com&lt;/a&gt; by &lt;a href=&#34;https://github.com/joelhooks&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;joelhooks&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;playing with static pages&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Automating my Post Starter</title>
    <id>https://waylonwalker.com/automating-my-post-starter/</id>
    <updated>2020-12-11T09:08:00Z</updated>
    <published>2020-12-11T09:08:00Z</published>
    <link href="https://waylonwalker.com/automating-my-post-starter/" rel="alternate" type="text/html"></link>
    <summary type="text">One thing we all dread is mundane work of getting started, and all the hoops it takes to get going. This year I want to post more often and I am taking some...</summary>
    <content type="html">&lt;p&gt;One thing we all dread is mundane work of getting started, and all the hoops it&#xA;takes to get going. This year I want to post more often and I am taking some&#xA;steps towards making it easier for myself to just get started.&lt;/p&gt;&#xA;&lt;p&gt;When I start a new post I need to cd into my blog directory, start neovim in a&#xA;markdown file with a clever name, copy some frontmatter boilerplate, update the&#xA;post date, add tags, a description, and a cover.&lt;/p&gt;&#xA;&lt;h2 id=&#34;todo-list-for-starting-a-post&#34;&gt;Todo List for starting a post &lt;a href=&#34;#todo-list-for-starting-a-post&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;frontmatter template&lt;/li&gt;&#xA;&lt;li&gt;Title&lt;/li&gt;&#xA;&lt;li&gt;slug&lt;/li&gt;&#xA;&lt;li&gt;tags&lt;/li&gt;&#xA;&lt;li&gt;date&lt;/li&gt;&#xA;&lt;li&gt;cover&lt;/li&gt;&#xA;&lt;li&gt;description&lt;/li&gt;&#xA;&lt;li&gt;create markdown file&lt;/li&gt;&#xA;&lt;li&gt;open in neovim&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;lets-automate-this&#34;&gt;Lets Automate this &lt;a href=&#34;#lets-automate-this&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;this-aint-no-proper-cli&#34;&gt;This aint no proper cli &lt;a href=&#34;#this-aint-no-proper-cli&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;hot and fast&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;As with many thing running behind the scenes on this site, I am the one and&#xA;only user, I have limited time, so this is going to be a bit &lt;strong&gt;hot and fast&lt;/strong&gt;.&#xA;Let’s create a file called new-post.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;start the script new-post&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;ch&#34;&gt;#!python&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# new-post&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;👆 Works on my machine&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;If this were something that had more users than me I would probably use&#xA;something like click, but for this I want to get it done quick and avoid any&#xA;need to manage dependencies. Be careful if you were to share something with a&#xA;&lt;code&gt;#!python&lt;/code&gt; as it requries the end user to have the right version of python&#xA;ready to go.&lt;/p&gt;&#xA;&lt;h3 id=&#34;title&#34;&gt;Title &lt;a href=&#34;#title&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;The title can’t really be automated this is the core idea coming out of my 🧠,&#xA;but it will be captured through the cli and put into proper position. For this&#xA;I’m going super simple and just pulling it out of &lt;code&gt;sys.argv&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;set the title&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;sys&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sys&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;argv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;! sys.argv is a list of each argument passed into the script split by spaces.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;slug&#34;&gt;slug &lt;a href=&#34;#slug&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;The slug is what I am calling the route and can simply come out of the title&#xA;automatically, if I want to shorten it later by hand that will be simple enough&#xA;to do manually. All that needs to be done is to lowercase and replace a few&#xA;characters with -.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;set the slug&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;slug&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lower&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;replace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;-&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;replace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;_&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;tags&#34;&gt;tags &lt;a href=&#34;#tags&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;For tags I decided I wanted the parser to be as simple as possible and didn’t&#xA;want to dance around any flags. I am simply just going to look at every&#xA;argument passed into the command and see if any of them contain one of my&#xA;common tags.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;parse the tags&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sys&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;argv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;tags&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;py&amp;#39;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;tags&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;python&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;web&amp;#39;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;tags&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;webdev&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;blog&amp;#39;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;tags&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;blog&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;data&amp;#39;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;tags&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;data&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;🤷‍♂️ &lt;strong&gt;antipattern&lt;/strong&gt;?? The above section does an initialize then modify. I generally try to avoid this&#xA;pattern with something like a list comprehension, but didn’t see an obvious&#xA;solution so I just went with it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;frontmatter-template&#34;&gt;Frontmatter Template &lt;a href=&#34;#frontmatter-template&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now we have enough information going to assemble the frontmatter I use for my&#xA;posts. I am going to just insert the values I need into an f-string. Since&#xA;python 3.6 was released f-strings are my go to templating tool.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;create the markdown&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;datetime&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;frontmatter&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;---&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;templateKey: blog-post&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;tags: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tags&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;title: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;date: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;today&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strftime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%Y-%m-&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%d&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;T%H:%M:%S&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;published: false&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;description: &amp;#39;&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;cover: &amp;#34;/static/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;slug&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;.png&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;---&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;create-markdown-file&#34;&gt;create markdown file &lt;a href=&#34;#create-markdown-file&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Now its time to get down to business and make the post. First I want to throw&#xA;an error if the post already exists, I definitely dont want to blow away an&#xA;existing post if a certain slug is already taken. I am a big fan of custom&#xA;error messages and I am going to go ahead and make one here, even though this&#xA;is just a quick script.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;custom error&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;PostExistsError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;ne&#34;&gt;FileExistsError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;pass&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I am a &lt;code&gt;pathlib&lt;/code&gt; superfan. It’s going to make setting up these paths super&#xA;simple. Note I am going to anchor my directory down with the &lt;code&gt;__file__&lt;/code&gt;&#xA;variable. I do this all the time to get paths relative to the module that is&#xA;currently running.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;setup paths&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pathlib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;vm&#34;&gt;__file__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parent&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pathlib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/src/pages/blog/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;slug&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;.md&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exists&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;raise&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PostExistsError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Post Already exists at &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;file&lt;/strong&gt; is a string that represents the path to the running module&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Finally just write the file. Here we open the file with a context manager so&#xA;that we don’t have to worry about closing it when we are done. Note that we&#xA;open it with the &lt;code&gt;w+&lt;/code&gt; flag for write and creation.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;write the file&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;w+&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frontmatter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;&lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt;-add&#34;&gt;git add &lt;a href=&#34;#git-add&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;I am not quite ready to pull the trigger on doing an auto commit, but this may&#xA;happen in a future version. For now I want this file easily picked up by vims&#xA;&lt;code&gt;:GFiles&lt;/code&gt; since I have that is one of my most used hot keys. To do this the&#xA;file at least needs added. I’m sure there is a better way to do this with a&#xA;Git library, but I am used to the command line so I am going to just run a&#xA;subprocess.&lt;/p&gt;&#xA;&lt;p&gt;I am using the &lt;code&gt;subprocess.Popen&lt;/code&gt; command since its what I am used to, note&#xA;that it will run the task in the background so be sure that you wait on it.&#xA;The &lt;code&gt;Popen&lt;/code&gt; is great if you have several task that are not dependent on each&#xA;other.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;git add &lt;new-post&gt;&lt;/new-post&gt;&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;gadd&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;subprocess&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Popen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;cd &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt; &amp;amp;&amp;amp; git add &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;replace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt; &amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;shell&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;gadd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wait&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;open-in-neovim&#34;&gt;open in neovim &lt;a href=&#34;#open-in-neovim&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Last step of the script is to start writing, I want to be open in my blogs&#xA;directory (hence the cd), with the file open, to the right line (+11), and in&#xA;insert mode (+star).&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;open post in neovim&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;nvim&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;subprocess&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Popen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;cd &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt; &amp;amp;&amp;amp; nvim +12 +star &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;replace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt; &amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;shell&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;nvim&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wait&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;alias&#34;&gt;Alias &lt;a href=&#34;#alias&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now I want this script to be available everywhere. I am going to simply add&#xA;the following entry to shorten the script and eliminate the need to use the&#xA;full path. I added this to my &lt;code&gt;~/.alias&lt;/code&gt;, for you it may be &lt;code&gt;~/.bashrc&lt;/code&gt;, or&#xA;&lt;code&gt;~/.zshrc&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;~/git/waylonwalkerv2/new-post&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;starting-a-new-post&#34;&gt;Starting a new post &lt;a href=&#34;#starting-a-new-post&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Lets start a new post about automating my posts in python.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;np &lt;span class=&#34;s2&#34;&gt;&amp;#34;automating my posts&amp;#34;&lt;/span&gt; python&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;this-is-my-workflow&#34;&gt;This is my workflow &lt;a href=&#34;#this-is-my-workflow&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Ad hoc scripts like this can be a bit of a hot mess, partly due to the just get&#xA;it done nature, but also due to the fact that I am just riffing off the top of&#xA;my head and utilizing docs as least as possible.&lt;/p&gt;&#xA;&lt;p&gt;While writing the script I would run it after each section or so and print some&#xA;results to make sure they were looking good. If I ever needed access to a live&#xA;variable I would pop open ipython and run &lt;code&gt;%run new-post &amp;#34;my-new-post&amp;#34;&lt;/code&gt; and&#xA;inspecting it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;final-script&#34;&gt;Final Script &lt;a href=&#34;#final-script&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;final script&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;ch&#34;&gt;#!python&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# new-post&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;sys&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;datetime&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pathlib&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;subprocess&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sys&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;argv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;titlecase&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sys&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;argv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;tags&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;py&amp;#34;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;tags&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;python&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;web&amp;#34;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;tags&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;webdev&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;blog&amp;#34;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;tags&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;blog&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;data&amp;#34;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;tags&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;data&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;slug&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lower&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;replace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;-&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;replace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;_&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;-&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;frontmatter&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;---&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;templateKey: blog-post&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;tags: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tags&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;title: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;date: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;today&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;strftime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%Y-%m-&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%d&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;T%H:%M:%S&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;published: false&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;description: &amp;#39;&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;cover: &amp;#34;/static/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;slug&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;.png&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;---&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;PostExistsError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;ne&#34;&gt;FileExistsError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;pass&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pathlib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;vm&#34;&gt;__file__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parent&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pathlib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/src/pages/blog/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;slug&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;.md&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exists&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;raise&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PostExistsError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Post Already exists at &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;w+&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;frontmatter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;gadd&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;subprocess&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Popen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;cd &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt; &amp;amp;&amp;amp; git add &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;replace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt; &amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;shell&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;gadd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wait&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;nvim&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;subprocess&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Popen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;cd &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt; &amp;amp;&amp;amp; nvim +12 +star &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;replace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt; &amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;shell&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;nvim&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wait&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/quickly-edit-posts/&#34; class=&#34;hoverlink&#34;&gt;https://waylonwalker.com/quickly-edit-posts/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;check out the next article in this series where I setup a bash function to quickly edit these posts&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Windowing Python Lists</title>
    <id>https://waylonwalker.com/more-itertools-windowed/</id>
    <updated>2020-12-10T10:44:19Z</updated>
    <published>2020-12-10T10:44:19Z</published>
    <link href="https://waylonwalker.com/more-itertools-windowed/" rel="alternate" type="text/html"></link>
    <summary type="text">In python data science we often will reach for pandas a bit more than necessary. While pandas can save us so much there are times where there are...</summary>
    <content type="html">&lt;p&gt;In python data science we often will reach for pandas a bit more than&#xA;necessary. While pandas can save us so much there are times where there are&#xA;alternatives that are much simpler.  The itertools&lt;code&gt;and&lt;/code&gt;more-itertools` are&#xA;full of cases of this.&lt;/p&gt;&#xA;&lt;p&gt;This post is a walkthrough of me solving a problem with &lt;code&gt;more-itertools&lt;/code&gt; rather&#xA;than reaching for a for loop, or pandas.&lt;/p&gt;&#xA;&lt;p&gt;I am working on a  one-line-link expander for my blog.  I ended up doing it,&#xA;just by modifying the markdown with python.  I first split the post into lines&#xA;with &lt;code&gt;content.split(&amp;#39;\n&amp;#39;)&lt;/code&gt;, then look to see if the line appears to be just a&#xA;link.  One more safety net that I wanted to add was to check if there was&#xA;whitespace around the line, this could not simply be done in a list&#xA;comprehension by itself.  I need just a bit of knowledge of the surrounding&#xA;lines, enter &lt;code&gt;more-itertools&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;simplified-rendering-function&#34;&gt;simplified rendering function &lt;a href=&#34;#simplified-rendering-function&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have a function that will check to see if the line should be expanded, then&#xA;render the correct template.  Fist step is to check if the line contains no&#xA;spaces and starts with &lt;code&gt;https&lt;/code&gt;, if it&#xA;does render the template.&lt;/p&gt;&#xA;&lt;p&gt;The real expand_line function uses requests to pull some metadata about the&#xA;post to insert into the card, more on that in another post.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;expand_line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;   Check if line should be expanded then render a template&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;   &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;startswith&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;a href=&amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;line&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#39; class=&amp;#39;card&amp;#39;&amp;gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;initial-implementation&#34;&gt;initial implementation &lt;a href=&#34;#initial-implementation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;My first implementation was to load in the content as a single string and use a&#xA;list comprehension to expand each line.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;expanded_content&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;expand_line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;the-issue&#34;&gt;The issue &lt;a href=&#34;#the-issue&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Sometimes I write my posts in vim without wordwrap on and just use &lt;code&gt;gq&lt;/code&gt; to wrap&#xA;them to the current &lt;code&gt;textwidth&lt;/code&gt;.  If I have a link that happens to be really&#xA;long it ends up on its own line.  I do not want one line links to expand if&#xA;they are in the middle of a paragraph.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## sample paragraph&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;This is a paragraph that has a really long link&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[[ not-a-real-link-just-a-silly-example-for-this-post ]]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;inside of it that ends up on its own line&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;I need a bit of knowledge about the lines around the link.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;windowing&#34;&gt;windowing &lt;a href=&#34;#windowing&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;more-itertools&lt;/code&gt; comes with a windowing function that will slide over an&#xA;iterable with a width of n.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;more_itertools&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;windowed&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;all_windows&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;windowed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;all_windows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)])]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;this example is copied from the &lt;a href=&#34;https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.windowed&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/more-itertools.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/more-itertools.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;more-itertools&#xA;docs&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;sliding-through-my-content&#34;&gt;sliding through my content &lt;a href=&#34;#sliding-through-my-content&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The one extra that we need is padding at the front and back of the list so that&#xA;we ensure that every value ends up in the middle position at least once.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;expanded_content&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;expand_line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;windowed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;meta&lt;/strong&gt;: 👇  This is an example of a one-line-link card that we are trying to&#xA;achieve.&lt;/p&gt;&#xA;&lt;a class=&#34;onelinelink&#34; href=&#34;https://waylonwalker.com/python-args-kwargs/&#34;&gt;&#xA;&lt;img class=&#34;glightbox&#34; style=&#34;float: right;&#34; align=&#34;right&#34; src=&#34;https://images.waylonwalker.com/python-args-kwargs-slides-dev_250x105.png&#34; alt=&#34;article cover&#34;/ data-glightbox=&#34;description: article cover&#34;&gt;&#xA;&lt;div class=&#34;right&#34;&gt;&#xA;    &lt;h2 id=&#34;understanding-python-args-and-kwargs&#34;&gt;understanding python *args and **kwargs &lt;a href=&#34;#understanding-python-args-and-kwargs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;    &lt;p class=&#34;description&#34;&gt;&#xA;    Python `*args` and `**kwargs` are super useful tools, that when used properly can make you code much simpler and easier to maintain.  Large manual conversions from a dataset to function arguments can be packed and unpacked into lists or dictionaries. Beware though, this power **can** lead to some really unreadable/unusable code if done wrong.&#xA;    &lt;/p&gt;&#xA;    &lt;p class=&#34;url&#34;&gt;&#xA;    &lt;span class=&#34;read-more&#34;&gt;read more&lt;/span&gt;  waylonwalker.com&#xA;    &lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;/a&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Not sure what *line is, check out this article.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;update-expand-line&#34;&gt;update expand_line &lt;a href=&#34;#update-expand-line&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now that we are calling &lt;code&gt;expand_line&lt;/code&gt; with all three lines.  We need to update&#xA;the function signature and add a guarding clause to return early if before or&#xA;after lines are not blank.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;expand_line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;before&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;after&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;   Check if line should be expanded then render a template&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;   &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;before&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;after&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;startswith&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;line&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;a href=&amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;line&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#39; class=&amp;#39;card&amp;#39;&amp;gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Hope you liked this walk-through of solving a problem I had with&#xA;&lt;code&gt;more-itertools&lt;/code&gt;, If you learned something be sure to share it.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ WaylonWalker devtainer</title>
    <id>https://waylonwalker.com/waylonwalker-devtainer/</id>
    <updated>2020-12-07T13:55:15Z</updated>
    <published>2020-12-07T13:55:15Z</published>
    <link href="https://waylonwalker.com/waylonwalker-devtainer/" rel="alternate" type="text/html"></link>
    <summary type="text">WaylonWalker has done a fantastic job with devtainer. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/WaylonWalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;WaylonWalker&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/WaylonWalker/devtainer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;devtainer&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;🐳 (dotfiles) My personal development docker container base image&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ WaylonWalker WaylonWalker</title>
    <id>https://waylonwalker.com/waylonwalker-waylonwalker/</id>
    <updated>2020-12-04T16:30:57Z</updated>
    <published>2020-12-04T16:30:57Z</published>
    <link href="https://waylonwalker.com/waylonwalker-waylonwalker/" rel="alternate" type="text/html"></link>
    <summary type="text">WaylonWalker has done a fantastic job with WaylonWalker. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/WaylonWalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;WaylonWalker&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/WaylonWalker/WaylonWalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;WaylonWalker&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Learning in public&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ThePrimeagen aoc</title>
    <id>https://waylonwalker.com/theprimeagen-aoc/</id>
    <updated>2020-12-02T14:18:31Z</updated>
    <published>2020-12-02T14:18:31Z</published>
    <link href="https://waylonwalker.com/theprimeagen-aoc/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out aoc by ThePrimeagen. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/ThePrimeagen/aoc&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;aoc&lt;/a&gt; by &lt;a href=&#34;https://github.com/ThePrimeagen&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ThePrimeagen&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;2020&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ZaxR bulwark</title>
    <id>https://waylonwalker.com/zaxr-bulwark/</id>
    <updated>2020-12-01T22:12:05Z</updated>
    <published>2020-12-01T22:12:05Z</published>
    <link href="https://waylonwalker.com/zaxr-bulwark/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out ZaxR and their project bulwark.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/ZaxR&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ZaxR&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/ZaxR/bulwark&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;bulwark&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Bulwark is a package for convenient property-based testing of pandas dataframes.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ mariokostelac sagemaker-setup</title>
    <id>https://waylonwalker.com/mariokostelac-sagemaker-setup/</id>
    <updated>2020-12-01T21:47:07Z</updated>
    <published>2020-12-01T21:47:07Z</published>
    <link href="https://waylonwalker.com/mariokostelac-sagemaker-setup/" rel="alternate" type="text/html"></link>
    <summary type="text">mariokostelac has done a fantastic job with sagemaker-setup. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/mariokostelac&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mariokostelac&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/mariokostelac/sagemaker-setup&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sagemaker-setup&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Useful scripts for making AWS SageMaker better&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pypeaday aoc-2020</title>
    <id>https://waylonwalker.com/pypeaday-aoc-2020/</id>
    <updated>2020-12-01T04:27:17Z</updated>
    <published>2020-12-01T04:27:17Z</published>
    <link href="https://waylonwalker.com/pypeaday-aoc-2020/" rel="alternate" type="text/html"></link>
    <summary type="text">I like pypeaday&#39;s project aoc-2020.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/pypeaday&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pypeaday’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/pypeaday/aoc-2020&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;aoc-2020&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Advent of Code 2020&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ WyattBlue auto-editor</title>
    <id>https://waylonwalker.com/wyattblue-auto-editor/</id>
    <updated>2020-11-27T04:09:27Z</updated>
    <published>2020-11-27T04:09:27Z</published>
    <link href="https://waylonwalker.com/wyattblue-auto-editor/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about auto-editor, an amazing project by WyattBlue. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/WyattBlue/auto-editor&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;auto-editor&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/WyattBlue&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;WyattBlue&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Auto-Editor: Efficient media analysis and rendering&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Adding Audio to my blog posts</title>
    <id>https://waylonwalker.com/audio-for-blog/</id>
    <updated>2020-11-25T20:52:22Z</updated>
    <published>2020-11-25T20:52:22Z</published>
    <link href="https://waylonwalker.com/audio-for-blog/" rel="alternate" type="text/html"></link>
    <content type="html">&lt;iframe src=&#34;https://anchor.fm/waylon-walker/embed/episodes/Launching-Audio-for-the-Blog-en6kof&#34; height=&#34;102px&#34; width=&#34;400px&#34; frameborder=&#34;0&#34; scrolling=&#34;no&#34;&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;This is episode 1 of the Waylon Walker Audio experience, posts from&#xA;&lt;a href=&#34;https://waylonwalker.com&#34;&gt;waylonwalker.com&lt;/a&gt;{.hoverlink} in audio form.&lt;/p&gt;&#xA;&lt;p&gt;So I have had this idea for awhile to add audio to my blog posts.  The idea&#xA;partly comes from the aws blog, if you have ever been on their blog you will&#xA;have noticed that they have a &lt;em&gt;voiced by amazon polly&lt;/em&gt; section.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-to-expect&#34;&gt;What to Expect &lt;a href=&#34;#what-to-expect&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Honestly I don’t know this is all new to me and I dont have much to go off of.&#xA;For now its a test that may or may not work out.&lt;/p&gt;&#xA;&lt;p&gt;I will say that the time that I have available for clean audio is a bit limited&#xA;so expect these to come out in batches as I get time to go back and record.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-not-to-expect&#34;&gt;What Not to Expect &lt;a href=&#34;#what-not-to-expect&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;One thing that makes the aws blog really hard to listen to is the robotic&#xA;voice, I definitely don’t want that.  This will be voiced by a real human, Me.&#xA;At the same time written text doesn’t translate directly to audio well so don’t&#xA;necessarily expect the audio to be&#xA;word for word.&lt;/p&gt;&#xA;&lt;h2 id=&#34;code-blocks&#34;&gt;Code blocks &lt;a href=&#34;#code-blocks&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There are a lot of code blocks in my blog, which don’t translate directly into&#xA;I will do my best to read short one liners or describe larger blocks, but don’t&#xA;expect a boring three minute read of large code blocks.&lt;/p&gt;&#xA;&lt;h2 id=&#34;updates&#34;&gt;Updates &lt;a href=&#34;#updates&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Expect to see these at the top of finished posts once I consider them done.  I&#xA;will not likely come back to edit the audio if there is an edit to the post&#xA;unless its major.  I will do my best to highlight changes in a note next to the&#xA;embeded audio on the post.&lt;/p&gt;&#xA;&lt;h2 id=&#34;lets-do-this&#34;&gt;Lets do this &lt;a href=&#34;#lets-do-this&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you like this idea give the posts a listen, share them with your friends,&#xA;give me a shout out on twitter&#xA;&lt;a href=&#34;https://twitter.com/_WaylonWalker&#34;&gt;@_waylonwalker&lt;/a&gt;{.hoverlink}.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/crush-dev-to-posts/&#34; class=&#34;wikilink&#34; data-title=&#34;How to crush amazing posts on DEV&#34; data-description=&#34;Here are a few of my top tips to help make dev.to posts more readable, and drive better engagement.&#34; data-date=&#34;2020-08-07&#34; data-preview=&#34;Here are a few of my top tips to help make dev.to posts more readable, and drive better engagement.&#34;&gt;How to crush amazing posts on DEV&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If you enjoyed this post you may enjoy another “meta” post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ yetudada yetudada</title>
    <id>https://waylonwalker.com/yetudada-yetudada/</id>
    <updated>2020-11-23T23:09:30Z</updated>
    <published>2020-11-23T23:09:30Z</published>
    <link href="https://waylonwalker.com/yetudada-yetudada/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out yetudada and their project yetudada.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/yetudada&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;yetudada&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/yetudada/yetudada&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;yetudada&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ timothycrosley quickpython</title>
    <id>https://waylonwalker.com/timothycrosley-quickpython/</id>
    <updated>2020-11-21T23:04:24Z</updated>
    <published>2020-11-21T23:04:24Z</published>
    <link href="https://waylonwalker.com/timothycrosley-quickpython/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by quickpython from timothycrosley.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/timothycrosley/quickpython&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;quickpython&lt;/a&gt; from &lt;a href=&#34;https://github.com/timothycrosley&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;timothycrosley&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A retro interactive coding environment powered by Python and nostalgia&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>gatsby-remark-embedder</title>
    <id>https://waylonwalker.com/gatsby-remark-embedder/</id>
    <updated>2020-11-18T05:00:00Z</updated>
    <published>2020-11-18T05:00:00Z</published>
    <link href="https://waylonwalker.com/gatsby-remark-embedder/" rel="alternate" type="text/html"></link>
    <summary type="text">Inspired by discourse&#39;s link expansion I am rolling out expansions for one line links on the blog</summary>
    <content type="html">&lt;iframe src=&#34;https://anchor.fm/waylon-walker/embed/episodes/gatsby-remark-embedder-en6l3j&#34; height=&#34;102px&#34; width=&#34;400px&#34; frameborder=&#34;0&#34; scrolling=&#34;no&#34;&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;Inspired by discourse’s link expansion I am rolling out expansions for one line&#xA;links on the blog &lt;a href=&#34;https://waylonwalker.com&#34;&gt;waylonwalker&lt;/a&gt;.  I was able to find&#xA;a gatsby plugin&#xA;&lt;a href=&#34;https://www.gatsbyjs.com/plugins/gatsby-remark-embedder/?=embed&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.gatsbyjs.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.gatsbyjs.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gatsby-remark-embedder&lt;/a&gt;&#xA;that expands one line links for social cards for popular platforms like twitter&#xA;and YouTube through a repose from Kyle Mathews to my tweet.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://twitter.com/kylemathews/status/1329817928666005504&#34;&gt;https://twitter.com/kylemathews/status/1329817928666005504&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;use-cases&#34;&gt;Use Cases &lt;a href=&#34;#use-cases&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This covers a couple of use cases I have with very little effort.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Twitter&lt;/li&gt;&#xA;&lt;li&gt;YouTube&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;install&#34;&gt;install &lt;a href=&#34;#install&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm i gatsby-remark-embedder gatsby-plugin-twitter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This was super quick and simple to setup, the only thing that was extra was to&#xA;install the &lt;code&gt;gatsby-plugin-twitter&lt;/code&gt; plugin as well as the&#xA;&lt;code&gt;gatsby-remark-embedder&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;enable&#34;&gt;enable &lt;a href=&#34;#enable&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// In your gatsby-config.js&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;module&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;exports&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;// Find the &amp;#39;plugins&amp;#39; array&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;nx&#34;&gt;plugins&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;sb&#34;&gt;`gatsby-plugin-twitter`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;resolve&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`gatsby-transformer-remark`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;plugins&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;resolve&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`gatsby-remark-embedder`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;options&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              &lt;span class=&#34;nx&#34;&gt;customTransformers&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;c1&#34;&gt;// Your custom transformers&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;              &lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              &lt;span class=&#34;nx&#34;&gt;services&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;c1&#34;&gt;// The service-specific options by the name of the service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;              &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;c1&#34;&gt;// Other plugins here...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;        &lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Thats it, now I can embed tweets and YouTube videos by just leaving the link on a single line.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Expand One Line Links</title>
    <id>https://waylonwalker.com/expand-one-line-links/</id>
    <updated>2020-11-18T05:00:00Z</updated>
    <published>2020-11-18T05:00:00Z</published>
    <link href="https://waylonwalker.com/expand-one-line-links/" rel="alternate" type="text/html"></link>
    <summary type="text">I wanted a super simple way to cross-link blog posts that require as little effort as possible, yet still looks good in vanilla markdown in GitHub. I have...</summary>
    <content type="html">&lt;p&gt;I wanted a super simple way to cross-link blog posts that require as little effort as possible, yet still looks good in vanilla markdown in GitHub.  I have been using a snippet that puts &lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;HTML&lt;/a&gt; into the markdown.  While this works, it’s more manual/difficult for me does not look the best, and does not read well as&lt;/p&gt;&#xA;&lt;h2 id=&#34;goals-for-new-card&#34;&gt;Goals for new card &lt;a href=&#34;#goals-for-new-card&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The new card should be fully automated to expand with title, description, and&#xA;cover image.  Bonus if I am able to attach a comment behind it.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;fully automated&lt;/li&gt;&#xA;&lt;li&gt;card expansion&lt;/li&gt;&#xA;&lt;li&gt;Title&lt;/li&gt;&#xA;&lt;li&gt;description&lt;/li&gt;&#xA;&lt;li&gt;cover image&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;old-card&#34;&gt;Old Card &lt;a href=&#34;#old-card&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you can call it a card 🤣.  This card was just an image wrapped in an anchor tag and a paragraph tag.  I found this was the most consistent way to get an image narrower and centered in both GitHub and dev.to.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;text-align: center&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;https://waylonwalker.com/notes/eight-years-cat/&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;img&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;width:500px; max-width:80%; margin: auto;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;https://images.waylonwalker.com/eight-years-cat.png&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;alt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;My first eight years as a working professional article&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p style=&#34;text-align: center&#34;&gt;&#xA;  &lt;a href=&#34;https://waylonwalker.com/notes/eight-years-cat&#34;&gt;&#xA;    &lt;img class=&#34;glightbox&#34; style=&#34;width:500px; max-width:80%; margin: auto;&#34; src=&#34;https://images.waylonwalker.com/eight-years-cat.png&#34; alt=&#34;My first eight years as a working professional article&#34;/ data-glightbox=&#34;description: My first eight years as a working professional article&#34;&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;The key here is that I have to put the HTML into the markdown.  It looks a bit dirty while editing and quite frankly it’s a pain to deal with.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;new-card&#34;&gt;New Card &lt;a href=&#34;#new-card&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;a class=&amp;#34;onelinelink&amp;#34; href=&amp;#34;https://waylonwalker.com/eight-years-cat/&amp;#34;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;img style=&amp;#34;float: right;&amp;#34; align=&amp;#39;right&amp;#39; src=&amp;#34;https://images.waylonwalker.com/29cdf6fcfb17d7fd766fc438144fb3e4/630fb/eight-years-cat-xmas2020.png&amp;#34; alt=&amp;#34;article cover for My first eight years as a working professional.&amp;#34;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;div class=&amp;#34;right&amp;#34;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;h2&amp;gt;My first eight years as a working professional.&amp;lt;/h2&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;p class=&amp;#34;description&amp;#34;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    This day 8 years ago I started my first day as a Mechanical Engineer. I am so grateful for this journey that I have been able to have. There is no way that I could have planned this journey from the beginning.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;/p&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;p class=&amp;#34;url&amp;#34;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;span class=&amp;#34;read-more&amp;#34;&amp;gt;read more&amp;lt;/span&amp;gt;  waylonwalker.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;/p&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/div&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/a&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/eight-years-cat/&#34; class=&#34;wikilink&#34; data-title=&#34;My first eight years as a working professional.&#34; data-description=&#34;This day 8 years ago I started my first day as a Mechanical Engineer. I am so grateful for this journey that I have been able to have. There is no way that I...&#34; data-date=&#34;2020-06-19&#34; data-preview=&#34;This day 8 years ago I started my first day as a Mechanical Engineer. I am so grateful for this journey that I have been able to have. There is no way that I...&#34;&gt;My first eight years as a working professional.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;first-step&#34;&gt;First step &lt;a href=&#34;#first-step&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;My first attempt was to make my own transformer for &lt;code&gt;gatsby-remark-embedder&lt;/code&gt;. I previously set this up on my site for Twitter and YouTube.  I tried to get some custom transformers going, to do what I wanted for my own website, but failed.  I really struggled to understand what data was coming in and out of the transformer.  My lack of js/node debugging skills was really showing.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/gatsby-remark-embedder/&#34; class=&#34;wikilink&#34; data-title=&#34;gatsby-remark-embedder&#34; data-description=&#34;Inspired by discourse&amp;#39;s link expansion I am rolling out expansions for one line links on the blog&#34; data-date=&#34;2020-11-18&#34; data-preview=&#34;Inspired by discourse&amp;#39;s link expansion I am rolling out expansions for one line links on the blog&#34;&gt;gatsby-remark-embedder&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;using gatsby-remark-embedder to expand Twitter/YouTube&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;redirects&#34;&gt;Redirects &lt;a href=&#34;#redirects&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It also works with redirects. I have a redirect to my “latest” post.  It’s something that I don’t do the best job at keeping up to date, but when I feel really proud of a post I make it the latest.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/latest/&#34; class=&#34;wikilink&#34; data-title=&#34;latest&#34; data-description=&#34;My latest blog post is . Click the link if you are not automatically redirected.&#34; data-date=&#34;2024-06-01&#34; data-preview=&#34;My latest blog post is . Click the link if you are not automatically redirected.&#34;&gt;latest&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;this post is a redirect to my “latest post”&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;client-side&#34;&gt;Client Side &lt;a href=&#34;#client-side&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I started out by running this card expansion client side. This was the strategy that I used to find the list of elements that should be transformed.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;get all anchors&lt;/li&gt;&#xA;&lt;li&gt;get all paragraphs&lt;/li&gt;&#xA;&lt;li&gt;filter paragraphs where the content is one of the links&lt;/li&gt;&#xA;&lt;li&gt;filter paragraphs where there is only one element in the paragraph&lt;/li&gt;&#xA;&lt;li&gt;filter to paragraphs with links that &lt;code&gt;shouldTransform&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;These elements should have the &lt;code&gt;oneLineLinkCard&lt;/code&gt; applied.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;oneLineLinks&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;linkText&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[...&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;querySelectorAll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;.post-body p a&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;innerText&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;paragraphs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;querySelectorAll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;.post-body p&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;regex&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;sr&#34;&gt;/^https?:\/\/waylonwalker\.com\//&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;shouldTransform&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;regex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;anchorOnly&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[...&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;paragraphs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;linkText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;includes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;innerText&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;childElementCount&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;anchorOnly&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;shouldTransform&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;firstElementChild&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;kr&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;outerHTML&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;oneLineLinkCard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;firstElementChild&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;styles&#34;&gt;Styles &lt;a href=&#34;#styles&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;CSS is not my strong suit, but I can generally hammer something into a shape that I am happy with.  For this one, I did struggle a bit with how it looked on various screens, particularly because I was holding the cover image size to a hard 300px.  I ended up with more media queries than I needed, but it works.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;onelinelink&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;blockquote&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;position&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;relative&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgba&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;.2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;margin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;-6&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;auto&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;padding-top&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;border&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;solid&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;goldenrod&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;border-top&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;solid&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;goldenrod&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;max-width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;300&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;err&#34;&gt;@media&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;max-width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;350&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;kc&#34;&gt;left&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;margin-left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;.4&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;margin-right&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;.4&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;media&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;min-width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;800px&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;max-width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;600px&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;media&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;min-width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;900px&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;max-width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;700px&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;media&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;min-width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;1000px&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;max-width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;800px&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;border-radius&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;15px&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;45px&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;block&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;err&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;onelinelink&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;position&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;relative&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;z-index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;margin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;overflow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;hidden&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;border&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;solid&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgba&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;.1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgba&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;.015&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#262236&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;text-decoration&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;none&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;border-radius&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;max-height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;126&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;err&#34;&gt;@media&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;max-width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;800&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kc&#34;&gt;flex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;direction&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;column&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;max-height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;800&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;max-width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;300&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;margin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;auto&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;h2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;top&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;-1.2&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;postition&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;relative&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;margin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;padding&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;font-size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;.8&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;font-weight&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;400&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;right&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;padding&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;15&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;description&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;font-size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;line-height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.2&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;calc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;31&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;padding&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;padding-bottom&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;padding-top&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;.1&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;margin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;url&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;padding-right&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgba&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;.1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;text-align&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;right&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;position&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;relative&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;z-index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#262236&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;max-width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;300&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;max-height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;126&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;padding&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;margin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;border-radius&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;read-more&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;font-size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;.6&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgba&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;255&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;.08&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;final-look&#34;&gt;Final Look &lt;a href=&#34;#final-look&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;On mobile, it renders vertically.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/one-line-link-vertical.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/one-line-link-vertical.png&#34; alt=&#34;mobile&#34;/ data-glightbox=&#34;description: mobile&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;On desktop, it renders horizontally.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/one-line-link-horizontal.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/one-line-link-horizontal.png&#34; alt=&#34;desktop&#34;/ data-glightbox=&#34;description: desktop&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;expansion&#34;&gt;Expansion &lt;a href=&#34;#expansion&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’m sure that all of this can be better, my js skills are still forming.  It’s quite humbling to see how hard it is to think in an unfamiliar language.  The following &lt;code&gt;oneLineLineCard&lt;/code&gt; renders a string template literal from a paragraph with a single anchor to a card that contains some of that pages meta information.  The&#xA;getDescription` function uses a fetch to get the metadata right from the content of the page.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;getDescription&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;fetch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;then&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;then&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;html&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;parser&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;DOMParser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;doc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;parser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;parseFromString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;html&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;text/html&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;meta&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;doc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;querySelectorAll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;meta&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;description&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[...&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;meta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;og:description&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;)[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;content&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;image&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[...&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;meta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;og:image&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;content&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sm_image&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[...&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;meta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;og:sm_image&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;content&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[...&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;meta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;og:url&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;content&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[...&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;meta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;content&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;description&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sm_image&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;oneLineLinkCard&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;getDescription&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;then&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;meta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;sb&#34;&gt;`&amp;lt;a class=&amp;#34;onelinelink&amp;#34; href=&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;meta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sb&#34;&gt;  &amp;lt;img src=&amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;meta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sm_image&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;meta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sm_image&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;meta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;image&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;meta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;image&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;&amp;#39; alt=&amp;#39;cover image for &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;meta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;meta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sb&#34;&gt;  &amp;lt;div class=&amp;#34;right&amp;#34;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sb&#34;&gt;    &amp;lt;h2&amp;gt;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;meta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;meta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;&amp;lt;/h2&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sb&#34;&gt;    &amp;lt;p class=&amp;#39;description&amp;#39;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sb&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;meta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;description&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;meta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;description&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sb&#34;&gt;    &amp;lt;/p&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sb&#34;&gt;    &amp;lt;p class=&amp;#34;url&amp;#34;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sb&#34;&gt;       &amp;lt;span class=&amp;#39;read-more&amp;#39;&amp;gt;read more&amp;lt;/span&amp;gt;  waylonwalker.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sb&#34;&gt;    &amp;lt;/p&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sb&#34;&gt;  &amp;lt;/div&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sb&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sb&#34;&gt;&amp;lt;/a&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sb&#34;&gt;  `&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;it-works&#34;&gt;It works &lt;a href=&#34;#it-works&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;And it works.  Whenever I reference my own blog with just a single link on a line in markdown I get a nice card link out to the other post, with a small image sized for the card, the title, and the description of the post.&lt;/p&gt;&#xA;&lt;h2 id=&#34;but&#34;&gt;But &lt;a href=&#34;#but&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;too much client-side&lt;/li&gt;&#xA;&lt;li&gt;does not work well with cross-posting&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;For every link I do this with the client will pull the full page just to get a bit of metadata.  I am already doing a bit more than I want to do client-side for a blog, so I would prefer to do it ahead of time.&lt;/p&gt;&#xA;&lt;p&gt;Additionally, since it is done client-side it does not translate well when I copy my markdown to various other blogging platforms.  If it were rendered right into the markdown cross-posting would be much easier.&lt;/p&gt;&#xA;&lt;h2 id=&#34;future-state&#34;&gt;Future State &lt;a href=&#34;#future-state&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;actually already implemented at this point&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The direction I am going to try is to use python to load each post, look for lines that contain only a link, then render this same markup right in the markdown.  For this I am going to use a language I am more familiar with, python, and do this inside of GitHub actions just before build time so that the markdown I write stays the same, the cards will only be rendered in prod.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-python-&#34;&gt;Why Python 🐍 &lt;a href=&#34;#why-python-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Python is my every day what I know, I work much more efficiently and cleanly with it.  Also the more I blog the more abstractions I am seeing and the lazier I am getting.  Things like description, SEO, cover images are all getting automated. Gatsby really doesn’t like to run when some of those things are missing, probably due to my lack of JS error handling skills.  I find it much easier to load up all the pages and patch up the frontmatter in python before&#xA;build time.&lt;/p&gt;&#xA;&lt;p&gt;I am kinda curious if eventually, I can re-create everything I need in python because I am honestly not using react for much more than a glorified templating system, besides search.  If I can pre-render everything in python&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-do-you-think&#34;&gt;What do you think?? &lt;a href=&#34;#what-do-you-think&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Do they look good?  Could they be better?&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ astronomer dag-factory</title>
    <id>https://waylonwalker.com/astronomer-dag-factory/</id>
    <updated>2020-11-16T14:35:24Z</updated>
    <published>2020-11-16T14:35:24Z</published>
    <link href="https://waylonwalker.com/astronomer-dag-factory/" rel="alternate" type="text/html"></link>
    <summary type="text">astronomer has done a fantastic job with dag-factory. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/astronomer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;astronomer&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/astronomer/dag-factory&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dag-factory&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Dynamically generate Apache Airflow DAGs from YAML configuration files&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ orchest orchest</title>
    <id>https://waylonwalker.com/orchest-orchest/</id>
    <updated>2020-11-12T15:38:23Z</updated>
    <published>2020-11-12T15:38:23Z</published>
    <link href="https://waylonwalker.com/orchest-orchest/" rel="alternate" type="text/html"></link>
    <summary type="text">orchest by orchest is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/orchest/orchest&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;orchest&lt;/a&gt; by &lt;a href=&#34;https://github.com/orchest&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;orchest&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;Build data pipelines, the easy way 🛠️&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Find and Replace in the Terminal.</title>
    <id>https://waylonwalker.com/find-replace/</id>
    <updated>2020-11-12T05:00:00Z</updated>
    <published>2020-11-12T05:00:00Z</published>
    <link href="https://waylonwalker.com/find-replace/" rel="alternate" type="text/html"></link>
    <summary type="text">notes about find and replace techniques</summary>
    <content type="html">&lt;h2 id=&#34;grepr&#34;&gt;grepr &lt;a href=&#34;#grepr&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grepr&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;grep -iRl &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$2&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/g&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sb&#34;&gt;```&lt;/span&gt;bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grepr&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;grep -iRl &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$2&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/g&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;grepd&#34;&gt;grepd &lt;a href=&#34;#grepd&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;grepd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;grep&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;iRl&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;$1&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;xargs&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sed&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/^$1/d&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;cocsearch&#34;&gt;CocSearch &lt;a href=&#34;#cocsearch&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;:CocSearch published: &lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt; -g *.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ gvanrossum patma</title>
    <id>https://waylonwalker.com/gvanrossum-patma/</id>
    <updated>2020-11-07T05:31:08Z</updated>
    <published>2020-11-07T05:31:08Z</published>
    <link href="https://waylonwalker.com/gvanrossum-patma/" rel="alternate" type="text/html"></link>
    <summary type="text">gvanrossum has done a fantastic job with patma. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/gvanrossum&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gvanrossum&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/gvanrossum/patma&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;patma&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Pattern Matching&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Resume Tips</title>
    <id>https://waylonwalker.com/resume-tips/</id>
    <updated>2020-11-06T06:00:00Z</updated>
    <published>2020-11-06T06:00:00Z</published>
    <link href="https://waylonwalker.com/resume-tips/" rel="alternate" type="text/html"></link>
    <summary type="text">customize for the job - Why are you a good fit? - What will you bring to the role? - Give real outcomes - give real experience - Stop tech vomiting - if you...</summary>
    <content type="html">&lt;ul&gt;&#xA;&lt;li&gt;customize for the job&lt;/li&gt;&#xA;&lt;li&gt;Why are you a good fit?&lt;/li&gt;&#xA;&lt;li&gt;What will you bring to the role?&lt;/li&gt;&#xA;&lt;li&gt;Give real outcomes&lt;/li&gt;&#xA;&lt;li&gt;give real experience&lt;/li&gt;&#xA;&lt;li&gt;Stop tech vomiting&lt;/li&gt;&#xA;&lt;li&gt;if you link to GitHub&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Make a profile readme&lt;/li&gt;&#xA;&lt;li&gt;Guide me to your best work&lt;/li&gt;&#xA;&lt;li&gt;have some activity&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;if you link to LinkedIn&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Provide some benefit that is not on your resume&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Have a logical flow of experience (dont make me hunt for past experience)&lt;/li&gt;&#xA;&lt;li&gt;Keep it under 2 pages&lt;/li&gt;&#xA;&lt;li&gt;Who you know.&lt;/li&gt;&#xA;&lt;li&gt;Reference real experience&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Deployed 12 data pipelines with over 500 nodes to process 200GB of data at a Fortune 100 company&lt;/li&gt;&#xA;&lt;li&gt;vs&lt;/li&gt;&#xA;&lt;li&gt;Knowledge of Data Engineering methodology with python EC2&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Dont be so fluffy&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ mingrammer diagrams</title>
    <id>https://waylonwalker.com/mingrammer-diagrams/</id>
    <updated>2020-11-06T03:52:15Z</updated>
    <published>2020-11-06T03:52:15Z</published>
    <link href="https://waylonwalker.com/mingrammer-diagrams/" rel="alternate" type="text/html"></link>
    <summary type="text">mingrammer has done a fantastic job with diagrams. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/mingrammer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mingrammer&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/mingrammer/diagrams&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;diagrams&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;🎨 Diagram as Code for prototyping cloud system architectures&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ swyxio svelte-actions</title>
    <id>https://waylonwalker.com/swyxio-svelte-actions/</id>
    <updated>2020-11-02T18:13:21Z</updated>
    <published>2020-11-02T18:13:21Z</published>
    <link href="https://waylonwalker.com/swyxio-svelte-actions/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred svelte-actions by swyxio. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/swyxio/svelte-actions&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;svelte-actions&lt;/a&gt; by &lt;a href=&#34;https://github.com/swyxio&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;swyxio&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;prototype official actions for Svelte&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Codeit Bro Interview</title>
    <id>https://waylonwalker.com/codeit-bro-interview/</id>
    <updated>2020-11-02T06:00:00Z</updated>
    <published>2020-11-02T06:00:00Z</published>
    <link href="https://waylonwalker.com/codeit-bro-interview/" rel="alternate" type="text/html"></link>
    <summary type="text">use this profile image</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/profile.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/profile.jpg&#34; alt=&#34;profile image&#34;/ data-glightbox=&#34;description: profile image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;use this profile image&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Please share your professional role as a data scientist? [Also feel free to&#xA;share about your personal projects, publications, etc.]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I graduated with a Mechanical Engineering Degree 8 years ago. Much of my work&#xA;&lt;a href=&#34;https://waylonwalker.com/eight-years-cat/&#34;&gt;early in my career&lt;/a&gt; was wrapped&#xA;around analyzing larger datasets for my group to understand quality, drive&#xA;changes to improve quality or prove that quality was already good.&lt;/p&gt;&#xA;&lt;p style=&#34;text-align: center&#34;&gt;&#xA;&lt;a href=&#34;https://waylonwalker.com/eight-years-cat&#34;&gt;&#xA;&lt;img class=&#34;glightbox&#34; style=&#34;width:500px; max-width:80%; margin: auto;&#34; src=&#34;https://images.waylonwalker.com/eight-years-cat.png&#34; alt=&#34;My first eight years as a working professional article&#34;/ data-glightbox=&#34;description: My first eight years as a working professional article&#34;&gt;&#xA;&lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Three years ago I made the switch to Data Science and have loved every minute of&#xA;it. It is a very dynamic field that is continually changing and there are&#xA;always a new set of skills to learn and hone in on. I talk a lot about the&#xA;mindset of always learning, sharing knowledge, and communicating in my&#xA;&lt;a href=&#34;https://waylonwalker.com/newsletter&#34;&gt;newsletter&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What are the most difficult challenges you faced as a data scientist and how&#xA;you resolved them?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Deployment is a high bar to enter. Jupyter notebooks provide a suspiciously simple start into Data Science. Folks with very little coding experience can easily get up and running and start bringing value back into their organization, but as you want to start sharing these notebooks, re-using components of them, and scheduling them to run autonomously the bar is raised very quickly. Many places will have teams dedicated to each piece of the process, but all too often if you want your project to be successful you have to step out of your comfort zone and do much of it yourself.&lt;/p&gt;&#xA;&lt;p&gt;Getting started in Data Science&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Jupyter&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Going to production&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;packaging&lt;/li&gt;&#xA;&lt;li&gt;creating cli’s&lt;/li&gt;&#xA;&lt;li&gt;linux&lt;/li&gt;&#xA;&lt;li&gt;bash&lt;/li&gt;&#xA;&lt;li&gt;cron&lt;/li&gt;&#xA;&lt;li&gt;CI/CD&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Docker&lt;/li&gt;&#xA;&lt;li&gt;AWS&lt;/li&gt;&#xA;&lt;li&gt;Pipelines&lt;/li&gt;&#xA;&lt;li&gt;Schedulers/orchestration&lt;/li&gt;&#xA;&lt;li&gt;Virtual Machines&lt;/li&gt;&#xA;&lt;li&gt;hosting docs&lt;/li&gt;&#xA;&lt;li&gt;hosting models/apis&lt;/li&gt;&#xA;&lt;li&gt;Visualizations&lt;/li&gt;&#xA;&lt;li&gt;Databases&lt;/li&gt;&#xA;&lt;li&gt;blob storage&lt;/li&gt;&#xA;&lt;li&gt;…&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What are the most required skills for a data scientist?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Communication&lt;/li&gt;&#xA;&lt;li&gt;project Estimation&lt;/li&gt;&#xA;&lt;li&gt;Subject Matter Expertise&lt;/li&gt;&#xA;&lt;li&gt;Python&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;A good understanding of the business problems you are trying to solve. This&#xA;requires very good communication between Subject matter experts and the Data&#xA;Science team.&lt;/p&gt;&#xA;&lt;p&gt;For the technical side, python is the core skill that I stick with. As I said&#xA;before this quickly starts to grow as you start needing to take projects into&#xA;production. Learning how to write good python efficiently without needing to&#xA;look up much really frees up your brain to focus on the harder challenge of&#xA;solving the problem at hand.&lt;/p&gt;&#xA;&lt;p&gt;Learn how to frame up your problem ahead of time and be flexible in just the&#xA;right ways.&lt;/p&gt;&#xA;&lt;p&gt;Let’s make up a fictitious transportation company that is split into a number of divisions for car, train, bus, etc. All too often I see projects setup as a pilot for the car division, or even a micro subset of the car division. The proof of concept takes off, and now we need to expand the project from one city to a whole region, but since the city was hard coded in it makes it really hard to expand. After a few months we have a lot of copy and paste code and at some point it becomes nearly impossible to make any changes without needing to change everything, or expand to new regions or divisions. Understand the inputs to your problem set early on and plan for them to change.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How a beginner can create a roadmap to become a successful data scientist in&#xA;the present scenario?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Someone who is currently working in any sort of role that involves manipulating data in excel can get their foot in the door by automating the work their team does in python, or visualizing it in a more powerful tool.&lt;/p&gt;&#xA;&lt;p&gt;You will quickly find that you can handle much more data than spreadsheet tools can, you can start expanding projects to utilize more data, or use that extra free time to find new insights you didn’t have time for before.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How much Maths is required to be a good data scientist? [You can also share&#xA;which concepts should everyone focus on more]&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I have a lot of math background from my Mechanical Engineering degree that I haven’t use in years.&lt;/p&gt;&#xA;&lt;p&gt;To be clear I am not generally building models in my day to day. My role kind&#xA;of sits between Data Engineering and MLOps these days. I scaffold up new&#xA;projects for the team, take on more complex data pipelining projects, and own&#xA;our whole deployment system. None of this really requires advanced math on a&#xA;day to day basis.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What are some concepts that everyone should know more&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Linters. They are so easy to run that no one should be bad code that fails&#xA;linting these days. You can set them to run from your favorite editor, the&#xA;command line, in a git commit, from GitHub Actions, or an Azure pipeline, just&#xA;figure out the ones that fit you and run them.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Will data science be replaced by AI?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Everything that we see today will be different in the future whether replaced by&#xA;AI or the next hot topic. There might be subsets of our work that is completely&#xA;automated away. I think it will be a great opportunity to focus our minds on&#xA;more difficult things that AI cannot. Data Science is a relatively new field,&#xA;be ready for it to change and move with it.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Words of advice for people without a Computer Science background?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;You can do it, there are more folks out there crushing Data Science and Software Engineering in general without a Computer Science background than you realize. Don’t let the imposter syndrome get to you. Keep honing your skills and be confident.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Be flexible&lt;/li&gt;&#xA;&lt;li&gt;Always be open and ready for change&lt;/li&gt;&#xA;&lt;li&gt;Never stop learning&lt;/li&gt;&#xA;&lt;li&gt;Keep a positive attitude&lt;/li&gt;&#xA;&lt;li&gt;Be kind to others&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Tell us about your journey towards becoming a successful data scientist?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;see Q1&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Which tools you use for Data Science and which one do you recommend for&#xA;beginners?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;As a beginner definitely focus on a minimal number of things at a time. As you go through the journey of learning anything you will likely to see articles that tell you that your tech of choice is dead and should never be used because some new hotness it so much better. Focus on skills that have a real job market and solve real problems don’t worry so much about it that you never learn one.&lt;/p&gt;&#xA;&lt;p&gt;Python is my core skill, it can do so much so quickly and has a very strong ecosystem in data.&lt;/p&gt;&#xA;&lt;p&gt;A skill I would add in general is to deploy early. Too often we spend months on prototypes that need rewritten for the prod environment, when they could have just been written for prod from the beginning while ci tooling could have kept the project cleaner and easier to work with. Whether its GitHub actions or Azure Pipelines CI/CD is cheaper and easier to setup than ever. There is a fluid movement that happens when you are working with clean code along the way rather than cleaning it up after its all done. Simplifying your work opens up mental space to put more focus on your problem at hand.&lt;/p&gt;&#xA;&lt;p style=&#34;text-align: center&#34;&gt;&#xA;&lt;a href=&#34;https://waylonwalker.com/what-are-github-actions/&#34;&gt;&#xA;&lt;img class=&#34;glightbox&#34; style=&#34;width:500px; max-width:80%; margin: auto;&#34; src=&#34;https://images.waylonwalker.com/what-are-github-actions.png&#34; alt=&#34;introductory article to GitHub actions&#34;/ data-glightbox=&#34;description: introductory article to GitHub actions&#34;&gt;&#xA;&lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;check out this article about github actions&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Is data science a stressful job?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It definitely can be if you let it. Manage expectations and scope creep well and you will be fine. My most stressful times have probably been when I over committed to something and it was my own fault for setting myself up for stress.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What type of problems you faced every day as a data scientist?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;At a high level the business I support remanufactures ( similar to recycling ) parts for heavy equipment. I find ways to re-use more core material to save cost and reduce emissions. A lot of what I do is solving business problems with code. This might be a problem that has been solved by hand for a small focused subset of a population and expanding it to everything. More and more of my time is being dedicated to coaching. Whether in the form of code review, pair programming, or general mentoring.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>reasons-to-kedro</title>
    <id>https://waylonwalker.com/reasons-to-kedro/</id>
    <updated>2020-11-01T05:00:00Z</updated>
    <published>2020-11-01T05:00:00Z</published>
    <link href="https://waylonwalker.com/reasons-to-kedro/" rel="alternate" type="text/html"></link>
    <content type="html">&lt;iframe src=&#34;https://anchor.fm/waylon-walker/embed/episodes/reasons-to-kedro-en6kr3&#34; height=&#34;102px&#34; width=&#34;400px&#34; frameborder=&#34;0&#34; scrolling=&#34;no&#34;&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;There are many reasons that you should be using kedro.  If you are on a team of&#xA;Data Scientists/Data Engineers processing DataFrames from many data sources&#xA;should be considering a pipeline framework.  Kedro is a great option that&#xA;provides many benefits for teams to collaborate, develop, and deploy data&#xA;pipelines&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/what-is-kedro/&#34; class=&#34;wikilink&#34; data-title=&#34;What is Kedro&#34; data-description=&#34;Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...&#34; data-date=&#34;2021-08-17&#34; data-preview=&#34;Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...&#34;&gt;What is Kedro&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;starter-template&#34;&gt;Starter Template &lt;a href=&#34;#starter-template&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Kedro makes it super easy to get started with their cli that utilizes&#xA;cookiecutter under the hood.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda create -n my-new-project -y &lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;3.8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro new&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro run&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/create-new-kedro-project/&#34; class=&#34;wikilink&#34; data-title=&#34;Create New Kedro Project&#34; data-description=&#34;This is a quickstart to getting a new kedro pipeline up and running. After this article you should be able to understand how to get started with kedro. You...&#34; data-date=&#34;2020-03-02&#34; data-preview=&#34;This is a quickstart to getting a new kedro pipeline up and running. After this article you should be able to understand how to get started with kedro. You...&#34;&gt;Create New Kedro Project&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;read more about how to start your first kedro project here&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;collaboration&#34;&gt;Collaboration &lt;a href=&#34;#collaboration&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Kedro provides many tools that help teams collaborate on a single codebase.&#xA;While writing monolithic scripts it can be easy to pin yourself in a corner&#xA;where it is difficult to have multiple people making changes to the&#xA;notebook/script at the same time.  Kedro helps guide your team to break your&#xA;project down into small pieces that different members of the team can work on&#xA;in parallel.&lt;/p&gt;&#xA;&lt;h3 id=&#34;sharable-catalog&#34;&gt;sharable catalog &lt;a href=&#34;#sharable-catalog&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Kedro makes it easy to collaborate with members who aren’t even working on the&#xA;pipeline.  I often see team members who want to investigate datasets from&#xA;different points in the pipeline.  Kedro makes it really easy for them to load&#xA;it into python.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;for python users&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Share catalog entries with folks doing EDA.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;main_table&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;for non-python users&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;For those who may not be using python, we can easily kick out a CSV version of&#xA;that &lt;code&gt;main_table&lt;/code&gt; that they can get from s3 or your cloud storage solution of&#xA;choice.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;master_table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;s3://bucket/data/03_primary/master_table.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;layer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;primary&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;for the SQL folks&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;We aren’t even constrained to those who only use python or excel, we can kick&#xA;out any kind of dataset that python can output.  Kedro even comes with many&#xA;DataSet types out of the box so that we don’t have to write any read/write&#xA;code.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;master_table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;SQLTableDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;table_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;master_table&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;credentials&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;postgres&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;small-nodes-over-monolithic-scripts&#34;&gt;small nodes over monolithic scripts &lt;a href=&#34;#small-nodes-over-monolithic-scripts&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;As I said before single notebooks/scripts are really hard to collaborate on.  I&#xA;have seen Data Engineers sitting idle waiting to get their changes manually&#xA;added into the master notebook.  When you find yourself in this situation, find&#xA;a better solution.  It’s time to break things down into individual modules and&#xA;utilize a version control system that can automatically merge changes in.&lt;/p&gt;&#xA;&lt;p&gt;Kedro encourages the use of &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; version control and storing all node functions&#xA;inside of modules while still making it really easy to load data into a&#xA;notebook/shell and start trying out new things.&lt;/p&gt;&#xA;&lt;h2 id=&#34;no-more-read-and-write-code&#34;&gt;No More read and write code &lt;a href=&#34;#no-more-read-and-write-code&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As I said earlier kedro comes with datasets for the most popular output&#xA;formats.  It is also backed by a really amazing library called &lt;code&gt;fsspec&lt;/code&gt;, this&#xA;library makes the filesystem that you are storing agnostic to how you write to&#xA;it.  This means that the kedro library utilizes &lt;code&gt;fsspec&lt;/code&gt; under the hood and&#xA;writes to the file as if it was to disk, but based on the prefix to the file it&#xA;may actually be writing to the local filesystem, gcp, azure blob, or s3.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;custom DataSets&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;If kedro does not have a &lt;code&gt;DataSet&lt;/code&gt; for the format that you need to read or&#xA;write you can easily create your own custom &lt;code&gt;DataSet&lt;/code&gt;  all you need to do is&#xA;inherit from &lt;code&gt;kedro.io.AbstractDataSet&lt;/code&gt; and create methods for &lt;code&gt;__init__&lt;/code&gt;,&#xA;&lt;code&gt;_load&lt;/code&gt;, &lt;code&gt;_save&lt;/code&gt;, &lt;code&gt;_exists&lt;/code&gt;, and &lt;code&gt;_describe&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Check out this example from their docs.  I removed the docstrings for brevity,&#xA;you can see the entire &lt;code&gt;DataSet&lt;/code&gt; in their&#xA;&lt;a href=&#34;https://kedro.readthedocs.io/en/0.15.2/03_tutorial/03_set_up_data.html?highlight=custom%20dataset#creating-custom-datasets&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;docs&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The complete example all in one was only available in an older version, more up to date &lt;a href=&#34;https://kedro.readthedocs.io/en/0.16.6/07_extend_kedro/01_custom_datasets.html?highlight=custom%20dataset&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;docs&lt;/a&gt; have a good writeup that walks through everything separately.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;os.path&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;isfile&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;typing&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Any&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Union&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Dict&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pandas&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pd&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.io&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;AbstractDataSet&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;ExcelLocalDataSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AbstractDataSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;_describe&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Any&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;engine&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_engine&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;load_args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_load_args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;save_args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_save_args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__init__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;engine&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;xlsxwriter&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;load_args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Any&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;save_args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Any&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_filepath&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filepath&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;default_save_args&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;default_load_args&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;engine&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;xlrd&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_load_args&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;default_load_args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load_args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;load_args&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;default_load_args&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_save_args&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;default_save_args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;save_args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;save_args&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;default_save_args&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_engine&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;engine&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;_load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Union&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataFrame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataFrame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read_excel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_load_args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;_save&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataFrame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;writer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ExcelWriter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;engine&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_engine&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to_excel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;writer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_save_args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;writer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;save&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;_exists&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;bool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;isfile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;execution-order-is-taken-care-of&#34;&gt;Execution order is taken care of &lt;a href=&#34;#execution-order-is-taken-care-of&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As you build up complex pipelines containing 10’s or 100’s of nodes it becomes&#xA;difficult to splice in new nodes/steps without messing up or a framework to&#xA;help.  Kedro simply needs a set of nodes that each takes in catalog entries as&#xA;input and output to catalog entries and it will figure out the order for you.&lt;/p&gt;&#xA;&lt;p&gt;These nodes can be made for one-off purposes, take in functions from reusable&#xA;libraries, and even be dynamically generated from a configuration.  There is&#xA;no need to worry about hand curating the execution order, that’s all taken care&#xA;of.&lt;/p&gt;&#xA;&lt;h2 id=&#34;easily-slice-up-a-pipeline&#34;&gt;Easily slice up a pipeline &lt;a href=&#34;#easily-slice-up-a-pipeline&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Since kedro is a DAG that takes in a pile of nodes and figures out all of the&#xA;dependencies for you it knows a lot about your pipeline.  You can slice it up to&#xA;only the specific pieces that you need.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# single nodes&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;only_nodes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;node1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# single nodes and all of thier dependencies&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to_nodes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;node1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;node2&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# from a dataset to all of its dependants&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;from_inputs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;dataset1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;dataset2&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# to a an outputs with all of its dependencies&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to_outputs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;dataset6&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;dataset7&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;pluginshooks&#34;&gt;plugins/hooks &lt;a href=&#34;#pluginshooks&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Creating your own modifications to how kedro behaves is made really simple&#xA;through the use of hooks.  There are several hooks that happen at different&#xA;points in the kedro lifecycle.  For instance, you can hook in before pipeline&#xA;run or after pipeline run to do whatever your project needs.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/creating-the-kedro-preflight-hook/&#34; class=&#34;wikilink&#34; data-title=&#34;creating the kedro-preflight hook&#34; data-description=&#34;Kedro Hooks Intro - kedro hooks are an exciting upcoming feature of kedro . They allow you to hook into ,, and (nouns). With a , or (adjective). This really...&#34; data-date=&#34;2020-05-10&#34; data-preview=&#34;Kedro Hooks Intro - kedro hooks are an exciting upcoming feature of kedro . They allow you to hook into ,, and (nouns). With a , or (adjective). This really...&#34;&gt;creating the kedro-preflight hook&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;pip-install-plugin&#34;&gt;pip install plugin &lt;a href=&#34;#pip-install-plugin&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;There is a growing list of plugins available from pypi that is only a &lt;code&gt;pip install&lt;/code&gt; away.  Most of them are on&#xA;&lt;a href=&#34;https://github.com/topics/kedro-plugin&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;GitHub&lt;/a&gt; and tagged as a&#xA;&lt;a href=&#34;https://github.com/topics/kedro-plugin&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-plugin&lt;/a&gt; topic.&lt;/p&gt;&#xA;&lt;h2 id=&#34;flexible-cli&#34;&gt;flexible cli &lt;a href=&#34;#flexible-cli&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;In the end, you have a cli for your project that can run your pipeline in all&#xA;sorts of cool ways since it knows about each node’s dependencies.  This makes&#xA;running and scheduling production a breeze.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# single nodes&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro run --node node1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# single nodes and all of their dependencies&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro run --to-nodes node1,node2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# from a dataset to all of its dependents&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro run --from-inputs dataset1,dataset2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# to outputs with all of their dependencies&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro run --to-outputs dataset6,dataset7&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;try-it-out&#34;&gt;Try it out &lt;a href=&#34;#try-it-out&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Hopefully this post gave you the inspiration to get started today, if it did &lt;code&gt;pip install kedro&lt;/code&gt; and run &lt;code&gt;kedro new&lt;/code&gt; to try it out.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Reasons to Kedro</title>
    <id>https://waylonwalker.com/reasons-to-kedro-notes/</id>
    <updated>2020-10-31T05:00:00Z</updated>
    <published>2020-10-31T05:00:00Z</published>
    <link href="https://waylonwalker.com/reasons-to-kedro-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">collaboration - Sharable catalog - small nodes over monolithic notebooks - catalog - easily load anything without needing to run - No need to write...</summary>
    <content type="html">&lt;h2 id=&#34;reasons-to-kedro&#34;&gt;Reasons to Kedro &lt;a href=&#34;#reasons-to-kedro&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;collaboration&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Sharable catalog&lt;/li&gt;&#xA;&lt;li&gt;small nodes over monolithic notebooks&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;catalog&#xA;&lt;ul&gt;&#xA;&lt;li&gt;easily load anything without needing to run&lt;/li&gt;&#xA;&lt;li&gt;No need to write read/write code&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;pipeline&#xA;&lt;ul&gt;&#xA;&lt;li&gt;No need to keep execution order in your head&lt;/li&gt;&#xA;&lt;li&gt;easily run a slice of a pipeline&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;plugins&#xA;&lt;ul&gt;&#xA;&lt;li&gt;pip install&lt;/li&gt;&#xA;&lt;li&gt;make your own&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;hooks&lt;/li&gt;&#xA;&lt;li&gt;flexible expandable cli&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;reasons-not-to-kedro&#34;&gt;Reasons Not to Kedro &lt;a href=&#34;#reasons-not-to-kedro&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Already utilizing another DAG framework&lt;/li&gt;&#xA;&lt;li&gt;Data is not in a widely supported format&lt;/li&gt;&#xA;&lt;li&gt;Micro short-lived project&lt;/li&gt;&#xA;&lt;li&gt;Large Project / Deadline&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Use a lower profile project to learn first&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Team not willing to change&lt;/li&gt;&#xA;&lt;li&gt;Need minimal dependencies&lt;/li&gt;&#xA;&lt;li&gt;God Project - kedro owns everything??&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ KasperZutterman Second-Brain</title>
    <id>https://waylonwalker.com/kasperzutterman-second-brain/</id>
    <updated>2020-10-28T16:17:51Z</updated>
    <published>2020-10-28T16:17:51Z</published>
    <link href="https://waylonwalker.com/kasperzutterman-second-brain/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred Second-Brain by KasperZutterman. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/KasperZutterman/Second-Brain&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Second-Brain&lt;/a&gt; by &lt;a href=&#34;https://github.com/KasperZutterman&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;KasperZutterman&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;A curated list of awesome Public Zettelkastens 🗄️ / Second Brains 🧠 / Digital Gardens 🌱&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Reading List</title>
    <id>https://waylonwalker.com/reading-list/</id>
    <updated>2020-10-28T05:00:00Z</updated>
    <published>2020-10-28T05:00:00Z</published>
    <link href="https://waylonwalker.com/reading-list/" rel="alternate" type="text/html"></link>
    <summary type="text">Things to read later</summary>
    <content type="html">&lt;h2 id=&#34;latest-post&#34;&gt;Latest Post &lt;a href=&#34;#latest-post&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/latest/&#34; class=&#34;wikilink&#34; data-title=&#34;latest&#34; data-description=&#34;My latest blog post is . Click the link if you are not automatically redirected.&#34; data-date=&#34;2024-06-01&#34; data-preview=&#34;My latest blog post is . Click the link if you are not automatically redirected.&#34;&gt;latest&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;STOP LEAVING Browser Tabs open and save them here!&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://nesbitt.io/2026/03/04/package-managers-need-to-cool-down.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/nesbitt.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/nesbitt.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://nesbitt.io/2026/03/04/package-managers-need-to-cool-down.html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mariozechner.at/posts/2026-03-25-thoughts-on-slowing-the-fuck-down/&#34;&gt;https://mariozechner.at/posts/2026-03-25-thoughts-on-slowing-the-fuck-down/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr/&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://dev.to/jbranchaud/how-i-built-a-learning-machine-45k9&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/dev.to.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/dev.to.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jbrancha til&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://christoph-rumpel.com/2020/8/the-video-course-launch-that-made-me-think&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/christoph-rumpel.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/christoph-rumpel.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;The Video Course Launch that Made Me Think&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://demo.photoprism.app/browse&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/demo.photoprism.app.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/demo.photoprism.app.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;photo prism&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/cdgriffith/Box/wiki/Types-of-Boxes#camel-killer-box&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;box python library&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://news.ycombinator.com/item?id=30037766#30039809&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/news.ycombinator.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/news.ycombinator.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro on hn&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://laszlo.substack.com/p/how-can-a-data-scientist-refactor&#34;&gt;How can a Data Scientist refactor Jupyter notebooks towards production-quality code?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://qmacro.org/autodidactics/2021/10/14/sourcing-vs-executing-in-bash/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/qmacro.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/qmacro.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Sourcing vs executing in Bash&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://thevaluable.dev/open-closed-principle-revisited/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/thevaluable.dev.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/thevaluable.dev.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Should We Follow The Open-Closed Principle?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://limdauto.me/blog/create-multi-dimensional-arrays-in-pure-python/&#34;&gt;Create multi-dimensional arrays in pure Python: The Correct Way&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://javascript.plainenglish.io/beware-of-these-9-red-flags-in-a-developer-interview-16b7bf63336a&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/javascript.plainenglish.io.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/javascript.plainenglish.io.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Beware of These 9 Red Flags in a Developer Interview&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://igorasilveira.hashnode.dev/how-to-overcome-impostor-syndrome-as-a-developer-ckv6ej6lc15qtp5s1hz5da4q3&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/igorasilveira.hashnode.dev.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/igorasilveira.hashnode.dev.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;How to Overcome Impostor Syndrome as a Developer&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://css-tricks.com/lazy-load-embedded-youtube-videos/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/css-tricks.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/css-tricks.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lazy load youtube videos&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.labnol.org/internet/light-youtube-embeds/27941/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.labnol.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.labnol.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lite youtube embeds&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://filmot.com/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/filmot.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/filmot.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;full subtitle youtube search&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr/&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Jungle Scout - &lt;a href=&#34;https://junglescouteng.medium.com/jungle-scout-case-study-kedro-airflow-and-mlflow-use-on-production-code-150d7231d42e&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/junglescouteng.medium.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/junglescouteng.medium.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Kedro Case Study&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/kedro-org/kedro/commit/b42845e2e9a6d96e395a5a6f75980ef55c24fddc&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Kedro Sessions&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Julia Evans - &lt;a href=&#34;https://jvns.ca/blog/2020/10/28/a-few-things-i-ve-learned-about-email-marketing/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/jvns.ca.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/jvns.ca.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;A few things I’ve learned about email marketing&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; course - &lt;a href=&#34;https://www.katacoda.com/courses/git/1&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.katacoda.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.katacoda.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;katacoda&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.jessemaegan.com/blog/2021-05-28-data-science-twitch-streamers-round-up/&#34;&gt;data-science-twitch-streamers-round-up&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://twitter.com/__mharrison__/status/1415728695264776192/photo/1&#34;&gt;pandas assign&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;nix&#34;&gt;nix &lt;a href=&#34;#nix&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://ianthehenry.com/posts/how-to-learn-nix/python3-alpha/&#34; class=&#34;hoverlink  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/ianthehenry.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/ianthehenry.com.ico&#34;&gt;https://ianthehenry.com/posts/how-to-learn-nix/python3-alpha/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;textual-css&#34;&gt;textual css &lt;a href=&#34;#textual-css&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://twitter.com/willmcgugan/status/1531294412696956930&#34; class=&#34;hoverlink&#34;&gt;https://twitter.com/willmcgugan/status/1531294412696956930&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;neovim&#34;&gt;neovim &lt;a href=&#34;#neovim&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/nanotee/nvim-lua-guide&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-lua-guide&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mlingelbach.com/neovim/issue_1/&#34;&gt;neorants&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/nvim-telescope/telescope.nvim/pull/987&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;telescope 987&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/tjdevries/tree-sitter-lua#how-to-generate-documentation&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim how to doc plugins&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;topic-ideation&#34;&gt;Topic Ideation &lt;a href=&#34;#topic-ideation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.semrush.com/topic-research/61f49a2c01de510001fec3bb/overview/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.semrush.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.semrush.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;semrush&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;prime-and-nic&#34;&gt;prime and nic &lt;a href=&#34;#prime-and-nic&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.twitch.tv/videos/1229603481&#34; class=&#34;hoverlink  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.twitch.tv.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.twitch.tv.png&#34;&gt;https://www.twitch.tv/videos/1229603481&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-to-remove-background-sound-in-real-time-for-linux&#34;&gt;How to Remove Background Sound in Real-Time for Linux &lt;a href=&#34;#how-to-remove-background-sound-in-real-time-for-linux&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt; by&#xA;@adfpizarro&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://hackernoon.com/how-to-remove-background-sound-in-real-time-for-linux-uvea3w7n&#34; class=&#34;hoverlink  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/hackernoon.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/hackernoon.com.png&#34;&gt;https://hackernoon.com/how-to-remove-background-sound-in-real-time-for-linux-uvea3w7n&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://ultimatemotherfuckingwebsite.com/&#34; class=&#34;hoverlink  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/ultimatemotherfuckingwebsite.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/ultimatemotherfuckingwebsite.com.png&#34;&gt;https://ultimatemotherfuckingwebsite.com/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;-git-aliases&#34;&gt;🔥 git aliases &lt;a href=&#34;#-git-aliases&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/jsatk/dotfiles/blob/ck/tag-git/gitconfig&#34; class=&#34;hoverlink  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34;&gt;https://github.com/jsatk/dotfiles/blob/ck/tag-git/gitconfig&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nastyox Repo-Roster</title>
    <id>https://waylonwalker.com/nastyox-repo-roster/</id>
    <updated>2020-10-27T19:52:00Z</updated>
    <published>2020-10-27T19:52:00Z</published>
    <link href="https://waylonwalker.com/nastyox-repo-roster/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred Repo-Roster by nastyox. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/nastyox/Repo-Roster&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Repo-Roster&lt;/a&gt; by &lt;a href=&#34;https://github.com/nastyox&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nastyox&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;Shout-out supporters in your GitHub README file.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>What&#39;s New in Kedro 0.16.6</title>
    <id>https://waylonwalker.com/whats-new-in-kedro-0166/</id>
    <updated>2020-10-25T05:00:00Z</updated>
    <published>2020-10-25T05:00:00Z</published>
    <link href="https://waylonwalker.com/whats-new-in-kedro-0166/" rel="alternate" type="text/html"></link>
    <summary type="text">This version of kedro releases a new set of supported deployment options and the spaceflights pipeline is officially added as a starter alias.</summary>
    <content type="html">&lt;p&gt;Kedro &lt;a href=&#34;https://github.com/kedro-org/kedro/releases&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;0.16.6&lt;/a&gt; is out! Let’s take a look through the release notes&lt;/p&gt;&#xA;&lt;h2 id=&#34;deployment-docs&#34;&gt;Deployment Docs &lt;a href=&#34;#deployment-docs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is really exciting to see more deployment options coming from the kedro team. It really shows the power of the framework. The power of some of these orchestrations options is incredible.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://kedro.readthedocs.io/en/stable/10_deployment/04_argo.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Argo&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://kedro.readthedocs.io/en/stable/10_deployment/05_prefect.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Prefect&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://kedro.readthedocs.io/en/stable/10_deployment/06_kubeflow.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Kubeflow&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://kedro.readthedocs.io/en/stable/10_deployment/07_aws_batch.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Batch&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://kedro.readthedocs.io/en/stable/10_deployment/09_aws_sagemaker.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;SageMaker&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Most of them hinge on a sweet combination of the kedro cli, docker image, and the pipeline knowing your nodes dependencies.&lt;/p&gt;&#xA;&lt;p&gt;Argo, Prefect, and Kubeflow have an interesting technique where they translate the pipeline and its dependencies from kedro to their language.&lt;/p&gt;&#xA;&lt;p&gt;Batch uses the aws cli to submit jobs, one node per job, and listen for them to complete. It will submit all nodes with completed dependencies at once, meaning that we can get some massive parallelization.&lt;/p&gt;&#xA;&lt;p&gt;I did a quick and dirty test of one of these by simulating the technique in a bash script and saw a 40 hr pipeline finish in about 1 hour. I am excited to get this working in my production workflow.&lt;/p&gt;&#xA;&lt;h2 id=&#34;spaceflight-starter&#34;&gt;Spaceflight starter &lt;a href=&#34;#spaceflight-starter&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;They have officially added the spaceflights pipeline as a starter. I have not yet had a chance to try this out, but I anticipate this will be a great pipeline to teach from as it is a bit more complex than the iris pipeline.&lt;/p&gt;&#xA;&lt;p&gt;I tell folks all the time the best way to learn something new like kedro is to &lt;strong&gt;practice, practice, practice&lt;/strong&gt;. Having this at their fingertips will give an easy way to fire up a pipeline that is ok to break try out some new ideas and leave it. I see this helping me testing out plugins on more complex pipelines and writing blog posts with examples that readers can more easily follow along with.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;practice&lt;/li&gt;&#xA;&lt;li&gt;testing&lt;/li&gt;&#xA;&lt;li&gt;blog posts&lt;/li&gt;&#xA;&lt;li&gt;tutorials&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;better-error-messages&#34;&gt;Better Error Messages &lt;a href=&#34;#better-error-messages&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Shameless pug, my PR landed in kedro, but fell off of the release.md in a merge issue. I was frustrated working on large projects when the wrong arguments were passed into a node and it did not give you any information in the Error to figure out where the error was thrown. Now it will at least give the name of the function that caused the error. This was a simple fix as all of the information was already there.&lt;/p&gt;&#xA;&lt;h2 id=&#34;overall&#34;&gt;Overall &lt;a href=&#34;#overall&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Love the progress that the project is seeing and the focus on all of the deployment options.&lt;/p&gt;&#xA;&lt;h2 id=&#34;thanks-for-supporting-contributions&#34;&gt;Thanks for supporting contributions &lt;a href=&#34;#thanks-for-supporting-contributions&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/deepyaman&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Deepyaman Datta&lt;/a&gt;, Bhavya Merchant, &lt;a href=&#34;https://github.com/Lovkush-A&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Lovkush Agarwal&lt;/a&gt;, &lt;a href=&#34;https://github.com/vhawk19&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Varun Krishna S&lt;/a&gt;, &lt;a href=&#34;https://github.com/sebastianbertoli&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Sebastian Bertoli&lt;/a&gt;, &lt;a href=&#34;https://github.com/noklam&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;noklam&lt;/a&gt;, &lt;a href=&#34;https://github.com/djpetti&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Daniel Petti&lt;/a&gt;, &lt;a href=&#34;https://github.com/waylonwalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Waylon Walker&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ mkdocs mkdocs</title>
    <id>https://waylonwalker.com/mkdocs-mkdocs/</id>
    <updated>2020-10-23T20:56:01Z</updated>
    <published>2020-10-23T20:56:01Z</published>
    <link href="https://waylonwalker.com/mkdocs-mkdocs/" rel="alternate" type="text/html"></link>
    <summary type="text">mkdocs by mkdocs is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/mkdocs/mkdocs&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mkdocs&lt;/a&gt; by &lt;a href=&#34;https://github.com/mkdocs&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mkdocs&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;Project documentation with Markdown.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>A brain dump of stories</title>
    <id>https://waylonwalker.com/stories_10-10-2020_10-21-2020/</id>
    <updated>2020-10-21T05:00:00Z</updated>
    <published>2020-10-21T05:00:00Z</published>
    <link href="https://waylonwalker.com/stories_10-10-2020_10-21-2020/" rel="alternate" type="text/html"></link>
    <summary type="text">I started making stories as kind of a brain dump a few times per day and posting them to LinkedIn. Here are the last 11 days of stories.</summary>
    <content type="html">&lt;p&gt;I started making stories as kind of a brain dump a few times per day and&#xA;posting them to&#xA;[LinkedIn](&lt;a href=&#34;https://www.linkedin.com/in/waylonwalker/(https://www.linkedin.com/in/waylonwalker/)&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.linkedin.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.linkedin.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://www.linkedin.com/in/waylonwalker/(https://www.linkedin.com/in/waylonwalker/)&lt;/a&gt;.&#xA;Here are the last 11 days of stories.&lt;/p&gt;&#xA;&lt;p&gt;I store all the stories on my website with the hopes of doing something with&#xA;them on my own platform eventually. For now it makes it easy to make these&#xA;posts.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; static/stories&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -I &lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;![](https://waylonwalker.com/stories/{})&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;stories-10-10-2020---10-21-2020&#34;&gt;Stories 10-10-2020 - 10-21-2020 &lt;a href=&#34;#stories-10-10-2020---10-21-2020&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/stories/TIL-kedro-sorts-nodes.png&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/stories/TIL-kedro-sorts-nodes.png&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;a href=&#34;https://waylonwalker.com/stories/disable-base-pip.png&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/stories/disable-base-pip.png&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;a href=&#34;https://waylonwalker.com/stories/discovered-social-cards.png&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/stories/discovered-social-cards.png&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;a href=&#34;https://waylonwalker.com/stories/find-kedro-de1-contributor.png&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/stories/find-kedro-de1-contributor.png&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;a href=&#34;https://waylonwalker.com/stories/hacktoberfest-2020-kedro-538-tests-pass.png&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/stories/hacktoberfest-2020-kedro-538-tests-pass.png&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;a href=&#34;https://waylonwalker.com/stories/itertools.product-cars-regions.png&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/stories/itertools.product-cars-regions.png&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;a href=&#34;https://waylonwalker.com/stories/kedro-run-only-missing.png&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/stories/kedro-run-only-missing.png&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;a href=&#34;https://waylonwalker.com/stories/new-post-designing-kedro-router.png&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/stories/new-post-designing-kedro-router.png&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;a href=&#34;https://waylonwalker.com/stories/power-is-nothing-without-control.png&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/stories/power-is-nothing-without-control.png&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;a href=&#34;https://waylonwalker.com/stories/progress-over-perfection-comment.png&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/stories/progress-over-perfection-comment.png&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;a href=&#34;https://waylonwalker.com/stories/quick-tdb.png&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/stories/quick-tdb.png&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;a href=&#34;https://waylonwalker.com/stories/running-ci-for-hacktoberfest-kedro.png&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/stories/running-ci-for-hacktoberfest-kedro.png&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;a href=&#34;https://waylonwalker.com/stories/three-ds-openings.png&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/stories/three-ds-openings.png&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;a href=&#34;https://waylonwalker.com/stories/use-venv.png&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/stories/use-venv.png&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ mmchougule kedro-grpc-server</title>
    <id>https://waylonwalker.com/mmchougule-kedro-grpc-server/</id>
    <updated>2020-10-21T03:23:46Z</updated>
    <published>2020-10-21T03:23:46Z</published>
    <link href="https://waylonwalker.com/mmchougule-kedro-grpc-server/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out mmchougule and their project kedro-grpc-server.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/mmchougule&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mmchougule&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/mmchougule/kedro-grpc-server&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-grpc-server&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Kedro gRPC Server is a Kedro plugin that creates a gRPC server for triggering and monitoring pipeline runs using a general-purpose RPC framework gRPC&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ yetudada kedro-user-testing</title>
    <id>https://waylonwalker.com/yetudada-kedro-user-testing/</id>
    <updated>2020-10-21T03:23:29Z</updated>
    <published>2020-10-21T03:23:29Z</published>
    <link href="https://waylonwalker.com/yetudada-kedro-user-testing/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out yetudada and their project kedro-user-testing.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/yetudada&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;yetudada&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/yetudada/kedro-user-testing&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-user-testing&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Discovery prototypes for user testing&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ikamensh flynt</title>
    <id>https://waylonwalker.com/ikamensh-flynt/</id>
    <updated>2020-10-20T15:29:26Z</updated>
    <published>2020-10-20T15:29:26Z</published>
    <link href="https://waylonwalker.com/ikamensh-flynt/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on flynt by ikamensh.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/ikamensh/flynt&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;flynt&lt;/a&gt; by &lt;a href=&#34;https://github.com/ikamensh&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ikamensh&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A tool to automatically convert old string literal formatting to f-strings&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ charmbracelet glow</title>
    <id>https://waylonwalker.com/charmbracelet-glow/</id>
    <updated>2020-10-18T18:15:55Z</updated>
    <published>2020-10-18T18:15:55Z</published>
    <link href="https://waylonwalker.com/charmbracelet-glow/" rel="alternate" type="text/html"></link>
    <summary type="text">charmbracelet has done a fantastic job with glow. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/charmbracelet&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;charmbracelet&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/charmbracelet/glow&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;glow&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Render markdown on the CLI, with pizzazz! 💅🏻&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ mytechnotalent Python-For-Kids</title>
    <id>https://waylonwalker.com/mytechnotalent-python-for-kids/</id>
    <updated>2020-10-17T18:06:29Z</updated>
    <published>2020-10-17T18:06:29Z</published>
    <link href="https://waylonwalker.com/mytechnotalent-python-for-kids/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out mytechnotalent and their project Python-For-Kids.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/mytechnotalent&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mytechnotalent&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/mytechnotalent/Python-For-Kids&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Python-For-Kids&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A FREE comprehensive online Python development tutorial FOR KIDS utilizing an official BBC micro:bit Development Board going step-by-step into the world of Python for microcontrollers.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nnja pycon_pybadge_2020</title>
    <id>https://waylonwalker.com/nnja-pycon_pybadge_2020/</id>
    <updated>2020-10-17T15:20:21Z</updated>
    <published>2020-10-17T15:20:21Z</published>
    <link href="https://waylonwalker.com/nnja-pycon_pybadge_2020/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by pycon_2020 from nnja.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/nnja/pycon_pybadge_2020&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pycon_pybadge_2020&lt;/a&gt; from &lt;a href=&#34;https://github.com/nnja&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nnja&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Initial code for Microsoft’s PyBadge at PyCon 2020&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Fix git commit author</title>
    <id>https://waylonwalker.com/fix-git-commit-author/</id>
    <updated>2020-10-17T05:00:00Z</updated>
    <published>2020-10-17T05:00:00Z</published>
    <link href="https://waylonwalker.com/fix-git-commit-author/" rel="alternate" type="text/html"></link>
    <summary type="text">I was 20 commits into a hackoberfest PR when I suddenly realized they they all had my work email on them instead of my personal email 😱.</summary>
    <content type="html">&lt;p&gt;I was 20 commits into a hackoberfest PR when I suddenly realized they they all had my work email on them instead of my personal email 😱.  This is the story of how I corrected my email address on 19 individual commits after already submitting for a PR.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#change-the-email-for-this-repo&#34;&gt;Change the email for this repo&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#prepare-for-rebasing&#34;&gt;Prepare for rebasing&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#start-the-rebase&#34;&gt;start the rebase&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#fix-first-wrong-commit&#34;&gt;🛠 Fix First wrong Commit&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#fix-all-commits&#34;&gt;Fix all commits&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#done&#34;&gt;Done&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#recap&#34;&gt;ReCap&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;change-the-email-for-this-repo&#34;&gt;Change the email for this repo &lt;a href=&#34;#change-the-email-for-this-repo&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;stop the bleeding&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Before anything else set the email correctly!&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; kedro&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config user.name &lt;span class=&#34;s2&#34;&gt;&amp;#34;Waylon Walker&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config user.email quadmx08@gmail.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;prepare-for-rebasing&#34;&gt;Prepare for rebasing &lt;a href=&#34;#prepare-for-rebasing&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;First thing is to find how many commits back this mistake goes.  I opened up the &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; log, and saw mine went back 19 commits.  I rolled back 20 just to be sure.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git log&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;commit a355926b9d7ec4c05659adaa254beefbdb036332&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Author: WaylonWalker &amp;lt;email@work.com&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Date:   Sat Oct &lt;span class=&#34;m&#34;&gt;17&lt;/span&gt; 10:28:59 &lt;span class=&#34;m&#34;&gt;2020&lt;/span&gt; -0500&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    give name of &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; inside incorrect parameters error&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;commit 1756f5d121bd06c459560b2e982e0d7b6879e9ca&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Author: Kiyohito Kunii &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Kiyo&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &amp;lt;8097799+921kiyo@users.noreply.github.com&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Date:   Fri Oct &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; 15:33:09 &lt;span class=&#34;m&#34;&gt;2020&lt;/span&gt; +0100&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Fix docs reference &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; registering &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;pipelines&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;start-the-rebase&#34;&gt;start the rebase &lt;a href=&#34;#start-the-rebase&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now I start the rebase 20 commits back from HEAD.  THis will pop you into a text file with a list of commits, for this change simply replace all &lt;code&gt;pick&lt;/code&gt; with &lt;code&gt;edit&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git rebase -i HEAD~20&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;note-for-the-first-commit&#34;&gt;Note for the first commit &lt;a href=&#34;#note-for-the-first-commit&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you want to rebase back to the start of the repo use the &lt;code&gt;--root&lt;/code&gt; flag.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git rebase -i --root&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Run git log to see where we ended up.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git log&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;commit 1756f5d121bd06c459560b2e982e0d7b6879e9ca&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Author: Kiyohito Kunii &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Kiyo&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &amp;lt;8097799+921kiyo@users.noreply.github.com&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Date:   Fri Oct &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; 15:33:09 &lt;span class=&#34;m&#34;&gt;2020&lt;/span&gt; +0100&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Fix docs reference &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; registering &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;pipelines&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;As expected we ended up on Kiyo’s commit. So we can simply move forward without any edits.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git rebase --continue&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Stopped at e162ca7...  correct &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; name in tests&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;You can amend the commit now, with&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  git commit --amend&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Once you are satisfied with your changes, run&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  git rebase --continue&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;-fix-first-wrong-commit&#34;&gt;🛠 Fix First wrong Commit &lt;a href=&#34;#-fix-first-wrong-commit&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Checking the log again I an now on my first commit with a mistake.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git log&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;commit 95c209a740d6d0340e19a8fc36298cbf874f8bf7 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;HEAD&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Author: WaylonWalker &amp;lt;email@work.com&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Date:   Sat Oct &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; 11:59:44 &lt;span class=&#34;m&#34;&gt;2020&lt;/span&gt; -0500&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    correct &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; name in tests&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;commit cde2e8baa3c1c4a9f1da4135258381466b1da40a&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Author: Waylon Walker &amp;lt;quadmx08@gmail.com&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Date:   Sat Oct &lt;span class=&#34;m&#34;&gt;17&lt;/span&gt; 10:30:07 &lt;span class=&#34;m&#34;&gt;2020&lt;/span&gt; -0500&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    update tests&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;commit a355926b9d7ec4c05659adaa254beefbdb036332&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Author: Waylon Walker &amp;lt;quadmx08@gmail.com&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Date:   Sat Oct &lt;span class=&#34;m&#34;&gt;17&lt;/span&gt; 10:28:59 &lt;span class=&#34;m&#34;&gt;2020&lt;/span&gt; -0500&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    give name of &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; inside incorrect parameters error&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;commit 1756f5d121bd06c459560b2e982e0d7b6879e9ca&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Author: Kiyohito Kunii &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Kiyo&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &amp;lt;8097799+921kiyo@users.noreply.github.com&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Date:   Fri Oct &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; 15:33:09 &lt;span class=&#34;m&#34;&gt;2020&lt;/span&gt; +0100&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Fix docs reference &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; registering &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;pipelines&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Running the following command will reset the author on the current commit.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit --amend --reset-author&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Double check with a quick &lt;code&gt;git log&lt;/code&gt; that the author was fixed.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;commit ccaaa56059ee4554731fa83297ca9e8e387a7592 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;HEAD&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Author: Waylon Walker &amp;lt;quadmx08@gmail.com&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Date:   Sat Oct &lt;span class=&#34;m&#34;&gt;17&lt;/span&gt; 10:35:40 &lt;span class=&#34;m&#34;&gt;2020&lt;/span&gt; -0500&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    correct &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; name in tests&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;commit cde2e8baa3c1c4a9f1da4135258381466b1da40a&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Author: Waylon Walker &amp;lt;quadmx08@gmail.com&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Date:   Sat Oct &lt;span class=&#34;m&#34;&gt;17&lt;/span&gt; 10:30:07 &lt;span class=&#34;m&#34;&gt;2020&lt;/span&gt; -0500&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    update tests&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;commit a355926b9d7ec4c05659adaa254beefbdb036332&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Author: Waylon Walker &amp;lt;quadmx08@gmail.com&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Date:   Sat Oct &lt;span class=&#34;m&#34;&gt;17&lt;/span&gt; 10:28:59 &lt;span class=&#34;m&#34;&gt;2020&lt;/span&gt; -0500&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    give name of &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; inside incorrect parameters error&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;commit 1756f5d121bd06c459560b2e982e0d7b6879e9ca&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Author: Kiyohito Kunii &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Kiyo&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &amp;lt;8097799+921kiyo@users.noreply.github.com&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Date:   Fri Oct &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; 15:33:09 &lt;span class=&#34;m&#34;&gt;2020&lt;/span&gt; +0100&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Fix docs reference &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; registering &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;pipelines&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;fix-all-commits&#34;&gt;Fix all commits &lt;a href=&#34;#fix-all-commits&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now to do this for 18 other commits.  I found that chaining the three commands into a bash one-liner was quite helpful.  I turned off pre-commit hooks with &lt;code&gt;--no-verify&lt;/code&gt;.  I also turned off the &lt;code&gt;log&lt;/code&gt; pager by adding &lt;code&gt;--no-pager&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git rebase --continue &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;git commit --amend --reset-author --no-edit --no-verify &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;git --no-pager log -n &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;done&#34;&gt;Done &lt;a href=&#34;#done&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This was quick and easy for 19 commits.  I have tried to loop through changes like this in the past, and it does get a bit hairy.  I find its easier to just setup a one-liner and crank through them one by one.&lt;/p&gt;&#xA;&lt;h2 id=&#34;a-note-on-changing-history&#34;&gt;A note on changing history… &lt;a href=&#34;#a-note-on-changing-history&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Since this was done in a rebase it has changed the history of the repo.  This is ok to do only when you are the only person or are in close communication with everyone using the repo.  One thing I have ran into is that if you do this after you submit a PR, but before its completed it duplicates your commits in a merge.  For this particular change I simply closed the first PR and opened a second.  If someone has a better suggestion, I would be glad to know a better way.&lt;/p&gt;&#xA;&lt;h2 id=&#34;recap&#34;&gt;ReCap &lt;a href=&#34;#recap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; kedro&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config user.name &lt;span class=&#34;s2&#34;&gt;&amp;#34;Waylon Walker&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config user.email quadmx08@gmail.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git log&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git rebase -i HEAD~20&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git log&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git rebase --continue&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git log&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git rebase --continue &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; git commit --amend --reset-author --no-edit --no-verify &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; git --no-pager log -n &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ muesli duf</title>
    <id>https://waylonwalker.com/muesli-duf/</id>
    <updated>2020-10-11T15:42:27Z</updated>
    <published>2020-10-11T15:42:27Z</published>
    <link href="https://waylonwalker.com/muesli-duf/" rel="alternate" type="text/html"></link>
    <summary type="text">I like muesli&#39;s project duf.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/muesli&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;muesli’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/muesli/duf&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;duf&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Disk Usage/Free Utility - a better ‘df’ alternative&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Designing a &#34;Router&#34; for kedro</title>
    <id>https://waylonwalker.com/designing-kedro-router/</id>
    <updated>2020-10-08T05:00:00Z</updated>
    <published>2020-10-08T05:00:00Z</published>
    <link href="https://waylonwalker.com/designing-kedro-router/" rel="alternate" type="text/html"></link>
    <summary type="text">I released a router-like plugin for kedro back in April 2020. This was not the first design, the idea actually came from one of the QB folks who taught me...</summary>
    <content type="html">&lt;h2 id=&#34;nodes-global&#34;&gt;nodes_global &lt;a href=&#34;#nodes-global&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I released a router-like plugin for kedro back in April 2020.  This was not the first design, the idea actually came from one of the QB folks who taught me kedro nearly a year before.  We were assembling our pipelines with something called &lt;code&gt;nodes_global&lt;/code&gt;.  It worked fairly well but did have some issues around being set as a global variable.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;But…&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;One thing in particular that it did not lend itself well to was being able to create a packagable pipeline that I could pip install and append into any of my existing pipelines.  Something I am still trying to work out, maybe I don’t need this.  I think I have it working for our internal pipelines and it seems like the way to go, but we don’t necessarily end up using it.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Also…&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;With this pattern all of the nodes needed to be importable by the module containing nodes_global.  I find that this becomes a big hurdle for new pipelines coming from jupyter to overcome and can be most infuriating when their nodes aren’t getting ran after they added them.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/what-is-kedro/&#34; class=&#34;wikilink&#34; data-title=&#34;What is Kedro&#34; data-description=&#34;Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...&#34; data-date=&#34;2021-08-17&#34; data-preview=&#34;Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...&#34;&gt;What is Kedro&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If you are a bit unsure about what kedro is make sure to check out my &lt;a href=&#34;https://waylonwalker.com/what-is-kedro/&#34;&gt;what-is-kedro&lt;/a&gt; article.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;nodeinputsa-raw-cars-outputsb-int-cars&#34;&gt;@node(inputs=‘a_raw_cars’, outputs=‘b_int_cars’) &lt;a href=&#34;#nodeinputsa-raw-cars-outputsb-int-cars&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I set off to design something that was flask-like.  Around November I had something working.  You could simply start creating functions. and decorate these functions with a decorator just like with flask.  I even had it setup to autoname the nodes things like &lt;code&gt;create_b_int_cars&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;But….&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;This did not lend well to pulling in functions from a library or dynamically creating nodes.  I didn’t realize how few nodes I actually make in my pipelines that are a 1:1 relationship between the node and function in real work.  Most examples work this way, but for some reason when I step into a project we end up pulling a lot of functions out of existing libraries, or dynamically creating many datasets from a list of options.&lt;/p&gt;&#xA;&lt;h2 id=&#34;pytest-inspired&#34;&gt;pytest inspired &lt;a href=&#34;#pytest-inspired&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;simplicity&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The final design ended up being suggested by a colleague of mine who is not using kedro, but is a  brilliant python dev.  The idea was to walk through the project like pytest does looking for modules and variables with a certain pattern (&lt;code&gt;node&lt;/code&gt;, or &lt;code&gt;pipeline&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;p&gt;I have been using this since April and am loving it. It has have very little change since first release.  When I create a new module, that automatically becomes a new pipeline in my &lt;code&gt;pipelines&lt;/code&gt; dict and all of the variables with the name node get scrapped up and put into a single pipeline.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Beginner Friendly&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Just like with pytest.  You just start hacking in modules ending with &lt;code&gt;_nodes.py&lt;/code&gt; with nodes in them and they just appear in your final pipeline.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-to-use-it&#34;&gt;How to use it &lt;a href=&#34;#how-to-use-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://github.com/WaylonWalker/find-kedro&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;readme&lt;/a&gt; has some great examples.&lt;/p&gt;&#xA;&lt;h2 id=&#34;install-it&#34;&gt;Install it &lt;a href=&#34;#install-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;pip&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;install&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;find&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;enable-it&#34;&gt;Enable it &lt;a href=&#34;#enable-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Enable it by changing one line in your run.py&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;run.py&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.context&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;KedroContext&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;find_kedro&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;find_kedro&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;ProjectContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;KedroContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;_get_pipelines&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;find_kedro&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Or if your using the new &lt;code&gt;hooks.py&lt;/code&gt; method.  Again no need to import all of your nodes.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;hooks.py&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;ProjectHooks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@hook_impl&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;register_pipelines&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Register the project&amp;#39;s pipeline.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        Returns:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;            A mapping from a pipeline name to a ``Pipeline`` object.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;find_kedro&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;use-it&#34;&gt;Use it &lt;a href=&#34;#use-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Check out the &lt;a href=&#34;https://github.com/WaylonWalker/find-kedro&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;readme&lt;/a&gt; for more examples, but this one is the one that I use and recommend most often.  This method helps keep nodes close to functions that are designed for them.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;my_nodes.py&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# my-proj/pipelinies/data_engineering/pipeline&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.pipeline&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;.nodes&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;split_data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;split_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataFrame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ratio&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;float&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataFrame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;split_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;example_iris_data&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;params:example_test_data_ratio&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;train_x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;example_train_x&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;train_y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;example_train_y&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;test_x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;example_test_x&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;test_y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;example_test_y&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;want-a-simple-guide-to-get-started-with-find-kedro&#34;&gt;Want a simple guide to get started with find kedro &lt;a href=&#34;#want-a-simple-guide-to-get-started-with-find-kedro&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p style=&#34;text-align: center&#34; align=&#34;center&#34;&gt;&#xA;&lt;a href=&#34;https://find.kedro.dev/examples/iris/&#34;&gt;&#xA;  &lt;img class=&#34;glightbox&#34; style=&#34;width:400px; max-width:80%; border-radius: 35px; margin: auto;&#34; width=&#34;400&#34; src=&#34;https://images.waylonwalker.com/find-kedro-examples-iris.png&#34; alt=&#34;Find Kedro Iris example&#34;/ data-glightbox=&#34;description: Find Kedro Iris example&#34;&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;In &lt;a href=&#34;https://find.kedro.dev/examples/iris/&#34;&gt;this doc&lt;/a&gt; I transform the kedro iris template to find-kedro.&lt;/p&gt;&#xA;&lt;h2 id=&#34;ready-to-start-using-kedro&#34;&gt;Ready to start using kedro &lt;a href=&#34;#ready-to-start-using-kedro&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you still have not tried out kedro, it’s easier than you think. Check out &lt;a href=&#34;https://waylonwalker.com/create-new-kedro-project/&#34;&gt;create-new-kedro-project&lt;/a&gt; to get a project started in just a few minutes.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/create-new-kedro-project/&#34; class=&#34;wikilink&#34; data-title=&#34;Create New Kedro Project&#34; data-description=&#34;This is a quickstart to getting a new kedro pipeline up and running. After this article you should be able to understand how to get started with kedro. You...&#34; data-date=&#34;2020-03-02&#34; data-preview=&#34;This is a quickstart to getting a new kedro pipeline up and running. After this article you should be able to understand how to get started with kedro. You...&#34;&gt;Create New Kedro Project&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ AnkurDedania python_training</title>
    <id>https://waylonwalker.com/ankurdedania-python_training/</id>
    <updated>2020-10-02T19:59:12Z</updated>
    <published>2020-10-02T19:59:12Z</published>
    <link href="https://waylonwalker.com/ankurdedania-python_training/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across python_training from AnkurDedania, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/AnkurDedania/python_training&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;python_training&lt;/a&gt; from &lt;a href=&#34;https://github.com/AnkurDedania&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;AnkurDedania&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;Intro to Python&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ github renaming</title>
    <id>https://waylonwalker.com/github-renaming/</id>
    <updated>2020-10-01T14:59:51Z</updated>
    <published>2020-10-01T14:59:51Z</published>
    <link href="https://waylonwalker.com/github-renaming/" rel="alternate" type="text/html"></link>
    <summary type="text">github has done a fantastic job with renaming. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/github&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;github&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/github/renaming&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;renaming&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Guidance for changing the default branch name for GitHub repositories&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Reclaim memory usage in Jupyter</title>
    <id>https://waylonwalker.com/reset-ipython/</id>
    <updated>2020-10-01T05:00:00Z</updated>
    <published>2020-10-01T05:00:00Z</published>
    <link href="https://waylonwalker.com/reset-ipython/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I ran into an issue where we had a one-off script that just needed to work, but it was just chewing threw memory like nothing.</summary>
    <content type="html">&lt;p&gt;Today I ran into an issue where we had a one-off script that just needed to&#xA;work, but it was just chewing threw memory like nothing.&lt;/p&gt;&#xA;&lt;p&gt;It started with a colleague asking me How do I clear the memory in a Jupyter&#xA;notebook, these are the steps we took to debug the issue and free up some&#xA;memory in their notebook.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;How do I clear the memory in a Jupyter notebook?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;pre-check-the-status-of-memory&#34;&gt;Pre check the status of memory &lt;a href=&#34;#pre-check-the-status-of-memory&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There are a number of ways that you can check the amount of memory on your&#xA;system.  The easiest is not necessarily my first go to is free… literally&#xA;&lt;code&gt;free&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;check for free space&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ free -h&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;             total       used       free     shared    buffers     cached&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Mem:           15G        15G       150M         0B        59M       8.7G&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Generally my first go to is a bit more graphical, and not available on a stock&#xA;stystem, but far more useful…. &lt;code&gt;htop&lt;/code&gt;.  &lt;a href=&#34;https://htop.dev&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/htop.dev.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/htop.dev.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;&lt;code&gt;htop&lt;/code&gt;&lt;/a&gt; is a&#xA;terminal process explorer that shows cpu usage, mem usage, and running&#xA;processes.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;htop&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get install htop &lt;span class=&#34;c1&#34;&gt;# install it from your package repo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;htop&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/htop-2.0.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/htop-2.0.png&#34; alt=&#34;htop in use&#34;/ data-glightbox=&#34;description: htop in use&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;first-step-throw-more-swap-at-it&#34;&gt;First step throw more swap at it &lt;a href=&#34;#first-step-throw-more-swap-at-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Often before going through the process of getting a larger instance underneath&#xA;the notebook you can hobble home with a bit more swap file.  It may not be&#xA;pretty or fast, but gets the job done in a pinch.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;Check for free disk&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ du&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Filesystem      Size  Used Avail Use% Mounted on&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/dev/asdasd        200G   50G  150G   25% /&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Make sure you check your free disk space first, filling both memory and disk&#xA;can be bad news&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;make a swap file and activate it&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SWAPFILE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;~/swaps/swap1-50G&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir ~/swaps&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo fallocate -l 50G &lt;span class=&#34;nv&#34;&gt;$SWAPFILE&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chmod &lt;span class=&#34;m&#34;&gt;600&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$SWAPFILE&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkswap &lt;span class=&#34;nv&#34;&gt;$SWAPFILE&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo swapon &lt;span class=&#34;nv&#34;&gt;$SWAPFILE&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can see the results with either swapon or free.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo swapon --show&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;free -h&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p style=&#34;text-align: center&#34;&gt;&#xA;&lt;a href=&#34;https://linuxize.com/post/how-to-add-swap-space-on-ubuntu-20-04/&#34;&gt;&#xA;  &lt;img class=&#34;glightbox&#34; style=&#34;width:500px; max-width:80%; margin: auto;&#34; src=&#34;https://images.waylonwalker.com/linuxize-how-to-add-swap-space-on-ubuntu-20-04.jpg&#34; alt=&#34;How to Add Swap Space on Ubuntu 20.04&#34;/ data-glightbox=&#34;description: How to Add Swap Space on Ubuntu 20.04&#34;&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://linuxize.com/post/how-to-add-swap-space-on-ubuntu-20-04/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/linuxize.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/linuxize.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;linuxize how to add swap space on ubuntu 20.04&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;More details on creating swapfiles checkout&#xA;&lt;a href=&#34;https://linuxize.com/post/how-to-add-swap-space-on-ubuntu-20-04/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/linuxize.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/linuxize.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;linuxize&lt;/a&gt;.&#xA;It is my favorite linux tutorial site!&lt;/p&gt;&#xA;&lt;h2 id=&#34;refactor---functions&#34;&gt;Refactor - functions &lt;a href=&#34;#refactor---functions&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;keep big datasets inside functions returning aggregations&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Sometimes there is a clear quick and simple way to just let the python garbage&#xA;collector.  Often we pull in large datasets to create features then aggregate&#xA;them down into smaller datasets that can be then joined into other datasets.&#xA;This pattern of pulling in  &lt;code&gt;big_data&lt;/code&gt;, processing then aggregating can be a&#xA;simple one.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;let the garbage collector take care of big data&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;big_data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_big_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;smaller_data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;some&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;aggregation&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;smaller_data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If your notebook is following this type of pattern a simple &lt;code&gt;del&lt;/code&gt; won’t work&#xA;because ipython adds extra references to your &lt;code&gt;big_data&lt;/code&gt; that you didnt add.&#xA;These are things that enable features like &lt;code&gt;_&lt;/code&gt;, &lt;code&gt;__&lt;/code&gt;, &lt;code&gt;___&lt;/code&gt;, umong others.&lt;/p&gt;&#xA;&lt;h2 id=&#34;reset&#34;&gt;%reset &lt;a href=&#34;#reset&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;check out more on reset from the &lt;a href=&#34;https://ipython.readthedocs.io/en/stable/interactive/magics.html#magic-reset&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/ipython.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/ipython.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ipython docs&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The last resort I would lean on here is an &lt;code&gt;ipython&lt;/code&gt; specific feature &lt;code&gt;%reset&lt;/code&gt;&#xA;and &lt;code&gt;%reset_selective&lt;/code&gt;.  These will flush out all user define variables or&#xA;selecive ones based on a regex respectively.&lt;/p&gt;&#xA;&lt;p&gt;Following two example are directly from the &lt;a href=&#34;https://ipython.readthedocs.io/en/stable/interactive/magics.html#magic-reset&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/ipython.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/ipython.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ipython docs&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;%reset&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;a&amp;#39;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_ipython&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;user_ns&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;9&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;reset&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;a&amp;#39;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_ipython&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;user_ns&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;reset&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Flushing&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;history&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;reset&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dhist&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Flushing&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;history&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Flushing&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;history&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;%reset_selective&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;In [2]: a=1; b=2; c=3; b1m=4; b2m=5; b3m=6; b4m=7; b2s=8&#xA;&#xA;In [3]: who_ls&#xA;Out[3]: [&amp;#39;a&amp;#39;, &amp;#39;b&amp;#39;, &amp;#39;b1m&amp;#39;, &amp;#39;b2m&amp;#39;, &amp;#39;b2s&amp;#39;, &amp;#39;b3m&amp;#39;, &amp;#39;b4m&amp;#39;, &amp;#39;c&amp;#39;]&#xA;&#xA;In [4]: %reset_selective -f b[2-3]m&#xA;&#xA;In [5]: who_ls&#xA;Out[5]: [&amp;#39;a&amp;#39;, &amp;#39;b&amp;#39;, &amp;#39;b1m&amp;#39;, &amp;#39;b2s&amp;#39;, &amp;#39;b4m&amp;#39;, &amp;#39;c&amp;#39;]&#xA;&#xA;In [6]: %reset_selective -f d&#xA;&#xA;In [7]: who_ls&#xA;Out[7]: [&amp;#39;a&amp;#39;, &amp;#39;b&amp;#39;, &amp;#39;b1m&amp;#39;, &amp;#39;b2s&amp;#39;, &amp;#39;b4m&amp;#39;, &amp;#39;c&amp;#39;]&#xA;&#xA;In [8]: %reset_selective -f c&#xA;&#xA;In [9]: who_ls&#xA;Out[9]: [&amp;#39;a&amp;#39;, &amp;#39;b&amp;#39;, &amp;#39;b1m&amp;#39;, &amp;#39;b2s&amp;#39;, &amp;#39;b4m&amp;#39;]&#xA;&#xA;In [10]: %reset_selective -f b&#xA;&#xA;In [11]: who_ls&#xA;Out[11]: [&amp;#39;a&amp;#39;]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;develop-faster-utilizing-autoreload-in-ipython&#34;&gt;Develop faster utilizing autoreload in ipython &lt;a href=&#34;#develop-faster-utilizing-autoreload-in-ipython&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The above tips will help you reclaim used memory in ipython, but the following&#xA;tip is one that single handedly is the reason I use Ipython for faster&#xA;development over anything else.&lt;/p&gt;&#xA;&lt;p style=&#34;text-align: center&#34;&gt;&#xA;&lt;a href=&#34;https://waylonwalker.com/autoreload-ipython/&#34;&gt;&#xA;  &lt;img class=&#34;glightbox&#34; style=&#34;width:500px; max-width:80%; margin: auto;&#34; src=&#34;https://images.waylonwalker.com/autoreload-ipython-rm.png&#34; alt=&#34;Autoreload in Ipython&#34;/ data-glightbox=&#34;description: Autoreload in Ipython&#34;&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/autoreload-ipython/&#34;&gt;autoreload-ipython&lt;/a&gt; one of my biggest productivity boosts.&lt;/p&gt;&#xA;&lt;h2 id=&#34;want-automatic-imports&#34;&gt;Want automatic imports?? &lt;a href=&#34;#want-automatic-imports&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/pyflyby/&#34; class=&#34;wikilink&#34; data-title=&#34;Smoother Python with automatic imports | pyflyby&#34; data-description=&#34;This is not a flaky works half the time kind of plugin, it&amp;#39;s a seriously smooth editing experience. I&amp;#39;ve just started using pyflyby, and it is solid so far....&#34; data-date=&#34;2021-12-20&#34; data-preview=&#34;This is not a flaky works half the time kind of plugin, it&amp;#39;s a seriously smooth editing experience. I&amp;#39;ve just started using pyflyby, and it is solid so far....&#34;&gt;Smoother Python with automatic imports | pyflyby&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This article covers how I setup automatic imports in ipython&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Strip Trailing Whitespace from Git projects</title>
    <id>https://waylonwalker.com/strip-trailing-whitespace/</id>
    <updated>2020-09-30T05:00:00Z</updated>
    <published>2020-09-30T05:00:00Z</published>
    <link href="https://waylonwalker.com/strip-trailing-whitespace/" rel="alternate" type="text/html"></link>
    <summary type="text">A common linting error thrown by various linters is for trailing whitespace. I most often use flake8. I generally have pre-commit hooks setup to strip this,...</summary>
    <content type="html">&lt;p&gt;A common linting error thrown by various linters is for trailing whitespace.  I&#xA;most often use flake8.  I generally have&#xA;[pre-commit](&lt;a href=&#34;https://waylonwalker.com/pre-commit-is-awesome/&#34;&gt;https://waylonwalker.com/pre-commit-is-awesome&lt;/a&gt;&#xA;hooks setup to strip this,&#xA;but sometimes I run into situations where I jump into a project without it, and&#xA;my editor lights up with errors.  A simple fix is to run this one-liner.&lt;/p&gt;&#xA;&lt;h2 id=&#34;one-liner-to-strip-whitespace&#34;&gt;One-Liner to strip whitespace &lt;a href=&#34;#one-liner-to-strip-whitespace&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;bash&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git grep -I --name-only -z -e &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -0 sed -i -e &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/[ \t]\+\(\r\?\)$/\1/&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p style=&#34;text-align: center&#34; align=&#34;center&#34;&gt;&#xA;&lt;a href=&#34;https://waylonwalker.com/pre-commit-is-awesome&#34;&gt;&#xA;  &lt;img class=&#34;glightbox&#34; style=&#34;width:400px; max-width:80%; margin: auto;&#34; width=&#34;400&#34; src=&#34;https://images.waylonwalker.com/pre-commit-is-awesome.png&#34; alt=&#34;pre-commit article&#34;/ data-glightbox=&#34;description: pre-commit article&#34;&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;read more about how  &lt;a href=&#34;/pre-commit-is-awesome/&#34; class=&#34;wikilink&#34; data-title=&#34;pre-commit is awesome&#34; data-description=&#34;I recently discovered the ✨ awesomeness that is pre-commit. I steered away from it for so long because it seemed like a big daunting thing to set up, but...&#34; data-date=&#34;2020-06-05&#34; data-preview=&#34;I recently discovered the ✨ awesomeness that is pre-commit. I steered away from it for so long because it seemed like a big daunting thing to set up, but...&#34;&gt;pre-commit is awesome&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tpope vim-sleuth</title>
    <id>https://waylonwalker.com/tpope-vim-sleuth/</id>
    <updated>2020-09-29T19:19:54Z</updated>
    <published>2020-09-29T19:19:54Z</published>
    <link href="https://waylonwalker.com/tpope-vim-sleuth/" rel="alternate" type="text/html"></link>
    <summary type="text">tpope has done a fantastic job with vim-sleuth. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/tpope&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tpope&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/tpope/vim-sleuth&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vim-sleuth&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;sleuth.vim: Heuristically set buffer options&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ actions setup-python</title>
    <id>https://waylonwalker.com/actions-setup-python/</id>
    <updated>2020-09-29T01:50:50Z</updated>
    <published>2020-09-29T01:50:50Z</published>
    <link href="https://waylonwalker.com/actions-setup-python/" rel="alternate" type="text/html"></link>
    <summary type="text">actions has done a fantastic job with setup-python. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/actions&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;actions&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/actions/setup-python&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;setup-python&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Set up your GitHub Actions workflow with a specific version of Python&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ actions starter-workflows</title>
    <id>https://waylonwalker.com/actions-starter-workflows/</id>
    <updated>2020-09-29T01:50:38Z</updated>
    <published>2020-09-29T01:50:38Z</published>
    <link href="https://waylonwalker.com/actions-starter-workflows/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across starter-workflows from actions, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/actions/starter-workflows&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;starter-workflows&lt;/a&gt; from &lt;a href=&#34;https://github.com/actions&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;actions&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;Accelerating new GitHub Actions workflows&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ actions checkout</title>
    <id>https://waylonwalker.com/actions-checkout/</id>
    <updated>2020-09-29T01:50:21Z</updated>
    <published>2020-09-29T01:50:21Z</published>
    <link href="https://waylonwalker.com/actions-checkout/" rel="alternate" type="text/html"></link>
    <summary type="text">checkout by actions is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/actions/checkout&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;checkout&lt;/a&gt; by &lt;a href=&#34;https://github.com/actions&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;actions&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;Action for checking out a repo&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nicknisi dotfiles</title>
    <id>https://waylonwalker.com/nicknisi-dotfiles/</id>
    <updated>2020-09-27T19:52:33Z</updated>
    <published>2020-09-27T19:52:33Z</published>
    <link href="https://waylonwalker.com/nicknisi-dotfiles/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? dotfiles by nicknisi.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/nicknisi/dotfiles&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dotfiles&lt;/a&gt; by &lt;a href=&#34;https://github.com/nicknisi&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nicknisi&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;vim, zsh, &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt;, homebrew, neovim - my whole world&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ sirupsen zk</title>
    <id>https://waylonwalker.com/sirupsen-zk/</id>
    <updated>2020-09-15T20:35:30Z</updated>
    <published>2020-09-15T20:35:30Z</published>
    <link href="https://waylonwalker.com/sirupsen-zk/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred zk by sirupsen. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/sirupsen/zk&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;zk&lt;/a&gt; by &lt;a href=&#34;https://github.com/sirupsen&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sirupsen&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;Zettelkasten on the command-line 📚 🔍&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ sirupsen napkin-math</title>
    <id>https://waylonwalker.com/sirupsen-napkin-math/</id>
    <updated>2020-09-15T18:33:33Z</updated>
    <published>2020-09-15T18:33:33Z</published>
    <link href="https://waylonwalker.com/sirupsen-napkin-math/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on napkin-math by sirupsen.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/sirupsen/napkin-math&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;napkin-math&lt;/a&gt; by &lt;a href=&#34;https://github.com/sirupsen&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sirupsen&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Techniques and numbers for estimating system’s performance from first-principles&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ deepyaman kedro-accelerator</title>
    <id>https://waylonwalker.com/deepyaman-kedro-accelerator/</id>
    <updated>2020-09-15T13:24:39Z</updated>
    <published>2020-09-15T13:24:39Z</published>
    <link href="https://waylonwalker.com/deepyaman-kedro-accelerator/" rel="alternate" type="text/html"></link>
    <summary type="text">deepyaman has done a fantastic job with kedro-accelerator. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/deepyaman&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;deepyaman&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/deepyaman/kedro-accelerator&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-accelerator&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Kedro-Accelerator speeds up pipelines by parallelizing I/O in the background.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Chrome Extensions I use</title>
    <id>https://waylonwalker.com/chrome-extensions-i-use/</id>
    <updated>2020-09-13T05:00:00Z</updated>
    <published>2020-09-13T05:00:00Z</published>
    <link href="https://waylonwalker.com/chrome-extensions-i-use/" rel="alternate" type="text/html"></link>
    <summary type="text">There are many useful chrome extensions out there. I probably have way too many installed, here are four that I am currently using.</summary>
    <content type="html">&lt;p&gt;There are many useful chrome extensions out there.  I probably have way too many installed, here are four that I am currently using.&lt;/p&gt;&#xA;&lt;p&gt;This post was inspired from Chris over at &lt;a href=&#34;https://daily-dev-tips.com/posts/top-10-chrome-extensions-for-developers/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/daily-dev-tips.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/daily-dev-tips.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;daily-dev-tips&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#lastpass&#34;&gt;LastPass&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#stylus&#34;&gt;Stylus&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#vimium&#34;&gt;Vimium&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#hypothesis&#34;&gt;hypothesis&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;lastpasshttpschromegooglecomwebstoredetaillastpass-free-password-mahdokiejnpimakedhajhdlcegeplioahdhlen&#34;&gt;&lt;a href=&#34;https://chrome.google.com/webstore/detail/lastpass-free-password-ma/hdokiejnpimakedhajhdlcegeplioahd?hl=en&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/chrome.google.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/chrome.google.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;LastPass&lt;/a&gt; &lt;a href=&#34;#lastpasshttpschromegooglecomwebstoredetaillastpass-free-password-mahdokiejnpimakedhajhdlcegeplioahdhlen&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Love it or hate it passwords are hard to manage.  Everyone needs a password manager to avoid the dreaded password reuse, and to be able to quickly rotate them with a service.  I use lastpass, thus it’s browser extension is my most used extension.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://chrome.google.com/webstore/detail/lastpass-free-password-ma/hdokiejnpimakedhajhdlcegeplioahd?hl=en&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/chrome-extension-lastpass.png&#34; alt=&#34;lastpass&#34;/ data-glightbox=&#34;description: lastpass&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;stylushttpschromegooglecomwebstoredetailstylusclngdbkpkpeebahjckkjfobafhncgmnehlen&#34;&gt;&lt;a href=&#34;https://chrome.google.com/webstore/detail/stylus/clngdbkpkpeebahjckkjfobafhncgmne?hl=en&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/chrome.google.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/chrome.google.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Stylus&lt;/a&gt; &lt;a href=&#34;#stylushttpschromegooglecomwebstoredetailstylusclngdbkpkpeebahjckkjfobafhncgmnehlen&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Stylus is an extension that allows you to add your own CSS to style pages how you want.  There seems to be a full community of folks that really use this to the nth degree to style all of their commonly used sites somewhat similarly or add dark mode to sites without it.&lt;/p&gt;&#xA;&lt;p&gt;Personally I mostly use it to add my favorite syntax highlighting theme to jupyter, &lt;strong&gt;onedark&lt;/strong&gt;.  I’ve long lost the original author, but have posted the CSS I use in this &lt;a href=&#34;https://gist.github.com/WaylonWalker/b082bda9c1ce1471ea0c940c836e5714&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/gist.github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/gist.github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gist&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://chrome.google.com/webstore/detail/stylus/clngdbkpkpeebahjckkjfobafhncgmne?hl=en&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/chrome-extension-stylus.png&#34; alt=&#34;lastpass&#34;/ data-glightbox=&#34;description: lastpass&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;vimiumhttpschromegooglecomwebstoredetailvimiumdbepggeogbaibhgnhhndojpepiihcmebhlen&#34;&gt;&lt;a href=&#34;https://chrome.google.com/webstore/detail/vimium/dbepggeogbaibhgnhhndojpepiihcmeb?hl=en&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/chrome.google.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/chrome.google.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Vimium&lt;/a&gt; &lt;a href=&#34;#vimiumhttpschromegooglecomwebstoredetailvimiumdbepggeogbaibhgnhhndojpepiihcmebhlen&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Vimium adds vim-like keybindings to chrome.  I don’t use it a ton but it comes in handy to fully utilize the keyboard on some sites that aren’t well suited to keyboard use.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://chrome.google.com/webstore/detail/vimium/dbepggeogbaibhgnhhndojpepiihcmeb?hl=en&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/chrome-extension-vimium.png&#34; alt=&#34;vimium&#34;/ data-glightbox=&#34;description: vimium&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;hypothesishttpschromegooglecomwebstoredetailhypothesis-web-pdf-annotabjfhmglciegochdpefhhlphglcehbmekhlen&#34;&gt;&lt;a href=&#34;https://chrome.google.com/webstore/detail/hypothesis-web-pdf-annota/bjfhmglciegochdpefhhlphglcehbmek?hl=en&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/chrome.google.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/chrome.google.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;hypothesis&lt;/a&gt; &lt;a href=&#34;#hypothesishttpschromegooglecomwebstoredetailhypothesis-web-pdf-annotabjfhmglciegochdpefhhlphglcehbmekhlen&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Hypothesis is a notetaking app that I am trying to get on board with.  I like that they have a REST API to get your notes from. It allows you to take notes or highlight web pages and share them easily.  I am still trying to remember to use this one more.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://chrome.google.com/webstore/detail/hypothesis-web-pdf-annota/bjfhmglciegochdpefhhlphglcehbmek?hl=en&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/chrome-extension-hypothesis.png&#34; alt=&#34;hypothesis&#34;/ data-glightbox=&#34;description: hypothesis&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;These are my most used extensions.  What are yours?&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ WaylonWalker find-kedro</title>
    <id>https://waylonwalker.com/waylonwalker-find-kedro/</id>
    <updated>2020-09-04T17:58:53Z</updated>
    <published>2020-09-04T17:58:53Z</published>
    <link href="https://waylonwalker.com/waylonwalker-find-kedro/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on find-kedro by WaylonWalker.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/WaylonWalker/find-kedro&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;find-kedro&lt;/a&gt; by &lt;a href=&#34;https://github.com/WaylonWalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;WaylonWalker&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;kedro plugin to automatically construct pipelines using pytest style pattern matching&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ WaylonWalker steel-toes</title>
    <id>https://waylonwalker.com/waylonwalker-steel-toes/</id>
    <updated>2020-09-04T17:58:38Z</updated>
    <published>2020-09-04T17:58:38Z</published>
    <link href="https://waylonwalker.com/waylonwalker-steel-toes/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? steel-toes by WaylonWalker.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/WaylonWalker/steel-toes&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;steel-toes&lt;/a&gt; by &lt;a href=&#34;https://github.com/WaylonWalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;WaylonWalker&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;a kedro hook to protect against breaking changes to data&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ htop-dev htop</title>
    <id>https://waylonwalker.com/htop-dev-htop/</id>
    <updated>2020-09-01T20:48:47Z</updated>
    <published>2020-09-01T20:48:47Z</published>
    <link href="https://waylonwalker.com/htop-dev-htop/" rel="alternate" type="text/html"></link>
    <summary type="text">I like htop-dev&#39;s project htop.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/htop-dev&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;htop-dev’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/htop-dev/htop&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;htop&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;htop - an interactive process viewer&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Creating Reusable Bash Scripts</title>
    <id>https://waylonwalker.com/reusable-bash/</id>
    <updated>2020-08-13T05:00:00Z</updated>
    <published>2020-08-13T05:00:00Z</published>
    <link href="https://waylonwalker.com/reusable-bash/" rel="alternate" type="text/html"></link>
    <summary type="text">Bash is a language that is quite useful for automation no matter what language you write in. Bash can do so many powerful system-level tasks. Even if you are...</summary>
    <content type="html">&lt;p&gt;Bash is a language that is quite useful for automation no matter what language&#xA;you write in. Bash can do so many powerful system-level tasks. Even if you are&#xA;on windows these days you are likely to come across bash inside a cloud VM,&#xA;Continuous Integration, or even inside of docker.&lt;/p&gt;&#xA;&lt;p&gt;I have three techniques that help me write more composable bash scripts.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#functions&#34;&gt;functions&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#arguments&#34;&gt;Arguments&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#positional-arguments&#34;&gt;positional arguments&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#all-arguments&#34;&gt;All Arguments&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#error-handling&#34;&gt;Error Handling&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#main-script&#34;&gt;main script&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;functions&#34;&gt;Functions &lt;a href=&#34;#functions&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Break scripts down into reusable components&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Functions in bash are quite simple. They are something that I wish I would have&#xA;started using long ago. They make your code much more reusable. I often use&#xA;them in my aliases as well since they can simplify the process and allow more&#xA;flexibility.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;syntax&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# hello_world&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hello_world &lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hello world&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Source the file to load the function and run it from the terminal.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;run it&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; hello_world&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hello_world&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;outputs&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hello world&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;arguments&#34;&gt;Arguments &lt;a href=&#34;#arguments&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Make functions a little more flexible&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Arguments and options are quite a bit more complex in bash. For now, we will&#xA;focus on the basics which are not all that bad.&lt;/p&gt;&#xA;&lt;h3 id=&#34;positional-arguments&#34;&gt;positional arguments &lt;a href=&#34;#positional-arguments&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;easiest and most common to use&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Positional arguments can be pulled out quite easily using &lt;code&gt;$1&lt;/code&gt; for the first&#xA;one, &lt;code&gt;$2&lt;/code&gt; for the second, and so on.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;note&lt;/strong&gt; &lt;code&gt;$0&lt;/code&gt; is the command that was called. You will see this often used to&#xA;find the command called to open up your current shell.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;syntax&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# hello&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hello &lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hello &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;run it&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; hello&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hello Waylon&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now we have a function that accepts positional arguments and we can call it by&#xA;passing things into it.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;outputs&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hello Waylon&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;More than one argument would be ignored since we are only looking at &lt;code&gt;$1&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;run it&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; hello&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hello Waylon Walker&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;outputs&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hello Waylon&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Just the same as before since we do not use the second argument.&lt;/p&gt;&#xA;&lt;h3 id=&#34;all-arguments&#34;&gt;All Arguments &lt;a href=&#34;#all-arguments&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Bash has another special variable &lt;code&gt;$@&lt;/code&gt; that stores &lt;strong&gt;all arguments&lt;/strong&gt; in one.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;syntax&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# hello&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hello &lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hello &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Just the same as before.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;run it&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; hello&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hello Waylon Walker&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now the function will output all arguments that are passed into it since we are using the &lt;code&gt;$@&lt;/code&gt; variable.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;outputs&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hello Waylon Walker&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;error-handling&#34;&gt;Error Handling &lt;a href=&#34;#error-handling&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Super powers in a single line&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The easiest and most common way to handle an error in bash is through the use&#xA;of the logical operators &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; (and) and &lt;code&gt;||&lt;/code&gt; (or).&lt;/p&gt;&#xA;&lt;p&gt;Here I have a concrete example from earlier today. I was creating a bash script&#xA;to run a python script from cron. The bash script is there to make sure that we&#xA;have the python environment, activate it, and run. If it doesn’t have it, it&#xA;should create it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# creates the conda environment&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;create_env&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    conda create -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;3.8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    conda activate &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    pip install -r requirements.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# checks if the conda environment exists&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;env_exists&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda info --envs &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $1}&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tail -n +3 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -w &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt; /dev/null&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# creates the conda environment if it doesn&amp;#39;t exist&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;create_if &lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;env_exists &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;environment exists&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; create_env &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;create_if my_env&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If we look at the &lt;code&gt;create_if&lt;/code&gt; function, it will check if the environment exists&#xA;if there is a passing status code &lt;code&gt;0&lt;/code&gt;, then it will run &lt;code&gt;echo &amp;#34;environment exists&amp;#34;&lt;/code&gt; otherwise it will run &lt;code&gt;create_env $1&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;note&lt;/strong&gt; Inside of &lt;code&gt;env_exists&lt;/code&gt; grep will look for whole words if there is a&#xA;match it will give a status code 0 if it finds a match and not 0 if there is no&#xA;match.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;main-script&#34;&gt;main script &lt;a href=&#34;#main-script&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;_&lt;code&gt;if __name__ == &amp;#34; __main__&amp;#34;&lt;/code&gt;_&lt;/p&gt;&#xA;&lt;p&gt;The last thing I want to discuss is making a bash script both runnable and&#xA;sourceable. This makes it so that you can &lt;code&gt;source filename.sh&lt;/code&gt; and run each&#xA;function individually, or &lt;code&gt;bash filename.sh&lt;/code&gt; to run the script. This is a&#xA;similar concept to &lt;code&gt;if __name__ == &amp;#34; __main__&amp;#34;&lt;/code&gt; from python.&lt;/p&gt;&#xA;&lt;p&gt;I did try this from bash and zsh with success. The following is an example that&#xA;would pass all arguments into a main function.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;syntax&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;BASH_SOURCE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[0]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    main &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Extending the example above that created a python example if necessary we can&#xA;create the env if necessary, activate the environment, and run the script.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;syntax&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;BASH_SOURCE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[0]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;create_if my_env&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda activate my_env&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python script.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Using this syntax to run our “main” functions will allow us to both runs the&#xA;script or source the script to utilize the functions that we created.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Three things to Automate with Python using Pandas</title>
    <id>https://waylonwalker.com/3-things-to-automate-with-python/</id>
    <updated>2020-08-11T05:00:00Z</updated>
    <published>2020-08-11T05:00:00Z</published>
    <link href="https://waylonwalker.com/3-things-to-automate-with-python/" rel="alternate" type="text/html"></link>
    <summary type="text">Here are three things that I see my non programming counterparts doing every single day. These really sum up so much of what folks do within an office. So...</summary>
    <content type="html">&lt;p&gt;Here are three things that I see my non programming counterparts doing every single day.  These really sum up so much of what folks do within an office.  So many of us dabble in or become power users of spreadsheets without knowing there is an alternative out there that can save us time, automate boring things, and allow us to open up our minds for the part that we add value, Thinking about the data.&lt;/p&gt;&#xA;&lt;h2 id=&#34;focus-on-value-add-operations&#34;&gt;Focus on Value Add Operations &lt;a href=&#34;#focus-on-value-add-operations&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Lets face it, stitching together spreadsheets is zero value add by itself, but if you can see something in the data and take action on it, this can be huge value add to your company. Learning just a bit of python will help focus more of your attention on “value add operations” and leave the mundane stuff to your computer.&lt;/p&gt;&#xA;&lt;h2 id=&#34;merge-a-directory-full-of-spreadsheets-into-one&#34;&gt;Merge a directory full of spreadsheets into one &lt;a href=&#34;#merge-a-directory-full-of-spreadsheets-into-one&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I see this one all the time.  One team gets a spreadsheet from another team once per month and they need to stich all the pieces together.  Excel really opens the door for some nasty hidden bugs in your manually stiched together data.  It also takes time out of your day that you dont need to spend.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pandas&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pd&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pathlib&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;files&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;glob&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;raw/*.csv&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;csvs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read_csv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;files&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;csvs_combined&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;concat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;csvs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;csvs_combined&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to_csv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;processed/combined.csv&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;fetch-data-from-a-url&#34;&gt;Fetch data from a url &lt;a href=&#34;#fetch-data-from-a-url&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It might be possible that the other team shares their data on a website.  If you can get access to the data via a url, as in the example below there is no need to go to the website to save the data every week/month, you can have python do that for you.  It’s very likely that you will need to combine this with step one in many workflows.  Now your data compiling can be done in one single running of a script.  Your data is still in a format that excel can read and you can stick with a hybrid workflow while you become comfortable in python.&lt;/p&gt;&#xA;&lt;p&gt;There is no shame in opening excel to do something in 5 minutes that would take an hour of research to do in python.  If you stick to it though, piece by piece everything will come together.  You will be able to do more in python than you could imagine in excel and you will wonder how you did it without the help of python.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pandas&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pd&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cars_url&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://www.kaggle.com/abineshkumark/carsdata/download/xrvGk4JtQZJZetxwsCCy&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%2F&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;versions&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%2F&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;l2HR9tTLKz8MzHMAjBcl&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%2F&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;files&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%2F&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;cars.csv?datasetVersionNumber=1&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cars&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read_csv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cars_url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cars&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to_csv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;cars.csv&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;fetch-data-from-a-database&#34;&gt;Fetch data from a database &lt;a href=&#34;#fetch-data-from-a-database&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This one can be a bit trickier, often requires hunting down tables that are undocumented. Getting access, and figuring out the crednetials.  If you can get over that hump though it is likely that you will have access to several data source that you typically use in one place.  From there you can learn how to join them together to create powerful workflows.&lt;/p&gt;&#xA;&lt;p&gt;SQL can be a very daunting language to learn but if you spend an hour with it you will know enough to at least get the data into python or excel.  You can continue to hone your sql skills and move more of your aggregation/analysis into the database for better performance.  If you are asking for 1M rows for a 10 row report the efficiency gains of doing that aggregation in the database and not sending 1M rows over the wire can be immense.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pandas&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pd&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;sqlalchemy&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;create&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;engine&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;engine&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;create_engine&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;postgresql://scott:tiger@localhost:5432/mydatabase&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sql&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;select * from inventory&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;engine&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;inventory&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read_sql&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sql&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;con&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;engine&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dispose&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;inventory&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to_csv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;cars&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;learning-to-automate-has-value&#34;&gt;Learning to automate has value &lt;a href=&#34;#learning-to-automate-has-value&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I often see folks joking that developers will spend 10 minutes to automate a 1 minute task that they will only ever do once.  There is definitely a limit to when your time is more valueable just doing the task and moving on, but as you hone your skills you will get much faster.&lt;/p&gt;&#xA;&lt;p&gt;Things that needed research slowly become intuitive.  Things that used to be brain twisting 50 lines can be an easy to read 12.&lt;/p&gt;&#xA;&lt;p&gt;Slowly you get better.&lt;/p&gt;&#xA;&lt;p&gt;Things that were unfeasible become part of your wheelhouse.&lt;/p&gt;&#xA;&lt;p&gt;Give value to the learning process of automating tasks.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>How to Install miniconda on linux (from the command line only)</title>
    <id>https://waylonwalker.com/install-miniconda/</id>
    <updated>2020-08-10T05:00:00Z</updated>
    <published>2020-08-10T05:00:00Z</published>
    <link href="https://waylonwalker.com/install-miniconda/" rel="alternate" type="text/html"></link>
    <summary type="text">Installing miniconda from only the command line can be a bit of an intimidating task your first time. Lets walk through how to do it.</summary>
    <content type="html">&lt;p&gt;miniconda is a python distribution from continuum. It’s a slimmed-down version of their very popular anaconda distribution. It comes with its own environment manager and has eased the install process for many that do not have a way to compile c-extensions. It made it much easier to install the data science stack on windows a few years ago. These days windows are much better than it was back then at compiling c-extensions. I still like its environment manager, which installs to a global directory rather than a local directory for your project.&lt;/p&gt;&#xA;&lt;h2 id=&#34;installing-miniconda-on-linux&#34;&gt;Installing miniconda on Linux &lt;a href=&#34;#installing-miniconda-on-linux&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Installing miniconda on Linux can be a bit tricky the first time you do it completely from the terminal. The following snippet will create a directory to install miniconda into, download the latest python 3 based install script for Linux 64 bit, run the install script, delete the install script, then add a conda initialize to your bash or zsh shell. After doing this you can restart your shell and conda will be ready to go.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p ~/miniconda3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -rf ~/miniconda3/miniconda.sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/miniconda3/bin/conda init bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/miniconda3/bin/conda init zsh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;options&#34;&gt;Options &lt;a href=&#34;#options&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The miniconda.sh script comes with a few basic options.  Most notably we used &lt;code&gt;-b&lt;/code&gt; to be able to run unattended, which means that all of the agreements are automatically accepted without user prompt.  &lt;code&gt;-u&lt;/code&gt; updates any existing installation in the directory of install if there is one. &lt;code&gt;-p&lt;/code&gt; is the directory to install into.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;usage: /root/miniconda3/miniconda.sh [options]&#xA;&#xA;Installs Miniconda3 4.6.14&#xA;&#xA;-b           run install in batch mode (without manual intervention),&#xA;             it is expected the license terms are agreed upon&#xA;-f           no error if install prefix already exists&#xA;-h           print this help message and exit&#xA;-p PREFIX    install prefix, defaults to /root/miniconda3, must not contain spaces.&#xA;-s           skip running pre/post-link/install scripts&#xA;-u           update an existing installation&#xA;-t           run package tests after installation (may install conda-build)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;silentlogged&#34;&gt;Silent/Logged &lt;a href=&#34;#silentlogged&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;A quick and easy way to silence everything or to log it to a file during an automated install is to wrap the script into a bash function, or save it to its own file, and call the file.  I like the function method since I can still copy it right into a terminal, or keep my install script as one single file.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;install_miniconda &lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p ~/miniconda3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -rf ~/miniconda3/miniconda.sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/miniconda3/bin/conda init bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/miniconda3/bin/conda init zsh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;normal&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;install_miniconda&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;silent&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;install_miniconda &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;logged&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;install_miniconda &amp;gt; miniconda_install.log 2&amp;gt;&amp;amp;1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/reusable-bash/&#34; class=&#34;wikilink&#34; data-title=&#34;Creating Reusable Bash Scripts&#34; data-description=&#34;Bash is a language that is quite useful for automation no matter what language you write in. Bash can do so many powerful system-level tasks. Even if you are...&#34; data-date=&#34;2020-08-13&#34; data-preview=&#34;Bash is a language that is quite useful for automation no matter what language you write in. Bash can do so many powerful system-level tasks. Even if you are...&#34;&gt;Creating Reusable Bash Scripts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This posts covers more ways to write reuable bash scripts&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;cross-posted-to-dev&#34;&gt;Cross posted to DEV &lt;a href=&#34;#cross-posted-to-dev&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Check out this post and many more on &lt;a href=&#34;https://dev.to/waylonwalker/installing-miniconda-on-linux-from-the-command-line-4ad7&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/dev.to.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/dev.to.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dev.to/waylonwalker&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>How to crush amazing posts on DEV</title>
    <id>https://waylonwalker.com/crush-dev-to-posts/</id>
    <updated>2020-08-07T05:00:00Z</updated>
    <published>2020-08-07T05:00:00Z</published>
    <link href="https://waylonwalker.com/crush-dev-to-posts/" rel="alternate" type="text/html"></link>
    <summary type="text">Here are a few of my top tips to help make dev.to posts more readable, and drive better engagement.</summary>
    <content type="html">&lt;p&gt;This post was inspired by a comment I left on @dsteenman’s  post.&lt;/p&gt;&#xA;&lt;p&gt;{% post dsteenman/how-long-should-a-blogpost-be-2k6n %}&lt;/p&gt;&#xA;&lt;p&gt;Most of the time I prefer short as I am more likely to read the whole thing.  If its setup as a series I am more likely to work my way through the whole series in a matter of a few sessions.  Just my preference&lt;/p&gt;&#xA;&lt;p&gt;I will say though there are certain articles that fit well to the long format.  They are articles that folks tend to come back to often as a reference again and again.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sections&#34;&gt;Sections &lt;a href=&#34;#sections&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#layout-is-key&#34;&gt;layout is key&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#break-it-up&#34;&gt;Break it up&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#article-types&#34;&gt;Article types&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#superpost&#34;&gt;superpost&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#single-post&#34;&gt;single post&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#series&#34;&gt;series&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#discussion&#34;&gt;discussion&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#post-what-you-want-to-read&#34;&gt;Post what you want to read&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;layout-is-key&#34;&gt;layout is key &lt;a href=&#34;#layout-is-key&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Either way, you go &lt;strong&gt;layout is key&lt;/strong&gt;.  You are not &lt;strong&gt;Steven King&lt;/strong&gt;, no matter how great of a writer you are, you are unlikely to hold attention like he can.  Most folks reading blogs scan articles first.  I often scan, then read.  If the article is really good or pertains well to me I will read everything, otherwise, I go back and read only the sections of interest.  If there are no discernable sections you lost me.&lt;/p&gt;&#xA;&lt;p&gt;For this reason, you need to break up your post, into sections and treat the heading for each one like you would a title of a full post.&lt;/p&gt;&#xA;&lt;h3 id=&#34;abbr-titletable-of-contentstocabbr&#34;&gt;&lt;abbr title=&#34;Table of Contents&#34;&gt;TOC&lt;/abbr&gt; &lt;a href=&#34;#abbr-titletable-of-contentstocabbr&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;Table of Contents&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;A lot of folks responded to Danny’s post suggesting a table of contents.  For some reason I have never included a &lt;abbr title=&#34;Table of Contents&#34;&gt;TOC&lt;/abbr&gt; in my posts.  It’s something I am now considering.  I am really good at changing layout right before, or after, shipping a brand new post.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;semi-auto &lt;abbr title=&#34;Table of Contents&#34;&gt;TOC&lt;/abbr&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;As I am highly allergic to unnecessary rework and potential mistakes I put together this snippet that generates the &lt;abbr title=&#34;Table of Contents&#34;&gt;TOC&lt;/abbr&gt;automatically, just paste this into your console, and paste the results in your article.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// pres F12&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// paste this in the console&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// get your auto generated DEV TOC&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;[...&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;querySelectorAll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;.anchor&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;sb&#34;&gt;`1. [&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;parentElement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;innerText&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;](#&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;split&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;)`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;\n&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;break-it-up&#34;&gt;Break it up &lt;a href=&#34;#break-it-up&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Use headings, images, and blockquotes to break your article up and make it scannable.  I treat each heading as an article title.  It should be engaging and pull the reader in, but not be clickbaity and irritate them when they didn’t get what they expected.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;make it scannable! … treat each heading as an article title&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;markdown&#34;&gt;Markdown &lt;a href=&#34;#markdown&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Get Familiar with Markdown. Check out this &lt;a href=&#34;https://github.com/adam-p/markdown-here/wiki/Markdown-Here-Cheatsheet&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cheatsheet&lt;/a&gt; or the reference right in the DEV editor.  This is not an article about markdown, but here are the most common tags you need to break up your article.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;# H1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gu&#34;&gt;## H2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;### H3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt;... up to H6&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; unordered&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; list&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; of&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; things&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;1.&lt;/span&gt; ordered&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;1.&lt;/span&gt; list&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;1.&lt;/span&gt; of&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;1.&lt;/span&gt; things&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;![&lt;span class=&#34;nt&#34;&gt;Alt text of image&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;put-link-to-image-here&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gs&#34;&gt;**bold**&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;ge&#34;&gt;_italics_&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;~~strikethrough~~&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;👇 Horizontal rules are great a making a hard break between sections&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;---&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;DEV also supports these &lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;HTML&lt;/a&gt; elements for additional flair, use wisely. Some can make for some really jarring style that really pulls the readers eye to and is hard to focus on the rest.  I’m talking about you &lt;code&gt;&amp;lt;mark&amp;gt;&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;small&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;small text&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;small&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;sup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;superscript text&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;sup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;sub&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;subscript text&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;sub&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;mark&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;highlighted text&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;mark&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;abbr&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;Table of Contents&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;TOC&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;abbr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;liquid-tags&#34;&gt;Liquid Tags &lt;a href=&#34;#liquid-tags&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;When Editing a post click the Liquid Tag reference to the right, for a list of everything.  The &lt;code&gt;post&lt;/code&gt; tag is the retweet of DEV.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{% post helenanders26/sql-series-from-a-to-z-2pk9 %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{% user helenanders26 %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{% github forem/forem %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{% github forem/forem no-readme %}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;article-types&#34;&gt;Article types &lt;a href=&#34;#article-types&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As I can see there are several &lt;strong&gt;article types&lt;/strong&gt; on DEV&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#superpost&#34;&gt;superpost&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#single-post&#34;&gt;single post&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#series&#34;&gt;series&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#discussion&#34;&gt;discussion&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;superpost&#34;&gt;superpost &lt;a href=&#34;#superpost&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I think this is what @dsteenman is eluding to with the (+3000) word post.  This is the hardest to pull off in my opinion, but if done right it will land you at the top of the search for a long time, in the top 7, and potentially the top 1 for a given tag.&lt;/p&gt;&#xA;&lt;p&gt;I used to think that every post needed to be a super post that everyone would rave over.  I have found personally that attempting to do this makes it so I rarely post and way overthink them.  I need to at least make a cutoff time that the post is going to ship.&lt;/p&gt;&#xA;&lt;p&gt;This can also be the most frustrating, you have put all of your eggs in one basket.  If you don’t title it right, post at the right time, share it at the right time, it might not take off like you had hoped.&lt;/p&gt;&#xA;&lt;p&gt;{% post helenanders26/sql-series-from-a-to-z-2pk9 %}&lt;/p&gt;&#xA;&lt;p&gt;@helenanders26 takes the 👑 as the queen of the superpost.  She is the first person who comes to mind when I think of this post type&lt;/p&gt;&#xA;&lt;h2 id=&#34;single-post&#34;&gt;single post &lt;a href=&#34;#single-post&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Your average post.  There are a lot of great techniques to making the average post great (some added above).  Sometimes they find traction, sometimes they don’t.  I don’t sweat if they don’t.  I like posting shorter content as its achievable for me and my lifestyle.  I can always crosslink them and generate more views/discussion across them.&lt;/p&gt;&#xA;&lt;p&gt;{% post taillogs/how-to-write-a-good-blog-post-2eom %}&lt;/p&gt;&#xA;&lt;p&gt;@taillogs has a good article on his process to writing a good post.&lt;/p&gt;&#xA;&lt;p&gt;For those struggling to find what to write about, this is a great article from &lt;a href=&#34;https://www.swyx.io&#34; class=&#34;mention  has-avatar has-avatar-before&#34; data-name=&#34;swyx&#34; data-bio=&#34;The official site of Shawn @swyx Wang, a technologist and recovering finance geek.&#34; data-avatar=&#34;https://www.swyx.io/swyx-ski.jpeg&#34; data-handle=&#34;@swyx&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.swyx.io.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.swyx.io.png&#34;&gt;@swyx&lt;/a&gt; &lt;a href=&#34;https://swyx.io/puwtpd&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/swyx.io.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/swyx.io.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;learn-in-public-hack&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;series&#34;&gt;series &lt;a href=&#34;#series&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Using the &lt;code&gt;series&lt;/code&gt; tag you can break super posts into smaller ones.  This puts fewer of your eggs in the same basket.  I typically start a series when I know that I am going to post about a single topic often, but don’t have it all laid out.  I’ve been told for these to be really successful it needs a bit more pre-thought.&lt;/p&gt;&#xA;&lt;p&gt;I do notice that I get a bit of engagement back to older posts every time a new one is posted.  so this does help drive engagement by continuously pulling readers in.  I am not sure if its quite as good as a link, or liquid embed.  Keep in mind when doing this the series component will show the first 2 and the last two without clicking.  Make sure that the first two really count, they will likely get the most traffic benefit from the series.&lt;/p&gt;&#xA;&lt;p&gt;{% post waylonwalker/what-are-github-actions-1lhh %}&lt;/p&gt;&#xA;&lt;p&gt;I personally put a lot of my content into a series.  I don’t think through the full series ahead of time very much.  I do it because it helps me organize and retrieve my thoughts.  I find it easier to get back to the post I want to reference if I can find the series it was part of.  I think of it as a tag that no one else can post to.&lt;/p&gt;&#xA;&lt;h2 id=&#34;discussion&#34;&gt;discussion &lt;a href=&#34;#discussion&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Posts just like this one, where the author leads the discussion with an intriguing question or comment but holds back on their opinion.  The key here is that the author should engage in the discussion, keep the discussion moving, and provide their thoughts here.&lt;/p&gt;&#xA;&lt;p&gt;Selfishly this is one of my favorite types of posts to make as I learn the most from them.&lt;/p&gt;&#xA;&lt;p&gt;{% post ben/how-do-you-identify-over-engineering-1oad %}&lt;/p&gt;&#xA;&lt;p&gt;@ben is the king of the &lt;a href=&#34;https://dev.to/t/discuss&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/dev.to.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/dev.to.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;&lt;/a&gt;&lt;a href=&#34;/tags/discuss/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;discuss&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#discuss&lt;/a&gt; post.  He is able to get just the right titles that pull people in and generate quite large discussions.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;post-what-you-want-to-read&#34;&gt;Post what you want to read &lt;a href=&#34;#post-what-you-want-to-read&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;At the end of the day &lt;strong&gt;YOU&lt;/strong&gt; are the most important component.  Post what you like to read, post what you are able to write.  If you struggle to wrap your head around concepts in small posts and have a talent at making rockstar super posts do that.  &lt;strong&gt;Do YOU&lt;/strong&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ RanaEmad metrics-of-awesome-api</title>
    <id>https://waylonwalker.com/ranaemad-metrics-of-awesome-api/</id>
    <updated>2020-08-06T13:35:42Z</updated>
    <published>2020-08-06T13:35:42Z</published>
    <link href="https://waylonwalker.com/ranaemad-metrics-of-awesome-api/" rel="alternate" type="text/html"></link>
    <summary type="text">I like RanaEmad&#39;s project metrics-of-awesome-api.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/RanaEmad&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;RanaEmad’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/RanaEmad/metrics-of-awesome-api&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;metrics-of-awesome-api&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A Node.js API with the main purpose of acting as a backend for practicing authentication in React. It enables the user to sign up, sign in and view a dashboard with his metrics of awesome through different endpoints.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ elyase awesome-gpt3</title>
    <id>https://waylonwalker.com/elyase-awesome-gpt3/</id>
    <updated>2020-08-03T16:26:21Z</updated>
    <published>2020-08-03T16:26:21Z</published>
    <link href="https://waylonwalker.com/elyase-awesome-gpt3/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on awesome-gpt3, created by elyase.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/elyase/awesome-gpt3&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;awesome-gpt3&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/elyase&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;elyase&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ shreyashankar gpt3-sandbox</title>
    <id>https://waylonwalker.com/shreyashankar-gpt3-sandbox/</id>
    <updated>2020-08-03T16:26:18Z</updated>
    <published>2020-08-03T16:26:18Z</published>
    <link href="https://waylonwalker.com/shreyashankar-gpt3-sandbox/" rel="alternate" type="text/html"></link>
    <summary type="text">shreyashankar has done a fantastic job with gpt3-sandbox. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/shreyashankar&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;shreyashankar&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/shreyashankar/gpt3-sandbox&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gpt3-sandbox&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;The goal of this project is to enable users to create cool web demos using the newly released OpenAI GPT-3 API with just a few lines of Python.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Black Tech Pipeline</title>
    <id>https://waylonwalker.com/pariss-athena-on-black-tech-pipeline/</id>
    <updated>2020-08-03T05:00:00Z</updated>
    <published>2020-08-03T05:00:00Z</published>
    <link href="https://waylonwalker.com/pariss-athena-on-black-tech-pipeline/" rel="alternate" type="text/html"></link>
    <summary type="text">I was particularly inspired by @chantastic episode 103 of the react podcast with @ParissAthena. They spoke about the black tech pipeline as well as...</summary>
    <content type="html">&lt;p&gt;I was particularly inspired by @chantastic episode 103 of the react podcast with @ParissAthena. They spoke about the black tech pipeline as well as Diversity, Equity, and Inclusion. Pariss is quite an inspiration. She has done so much work to create a better place for POC in tech. I like that not only is she helping them get jobs but acting as a mentor for their first few months on the job to make sure that they are able to find their place and fit in.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Based on an episode of react podcast.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;🎙 Listen to the full &lt;a href=&#34;https://reactpodcast.simplecast.com/episodes/103&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/reactpodcast.simplecast.com.jpg&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/reactpodcast.simplecast.com.jpg&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;episode&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;so-inspirational&#34;&gt;So Inspirational &lt;a href=&#34;#so-inspirational&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I was particularly inspired by &lt;a href=&#34;https://twitter.com/chantastic&#34;&gt;@chantastic&lt;/a&gt; episode 103 of the react podcast with &lt;a href=&#34;https://twitter.com/ParissAthena&#34;&gt;@ParissAthena&lt;/a&gt;.  They spoke about the black tech pipeline as well as Diversity, Equity, and Inclusion.  Pariss is quite an inspiration.  She has done so much work to create a better place for POC in tech.  I like that not only is she helping them get jobs but acting as a mentor for their first few months on the job to make sure that they are able to find their place and fit in.&lt;/p&gt;&#xA;&lt;h2 id=&#34;losing-their-culture&#34;&gt;Losing their culture &lt;a href=&#34;#losing-their-culture&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;One thing that Michael brought up was the feeling he gets when he has other Asian friends to collaborate with at work is just a feeling of fitting in.  All too often he feels like he has to put on this persona of “Hamburgers and Beer are my favorite thing, like all the time” just to fit in.&lt;/p&gt;&#xA;&lt;h2 id=&#34;growing-up-in-rural-america-me&#34;&gt;Growing up in Rural America (me) &lt;a href=&#34;#growing-up-in-rural-america-me&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I grew up in a very rural part of the United States Dominated by Whites with a prominent Mexican community, there was almost no Asian or Black.  I can’t tell you how many times I heard, “I have this friend John, He’s black, but he’s not really black.”  I will say that I was never quite this low, but growing up in a region where this was the norm, I probably wasn’t the best ambassador either.&lt;/p&gt;&#xA;&lt;p&gt;Years later I recall taking some training for work that could not have described the people I grew up with better.  It described rural parts of the United States as completely accepting of any POC as long as they completely leave their culture behind.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;“I have this friend John, He’s black, but he’s not really black.”&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;I heard this statement far too many times coming from rural United States&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;Thinking a little bit more into this statement I realize that as a culture Rural America was very open to POC, but &lt;strong&gt;not&lt;/strong&gt; &lt;strong&gt;at&lt;/strong&gt; &lt;strong&gt;all&lt;/strong&gt; open to their &lt;strong&gt;culture&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This is where a lot of what we were taught in school in the ’90s and ’00s falls short.  We were so heavily focused on, &lt;em&gt;&amp;#34; I don’t see color&amp;#34;&lt;/em&gt;.  We were taught that race was all about color, having friends of color, and treating everyone equally.  But I think that not seeing color puts us in a situation of not really treating everyone equally.  Their color may have been seen as equal, but their culture wasn’t.&lt;/p&gt;&#xA;&lt;p&gt;We have failed to embrace others the way we would want them to embrace us.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;“Hamburgers and Beer are my favorite thing, like all the time”&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This is where I really connected with Michael’s statement “Hamburgers and Beer are my favorite thing, like all the time”.  So often we can look past color, but we completely miss making a real connection with other cultures.&lt;/p&gt;&#xA;&lt;h2 id=&#34;welcome-everyone&#34;&gt;Welcome Everyone &lt;a href=&#34;#welcome-everyone&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Like, really welcome them.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Further, into the episode, Pariss spoke about being hired into tech and feeling left out of the conversation because she didn’t feel like she fit in.  She would hire in with a non-POC on the same day and felt like people would stare at her like a zoo animal while treating the other new hire as a real person.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;people would stare at her like a zoo animal&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;take-action&#34;&gt;Take Action &lt;a href=&#34;#take-action&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I know that I do not want to make anyone on my team feel like a zoo animal.  I feel like listening to this episode gave me a bit of perspective into what it might be like to be just a bit different than everyone else.  I really appreciate the both of them for being so open about sharing their experiences.  I will definitely think of ways that I can make any new hire just a bit more welcome next time.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;For this post don’t follow me on Twitter, don’t join my newsletter.&lt;/p&gt;&#xA;&lt;p&gt;Share the episode with a friend.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://reactpodcast.simplecast.com/episodes/103&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/reactpodcast.simplecast.com.jpg&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/reactpodcast.simplecast.com.jpg&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;react podcast 103&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Follow &lt;a href=&#34;https://twitter.com/ParissAthena&#34;&gt;@ParissAthena&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Follow &lt;a href=&#34;https://twitter.com/chantastic&#34;&gt;@chantastic&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Sign up for the &lt;a href=&#34;https://blacktechpipeline.substack.com/p/coming-soon&#34;&gt;Black Tech Pipeline Newsletter&lt;/a&gt;&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;follow-them-they-are-some-amazing-people&#34;&gt;Follow them they are some amazing people. &lt;a href=&#34;#follow-them-they-are-some-amazing-people&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have been trying to build out the content in mine.  I later found this is called a shadow newsletter or evergreen newsletter.  I will say that it gets tough to keep up with.  I’ve been trying to do it weekly, but have definitely had some folks get ahead of my pace, I’ll have to figure out how to split the out and resend articles they missed.&lt;/p&gt;&#xA;&lt;p&gt;– for yours –&lt;/p&gt;&#xA;&lt;p&gt;I like the branding that you have put into it, and how it matches yoru cover images elsewhere.&lt;/p&gt;&#xA;&lt;p&gt;I like how you have included sections of posts from various places that pull me in and make me want to go see more.&lt;/p&gt;&#xA;&lt;p&gt;your video to @WellMax81 is amazing, do more of those.&lt;/p&gt;&#xA;&lt;p&gt;One thing, I am not sure if there is a “right” direction with this, but it doesnt give me any new content.  If I were to have been following you everywhere I would have likely seen a lot of this already.  That might make me wonder why I am subscribed over time.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Review of the git-auto-commit-action</title>
    <id>https://waylonwalker.com/git-auto-commit-action-review/</id>
    <updated>2020-08-03T05:00:00Z</updated>
    <published>2020-08-03T05:00:00Z</published>
    <link href="https://waylonwalker.com/git-auto-commit-action-review/" rel="alternate" type="text/html"></link>
    <summary type="text">It&#39;s a really cool GitHub action that will automatically commit files changed during the action. I was using this to render a new readme based on a template.</summary>
    <content type="html">&lt;p&gt;It’s a really cool GitHub action that will automatically commit files changed&#xA;during the action. I was using this to render a new readme based on a template.&lt;/p&gt;&#xA;&lt;p&gt;Check out the repo for &lt;a href=&#34;https://github.com/stefanzweifel/git-auto-commit-action&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;git-auto-commit-action&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;It’s a really cool GitHub action that will automatically commit files changed during the action.  I was using this to render a new readme based on a template.&lt;/p&gt;&#xA;&lt;p&gt;This has been by far the easiest way to commit back to a repo that I have seen.  Other patterns often require fully setting up the &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; user and everything.  While it’s not all that hard, this action already has all of that covered.&lt;/p&gt;&#xA;&lt;p&gt;You must give it a commit message and thats it.  Optionally you can configure a number of things.  Its possible to configure the &lt;code&gt;commit_user_name&lt;/code&gt;, &lt;code&gt;commit_user_email&lt;/code&gt;, and &lt;code&gt;commit_author&lt;/code&gt;.  I often also scope the &lt;code&gt;file_pattern&lt;/code&gt; to a certain subset of files.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p style=&#34;text-align: center&#34;&gt;&#xA;&lt;a href=&#34;https://waylonwalker.com/github-actions-syntax/&#34;&gt;&#xA;  &lt;img class=&#34;glightbox&#34; style=&#34;width:500px; max-width:80%; margin: auto;&#34; src=&#34;https://images.waylonwalker.com/github-actions-syntax-rm.png&#34; alt=&#34;GitHub Actions Syntax article card&#34;/ data-glightbox=&#34;description: GitHub Actions Syntax article card&#34;&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If you’re new to actions check out this article on using actions.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p style=&#34;text-align: center&#34;&gt;&#xA;&lt;a href=&#34;https://waylonwalker.com/github-actions-syntax/&#34;&gt;&#xA;  &lt;img class=&#34;glightbox&#34; style=&#34;width:500px; max-width:80%; margin: auto;&#34; src=&#34;https://images.waylonwalker.com/github-actions-syntax-rm.png&#34; alt=&#34;GitHub Actions Syntax article card&#34;/ data-glightbox=&#34;description: GitHub Actions Syntax article card&#34;&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If you’re new to actions check out this article on using actions.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;You do need to be careful to checkout the repo just a bit different than normal.&lt;/p&gt;&#xA;&lt;h2 id=&#34;limitations--gotchas&#34;&gt;Limitations &amp;amp; Gotchas &lt;a href=&#34;#limitations--gotchas&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;directly from the repo&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;checkout-the-correct-branch&#34;&gt;Checkout the correct branch &lt;a href=&#34;#checkout-the-correct-branch&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;You must use &lt;code&gt;action/checkout@v2&lt;/code&gt; or later versions to checkout the repository. In non-push events, such as pull_request, make sure to specify the ref to checkout:&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- &lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;actions/checkout@v2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ref&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${{ github.head_ref }}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You have to do this do avoid that the &lt;code&gt;checkout&lt;/code&gt;-Action clones your repository in a detached state.&lt;/p&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage &lt;a href=&#34;#usage&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;from the repo&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- &lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;stefanzweifel/git-auto-commit-action@v4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Required&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;commit_message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Apply automatic changes&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Optional branch to push to, defaults to the current branch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;branch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;feature-123&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Optional options appended to `git-commit`&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# See https://git-scm.com/docs/git-commit for a list of available options&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;commit_options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;--no-verify --signoff&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Optional glob pattern of files which should be added to the commit&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# See the `pathspec`-documentation for git&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# - https://git-scm.com/docs/git-add#Documentation/git-add.txt-ltpathspecgt82308203&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# - https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefpathspecapathspec&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;file_pattern&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;src/*.js tests/*.js&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Optional local file path to the repository&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;repository&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Optional commit user and author settings&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;commit_user_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;My GitHub Actions Bot&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;commit_user_email&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;my-github-actions-bot@example.org&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;commit_author&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Author &amp;lt;actions@github.com&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Optional tag message&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Action will create and push a new tag to the remote repository and the defined branch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;tagging_message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;v1.0.0&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Optional options appended to `git-push`&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;push_options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;--force&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Optional: Disable dirty check and always try to create a commit and push&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;skip_dirty_check&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;more-actions&#34;&gt;More Actions &lt;a href=&#34;#more-actions&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you’re new to actions check out these articles on using actions.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;tbody&gt;&lt;tr&gt;&#xA;    &lt;td&gt;&#xA;      &lt;a href=&#34;https://waylonwalker.com/four-github-actions-website/&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; style=&#34;width:250px; max-width:80%; margin: auto; float: left&#34; src=&#34;https://images.waylonwalker.com/four-github-actions-website-rm.png&#34; alt=&#34;GitHub Actions Syntax article card&#34;/ data-glightbox=&#34;description: GitHub Actions Syntax article card&#34;&gt;&#xA;      &lt;/a&gt;&#xA;    &lt;/td&gt;&#xA;    &lt;td&gt;&#xA;      &lt;a href=&#34;https://waylonwalker.com/four-github-actions-python/&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; style=&#34;width:250px; max-width:80%; margin: auto; float: right;&#34; src=&#34;https://images.waylonwalker.com/four-github-actions-python-rm.png&#34; alt=&#34;GitHub Actions Syntax article card&#34;/ data-glightbox=&#34;description: GitHub Actions Syntax article card&#34;&gt;&#xA;      &lt;/a&gt;&#xA;    &lt;/td&gt;&#xA;  &lt;/tr&gt;&#xA;&lt;/tbody&gt;&lt;/table&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>What&#39;s New in Kedro 0.16.4</title>
    <id>https://waylonwalker.com/whats-new-in-kedro-0164/</id>
    <updated>2020-08-01T05:00:00Z</updated>
    <published>2020-08-01T05:00:00Z</published>
    <link href="https://waylonwalker.com/whats-new-in-kedro-0164/" rel="alternate" type="text/html"></link>
    <summary type="text">If we take a look at the release notes I see one ** feature improvement on the list, auto-discovery of hooks.</summary>
    <content type="html">&lt;p&gt;If we take a look at the &lt;a href=&#34;https://github.com/kedro-org/kedro/blob/master/RELEASE.md&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;release notes&lt;/a&gt; I see one &lt;strong&gt;major&lt;/strong&gt; feature improvement on the list, auto-discovery of hooks.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## Major features and improvements&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;*&lt;/span&gt; Enabled auto-discovery of hooks implementations coming from installed plugins.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This one comes a bit surprising as it was just casually mentioned in &lt;a href=&#34;https://github.com/kedro-org/kedro/issues/435&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;#435&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/kedro-org/kedro/issues/435&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/kedro-435.png&#34; alt=&#34;auto enabled plugins mentioned in issue 435&#34;/ data-glightbox=&#34;description: auto enabled plugins mentioned in issue 435&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;think-pytest&#34;&gt;Think pytest &lt;a href=&#34;#think-pytest&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As mentioned in &lt;a href=&#34;https://github.com/kedro-org/kedro/issues/435&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;#435&lt;/a&gt; this is the model that pytest uses. Not all plugins automatically start doing things right out of the box but require a CLI argument.&lt;/p&gt;&#xA;&lt;h2 id=&#34;simplicity&#34;&gt;simplicity &lt;a href=&#34;#simplicity&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It feels a bit crazy that simply installing a package will change the way that your pipeline gets executed. I do like that it requires just a bit less reaching into the framework stuff for the average user. Most folks will be able to write in the catalog and nodes without much change to the rest of the project.&lt;/p&gt;&#xA;&lt;h2 id=&#34;implementation&#34;&gt;Implementation &lt;a href=&#34;#implementation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Reading through the &lt;a href=&#34;https://kedro.readthedocs.io/en/stable/07_extend_kedro/04_plugins.html#hooks&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;docs&lt;/a&gt;, they show us that we can make our hooks automatically register by adding a &lt;code&gt;kedro.hooks&lt;/code&gt; endpoint that points to a &lt;em&gt;singleton&lt;/em&gt; instance of our hook.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;from the docs&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;setup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;entry_points&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro.hooks&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;plugin_name = plugin_name.plugin:hooks&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;logging&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.framework.hooks&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hook_impl&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;MyHooks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@hook_impl&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;after_catalog_created&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# pylint: disable=unused-argument&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;logging&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Reached after_catalog_created hook&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;hooks&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MyHooks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;careful-with-the-singletons&#34;&gt;Careful with the singletons &lt;a href=&#34;#careful-with-the-singletons&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;hook authors beware&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I will be a bit cautious before installing a plugin that is automatically registered. I know its not a common pattern, but if you were to leverage any part of two kedro projects at the same time, and project-specific data was stored in the instance of the hook it will likely be broken.&lt;/p&gt;&#xA;&lt;p&gt;As long as the hook doesn’t store data on the instance you will be ok. Hooks like what they have in the examples will be ok. They generally just take some information from the lifecycle arguments and do something at their prescribed lifecycle point.&lt;/p&gt;&#xA;&lt;p&gt;Many of the hooks I am seeing in the wild are already more complicated and require the hooks author to utilize an &lt;code&gt;__init__&lt;/code&gt; method and store data on the instance. If you were to do this on two pipelines simultaneously it would break.&lt;/p&gt;&#xA;&lt;h2 id=&#34;can-my-hook-be-auto-discovered&#34;&gt;Can my hook be auto-discovered &lt;a href=&#34;#can-my-hook-be-auto-discovered&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If your hook doesn’t include a &lt;code&gt;__init__&lt;/code&gt; method its a fairly easy yes, otherwise be aware of the potential dangers of passing singleton on to your users.&lt;/p&gt;&#xA;&lt;h2 id=&#34;use-virtual-environments&#34;&gt;Use Virtual environments &lt;a href=&#34;#use-virtual-environments&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Whatever &lt;a href=&#34;/virtual-environment/&#34; class=&#34;glossary-term&#34; title=&#34;Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...&#34;&gt;virtual environment&lt;/a&gt; manager you use, it is more important than ever to make sure you &lt;strong&gt;DO NOT&lt;/strong&gt; install plugins in your global environment. Generally, you should always run projects &lt;em&gt;even toys or tests&lt;/em&gt; in a &lt;strong&gt;virtual&lt;/strong&gt;  &lt;strong&gt;environemnt&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;I use conda&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda create -n my-sample-env &lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;3.8 -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;overall&#34;&gt;Overall &lt;a href=&#34;#overall&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I think this is a really interesting direction for the project to go to. Hooks are still really early. The implementation is good, but I foresee us getting some more functionality that may require us to rely on the &lt;code&gt;__init__&lt;/code&gt; method a little less.  I think there are going to be some really cool hooks that can leverage the simplicity of auto-discoverability.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ bdougie gitActionTraction</title>
    <id>https://waylonwalker.com/bdougie-gitactiontraction/</id>
    <updated>2020-07-31T02:47:44Z</updated>
    <published>2020-07-31T02:47:44Z</published>
    <link href="https://waylonwalker.com/bdougie-gitactiontraction/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by gitActionTraction from bdougie.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/bdougie/gitActionTraction&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gitActionTraction&lt;/a&gt; from &lt;a href=&#34;https://github.com/bdougie&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;bdougie&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;📹 Home video of GitHub Actions tips for better traction.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ elangosundar awesome-README-templates</title>
    <id>https://waylonwalker.com/elangosundar-awesome-readme-templates/</id>
    <updated>2020-07-29T13:31:12Z</updated>
    <published>2020-07-29T13:31:12Z</published>
    <link href="https://waylonwalker.com/elangosundar-awesome-readme-templates/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on awesome-README-templates, created by elangosundar.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/elangosundar/awesome-README-templates&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;awesome-README-templates&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/elangosundar&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;elangosundar&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A collection of awesome readme templates to display on your github profile.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ jgm pandoc</title>
    <id>https://waylonwalker.com/jgm-pandoc/</id>
    <updated>2020-07-28T01:27:47Z</updated>
    <published>2020-07-28T01:27:47Z</published>
    <link href="https://waylonwalker.com/jgm-pandoc/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about pandoc, an amazing project by jgm. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/jgm/pandoc&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pandoc&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/jgm&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jgm&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Universal markup converter&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ anuraghazra github-readme-stats</title>
    <id>https://waylonwalker.com/anuraghazra-github-readme-stats/</id>
    <updated>2020-07-27T12:34:21Z</updated>
    <published>2020-07-27T12:34:21Z</published>
    <link href="https://waylonwalker.com/anuraghazra-github-readme-stats/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about github-readme-stats, an amazing project by anuraghazra. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/anuraghazra/github-readme-stats&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;github-readme-stats&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/anuraghazra&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;anuraghazra&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;⚡ Dynamically generated stats for your github readmes&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Integration testing with Python, TestProject.io, and GitHub Actions</title>
    <id>https://waylonwalker.com/testproject-io-py-actions/</id>
    <updated>2020-07-27T05:00:00Z</updated>
    <published>2020-07-27T05:00:00Z</published>
    <link href="https://waylonwalker.com/testproject-io-py-actions/" rel="alternate" type="text/html"></link>
    <summary type="text">!!! Caution None of the testproject.io urls resolve anymore in JAN 2025, I removed all of the broken links.</summary>
    <content type="html">&lt;div class=&#34;admonition caution&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Caution&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;None of the testproject.io urls resolve anymore in JAN 2025, I removed all&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;of the broken links.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;As I continue to build out &lt;a href=&#34;https://waylonwalker.com/&#34;&gt;waylonwalker.com&lt;/a&gt; I&#xA;sometimes run into some errors that are not caught because I do not have good&#xA;testing implemented.  I want to explore some integration testing options using&#xA;GitHub’s actions.&lt;/p&gt;&#xA;&lt;p&gt;Running integration tests will not prevent bugs from happening completely, but&#xA;it will allow me to quickly spot them and rollback.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;-what-to-test-first&#34;&gt;🤔 What to test first? &lt;a href=&#34;#-what-to-test-first&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The very first thing that comes to my mind is anything that is loaded or ran&#xA;client-side.  Two things quickly came to mind here.  I run gatsby so most of my&#xA;content is statically rendered, and it yells at me if something isn’t as&#xA;expected.  For performance reasons I lazy load cards on my blogroll, loading&#xA;all of the header images gets heavy and kills lighthouse (if anyone actually&#xA;cares). I am also loading some information from the top open-source libraries&#xA;that I have created.  To prevent the need to rebuild the whole site to get the&#xA;latest information I am just using the GitHub API client-side.&lt;/p&gt;&#xA;&lt;p&gt;things I was looking for from features to test&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;client-side interactions&lt;/li&gt;&#xA;&lt;li&gt;external API&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;features on my blog to consider testing&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;lazy-loaded blog cards&lt;/li&gt;&#xA;&lt;li&gt;GitHub Repos&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;repo-cards&#34;&gt;Repo Cards &lt;a href=&#34;#repo-cards&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I chose to start with the GitHub repos as they seemed a bit more straight&#xA;forward, and it’s been a while since I have done any selenium.&lt;/p&gt;&#xA;&lt;p style=&#34;text-align: center&#34;&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/open-source-cards.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/open-source-cards.png&#34; style=&#34;width:600px; max-width:80%; margin: auto;&#34; alt=&#34;Open Source cards as they look on waylonwalker.com&#34;/ data-glightbox=&#34;description: Open Source cards as they look on waylonwalker.com&#34;&gt;&lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;here is what the GitHub repo cards look like&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;testprojectio&#34;&gt;TestProject.io &lt;a href=&#34;#testprojectio&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I am trying out TestProject dot io for the first time on&#xA;this project.  My experience so far has been top-notch.  There was an existing&#xA;suite of docker images/files set up to run the TestProject agent in a docker&#xA;container alongside headless chrome and firefox drivers.  The first thing that&#xA;you are going to need is a TP_DEV_TOKEN and&#xA;TP_API_KEY.  These will give&#xA;TestProject access to your account so that it can automatically post results to&#xA;your dashboard.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;TP_DEV_TOKEN&lt;/li&gt;&#xA;&lt;li&gt;TP_API_KEY&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;put-these-in-secrets-in-your-repo&#34;&gt;Put these in secrets in your repo &lt;a href=&#34;#put-these-in-secrets-in-your-repo&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;In your GitHub repo go to &lt;code&gt;settings&amp;gt;Secrets&lt;/code&gt;, or append &lt;code&gt;settings/secrets&lt;/code&gt; to the URL to your repo, and add the tokens.  This will give GitHub safe access to them without them being available to the public, contributors, log files, or anything.&lt;/p&gt;&#xA;&lt;p style=&#34;text-align: center&#34;&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/test-waylonwalker-com-secrets.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/test-waylonwalker-com-secrets.png&#34; style=&#34;width:600px; max-width:80%; margin: auto;&#34; alt=&#34;Secrets panel in the GitHub Repo&#34;/ data-glightbox=&#34;description: Secrets panel in the GitHub Repo&#34;&gt;&lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;setup-dev&#34;&gt;Setup Dev &lt;a href=&#34;#setup-dev&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;To expedite development I went ahead and set up development environment that I could log into on Digital Ocean.  This allowed me to get all of my tests working a bit quicker than just running them through GitHub, but being as similar as possible.  This allowed me to learn the ins and outs of setting up TestProject without needing to do a full install every time through Github’s actions.&lt;/p&gt;&#xA;&lt;p style=&#34;text-align: center&#34;&gt;&#xA;&lt;a href=&#34;https://waylonwalker.com/new-machine-tpio/&#34;&gt;&#xA;  &lt;img class=&#34;glightbox&#34; style=&#34;width:500px; max-width:80%; margin: auto;&#34; src=&#34;https://images.waylonwalker.com/new-machine-tpio-rm.png&#34; alt=&#34;Test Project Dev Machine setup notes card&#34;/ data-glightbox=&#34;description: Test Project Dev Machine setup notes card&#34;&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I am not going to go into full dev machine setup here, but you can read my &lt;a href=&#34;https://waylonwalker.com/new-machine-tpio/&#34;&gt;setup notes&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;-pytest&#34;&gt;🐍 Pytest &lt;a href=&#34;#-pytest&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;you can see all of the tests ran with pytest on &lt;a href=&#34;https://github.com/waylonwalker/waylonwalker-com-tests/tree/main/tests&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;github&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I chose to go down the route of using pytest.  I really liked the idea of&#xA;utilizing fixtures, automatically running my test functions, and utilizing a&#xA;bit of the pytest reporting capabilities.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt; per pytest standard practice I named the directory containing tests&#xA;&lt;code&gt;tests&lt;/code&gt;.  While this works, TestProject.io uses this director as the default&#xA;name for the project.  If I were to go back I would either rename the directory&#xA;to what I want to show up on TestProject.io or configure the project name&#xA;inside of the config.&lt;/p&gt;&#xA;&lt;h2 id=&#34;conftestpy&#34;&gt;conftest.py &lt;a href=&#34;#conftestpy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;You can see the &lt;a href=&#34;https://github.com/WaylonWalker/waylonwalker-com-tests/blob/main/tests/conftest.py&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;conftest.py&lt;/a&gt; live on GitHub.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;pytest automatically imports &lt;a href=&#34;https://github.com/WaylonWalker/waylonwalker-com-tests/blob/main/tests/conftest.py&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;conftest.py&lt;/a&gt; modules from the same directory that you are working from.  It’s common to place fixtures used across multiple files here.  I placed a driver fixture in this module so that as I create more tests it will be available everywhere by default.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;conftest.py stores fixtures for all modules in a directory.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# tests/conftest.py&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;time&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pytest&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;src.TestProject.sdk.drivers&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;web&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;driver&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@pytest.fixture&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;driver&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;creates a webdriver and loads the homepage&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;driver&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;webdriver&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Chrome&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;driver&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://waylonwalker.com/&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;yield&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;driver&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;driver&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;quit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Look at the full version of &lt;a href=&#34;https://github.com/WaylonWalker/waylonwalker-com-tests/blob/main/tests/conftest.py&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;conftest.py&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The above sample is a bit &lt;strong&gt;simplified&lt;/strong&gt;.  I ran into some inconsistencies in the real version and found that some tests had a better pass rate if I added a wait.  I ended up with a &lt;code&gt;driver&lt;/code&gt; and a &lt;code&gt;slow_driver&lt;/code&gt; fixture.&lt;/p&gt;&#xA;&lt;h2 id=&#34;test-repospy&#34;&gt;test_repos.py &lt;a href=&#34;#test-repospy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;see the full &lt;a href=&#34;https://github.com/WaylonWalker/waylonwalker-com-tests/blob/main/tests/test_repos.py&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;testrepos.py&lt;/a&gt; on GitHub&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I have initially set up 3 different tests for the repo cards.  I set a list of&#xA;repos that I expect to show up in the cards.  These tests are quite easy to do&#xA;with TestProject.io as it is using selenium and a headless browser to execute&#xA;javascript under the hood.&lt;/p&gt;&#xA;&lt;p&gt;If you are not familiar a &lt;strong&gt;headless browser&lt;/strong&gt; runs the engine as your browser&#xA;without a graphical user interface.  JavaScript gets fully loaded and parsed,&#xA;and the dom is completely interactive programmatically.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;Test that GitHub repo data dynamically loads the client-side.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;REPOS&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;find-kedro&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro-static-viz&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro-action&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;steel-toes&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;test_repos_loaded&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;slow_driver&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    Test that each repo-name exists as a title in one of the repo cards.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    On waylonwalker.com repo cards have a title with a class of &amp;#34;repo-name&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;repos&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;slow_driver&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;find_elements_by_class_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;repo-name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# get innertext from elements&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;header_text&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;header&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;text&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;header&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;repos&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;repo&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;REPOS&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;assert&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;repo&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;header_text&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;test_repo_description_loaded&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;slow_driver&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    Test that each repo has a description longer than 10 characters&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    On waylonwalker.com repo cards have a descriptiion with a class of &amp;#34;repo-description&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;repo_elements&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;slow_driver&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;find_elements_by_class_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;repo&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;el&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;repo_elements&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;desc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;el&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;find_element_by_class_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;repo-description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;assert&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;desc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;test_repo_stars_loaded&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;slow_driver&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    Ensure that stars are properly parsed from the API and loaded client-side&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    On waylonwalker.com repo cards have a stars element with a class of &amp;#34;repo-stars&amp;#34; and&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    is displayed as &amp;#34;n stars&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;repo_elements&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;slow_driver&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;find_elements_by_class_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;repo&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;el&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;repo_elements&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;stars&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;el&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;find_element_by_class_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;repo-stars&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;num_stars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;stars&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;split&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;assert&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;num_stars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;assert&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;stars&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;forum&#34;&gt;Forum &lt;a href=&#34;#forum&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;a href=&#34;https://forum.TestProject.io/t/install-agent-inside-github-actions/2334/3&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/forum.testproject.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/forum.testproject.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;forum.TestProject.io&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Before jumping into the real action.  I quickly wanted to mention the &lt;strong&gt;amazing&lt;/strong&gt; ✨  discord server that they have going.&lt;/p&gt;&#xA;&lt;p&gt;I was a bit confused about how to set up TestProject.io inside of actions.  I was with a prompt response linking me to the exact example I needed.  The tests were written in java, but they had set up the docker-compose steps that I needed.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;github-actions-&#34;&gt;GitHub Actions 🎬 &lt;a href=&#34;#github-actions-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;a href=&#34;https://github.com/WaylonWalker/waylonwalker-com-tests/blob/main/.github/workflows/test-waylonwalker-com.yml&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;test-waylonwalker-com.yml&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;github-actions-are-a-continuous-integration-continuous-delivery-service-by-github-that-will-spin-up-a-vm-and-run-a-set-of-steps-upon-a-number-of-triggers-including-push-pull-request-and-schedule&#34;&gt;GitHub actions are a continuous integration, continuous delivery service by GitHub that will spin up a VM and run a set of steps upon a number of triggers including push, pull request, and schedule. &lt;a href=&#34;#github-actions-are-a-continuous-integration-continuous-delivery-service-by-github-that-will-spin-up-a-vm-and-run-a-set-of-steps-upon-a-number-of-triggers-including-push-pull-request-and-schedule&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p style=&#34;text-align: center&#34;&gt;&#xA;&lt;a href=&#34;https://waylonwalker.com/github-actions-syntax/&#34;&gt;&#xA;  &lt;img class=&#34;glightbox&#34; style=&#34;width:500px; max-width:80%; margin: auto;&#34; src=&#34;https://images.waylonwalker.com/github-actions-syntax-rm.png&#34; alt=&#34;GitHub Actions Syntax article card&#34;/ data-glightbox=&#34;description: GitHub Actions Syntax article card&#34;&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If you’re new to actions check out this article on using actions.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;Now that I have my GitHub repo setup with my &lt;a href=&#34;https://github.com/WaylonWalker/waylonwalker-com-tests/tree/main/tests&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tests&lt;/a&gt; successfully running in pytest, let’s get it running inside of GitHub actions automatically.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Test WaylonWalker.com&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Controls when the action will run. Triggers the workflow on push or pull request&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# events but only for the main branch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;push&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;branches&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;main ]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pull_request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;branches&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;main ]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;schedule&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;cron&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;*/10 * * * *&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can see in the section above I have set up to run every time there is a push to or pull request open to main.  I also set a fairly aggressive test schedule to run every &lt;strong&gt;10&lt;/strong&gt; &lt;strong&gt;minutes&lt;/strong&gt;.  For now, this is just to build confidence in the tests and get more data in the reports to explore.  I will likely turn this down later.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;jobs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;runs-on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;ubuntu-latest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;steps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;actions/checkout@main&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;actions/setup-python@v2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;python-version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;3.8&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pip install -r requirements.txt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Run TestProject Agent&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;TP_API_KEY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${{ secrets.TP_API_KEY }}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# &amp;lt; Let Secrets handle your keys&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sd&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;        envsubst &amp;lt; .github/ci/docker-compose.yml &amp;gt; docker-compose.yml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;        cat docker-compose.yml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;        docker-compose -f docker-compose.yml up -d&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Wait for Agent to Register&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;bash .github/ci/wait_for_agent.sh&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pytest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;TP_DEV_TOKEN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${{ secrets.TP_DEV_TOKEN }}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# &amp;lt; Let Secrets handle your tokens&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;TP_AGENT_URL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;http://localhost:8585&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In the test job you can see that we have rendered the TP_API_KEY into the&#xA;&lt;a href=&#34;https://github.com/WaylonWalker/waylonwalker-com-tests/blob/main/.github/ci/docker-compose.yml&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;docker-compose.yml&lt;/a&gt;&#xA;using &lt;code&gt;envsubst&lt;/code&gt; file so that TestProject has access to it.  We have also&#xA;exposed our TP_DEV_TOKEN to pytest.&lt;/p&gt;&#xA;&lt;h2 id=&#34;docker-composeyml&#34;&gt;docker-compose.yml &lt;a href=&#34;#docker-composeyml&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;a href=&#34;https://github.com/WaylonWalker/waylonwalker-com-tests/blob/main/.github/ci/docker-compose.yml&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;docker-compose.yml&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The following&#xA;&lt;a href=&#34;https://github.com/WaylonWalker/waylonwalker-com-tests/blob/main/.github/ci/docker-compose.yml&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;docker-compose.yml&lt;/a&gt;&#xA;file was graciously contributed by &lt;a href=&#34;https://github.com/vitalybu&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;@vitalybu&lt;/a&gt; in&#xA;the testproject-io/java-sdk repo.  It sets up a template with the&#xA;&lt;strong&gt;&lt;code&gt;TP_API_KEY&lt;/code&gt;&lt;/strong&gt; as a variable for envsubst, headless browsers for chrome and&#xA;firefox, and the TestProject.io agent.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;3.1&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;services&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;testproject-agent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;testproject/agent:latest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;container_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;testproject-agent&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;depends_on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;chrome&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;firefox&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;TP_API_KEY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;${TP_API_KEY}&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;TP_AGENT_TEMP&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;TP_SDK_PORT&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;8686&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;CHROME&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;chrome:4444&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;CHROME_EXT&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;localhost:5555&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;FIREFOX&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;firefox:4444&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;FIREFOX_EXT&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;localhost:6666&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;8585:8585&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;8686:8686&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;chrome&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;selenium/standalone-chrome&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;/dev/shm:/dev/shm&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;5555:4444&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;firefox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;selenium/standalone-firefox&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;/dev/shm:/dev/shm&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;6666:4444&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;-waiting-for-the-agent-to-register&#34;&gt;⌚ Waiting for the Agent to register &lt;a href=&#34;#-waiting-for-the-agent-to-register&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;a href=&#34;https://github.com/WaylonWalker/waylonwalker-com-tests/blob/main/.github/ci/wait_for_agent.sh&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;wait for agent.sh&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I think the most interesting part of the workflow above is how we wait for the agent to register.  The shell script is a bit terse, but it looks for exceeding the &lt;code&gt;max_attempts&lt;/code&gt; allowed or that the agent has started by using its &lt;code&gt;/api/status&lt;/code&gt; rest API.  This prevents us from wasting too much time by setting a big wait, or trying to move on too early and running pytest without a running agent.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;trap&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;kill $(jobs -p)&amp;#39;&lt;/span&gt; EXIT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;attempt_counter&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;max_attempts&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p build/reports/agent&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker-compose -f docker-compose.yml logs -f &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tee build/reports/agent/log.txt&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;until&lt;/span&gt; curl -s http://localhost:8585/api/status &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; jq &lt;span class=&#34;s1&#34;&gt;&amp;#39;.registered&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep true&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;attempt_counter&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt; -eq &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;max_attempts&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Agent failed to register. Terminating...&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;attempt_counter&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$attempt_counter&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    sleep &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;testprojectio-dashboard-&#34;&gt;TestProject.io Dashboard 〽 &lt;a href=&#34;#testprojectio-dashboard-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;One one of the coolest features that you get from TestProject.io are the reports dashboard.  To me, this felt like a premium feature for &lt;strong&gt;free&lt;/strong&gt;.  Here you can see a time-series plot of your tests success rate over time.  It gives you a bit of an ability to slice in, but not a lot.  Some of the filters are pre-canned, like the past 2 days are past 30 days cannot be customized.&lt;/p&gt;&#xA;&lt;p style=&#34;text-align: center&#34;&gt;&#xA;  &lt;a href=&#34;https://images.waylonwalker.com/tpio-test-repos.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; style=&#34;width:800px; max-width:80%; margin: auto;&#34; src=&#34;https://images.waylonwalker.com/tpio-test-repos.png&#34; alt=&#34;My Dashboard for test_repos&#34;/ data-glightbox=&#34;description: My Dashboard for test_repos&#34;&gt;&lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;a-single-test-flow-in-the-dashboard&#34;&gt;A single test flow in the dashboard &lt;a href=&#34;#a-single-test-flow-in-the-dashboard&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As you drill in you can see individual tests that have been run, select them, and see individual reports for each test.  Personally I really like the layout on the side.  It converts the steps ran by the driver into a human-readable &lt;em&gt;flowchart&lt;/em&gt;, and each step can be opened up to see their values.  It would be nice if it picked up my pytest assertions, but picking up what it did was great.&lt;/p&gt;&#xA;&lt;p style=&#34;text-align: center&#34;&gt;&#xA;  &lt;a href=&#34;https://images.waylonwalker.com/test_repo_stars_loaded.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; style=&#34;width:350px; max-width:80%; margin: auto;&#34; src=&#34;https://images.waylonwalker.com/test_repo_stars_loaded.png&#34; alt=&#34;driver flow of test_repo_stars_loaded&#34;/ data-glightbox=&#34;description: driver flow of test_repo_stars_loaded&#34;&gt;&lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;h2 id=&#34;overall-&#34;&gt;Overall 😄 &lt;a href=&#34;#overall-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The experience I had setting up TestProject.io to run inside GitHub’s actions was great.  It was fairly simple to set up and get running with many of the greatest integration testing tools of today, selenium, chrome, firefox.&lt;/p&gt;&#xA;&lt;p&gt;Now I am going to turn the test frequency down a bit.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;more-actions&#34;&gt;More Actions &lt;a href=&#34;#more-actions&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you’re new to actions check out this article on using actions.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&lt;tbody&gt;&lt;tr&gt;&#xA;   &lt;td&gt;&#xA;      &lt;a href=&#34;https://waylonwalker.com/four-github-actions-website/&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; style=&#34;margin: auto; float: left&#34; src=&#34;https://images.waylonwalker.com/four-github-actions-website-rm.png&#34; alt=&#34;GitHub Actions Syntax article card&#34;/ data-glightbox=&#34;description: GitHub Actions Syntax article card&#34;&gt;&#xA;      &lt;/a&gt;&#xA;   &lt;/td&gt;&#xA;   &lt;td&gt;&#xA;      &lt;a href=&#34;https://waylonwalker.com/four-github-actions-python/&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; style=&#34;margin: auto; float: right;&#34; src=&#34;https://images.waylonwalker.com/four-github-actions-python-rm.png&#34; alt=&#34;GitHub Actions Syntax article card&#34;/ data-glightbox=&#34;description: GitHub Actions Syntax article card&#34;&gt;&#xA;      &lt;/a&gt;&#xA;   &lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&lt;/table&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ kelseyhightower nocode</title>
    <id>https://waylonwalker.com/kelseyhightower-nocode/</id>
    <updated>2020-07-25T20:14:05Z</updated>
    <published>2020-07-25T20:14:05Z</published>
    <link href="https://waylonwalker.com/kelseyhightower-nocode/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across nocode from kelseyhightower, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/kelseyhightower/nocode&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nocode&lt;/a&gt; from &lt;a href=&#34;https://github.com/kelseyhightower&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kelseyhightower&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;The best way to write secure and reliable applications. Write nothing; deploy nowhere.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>New Machine for developing Tests with TestProject.io</title>
    <id>https://waylonwalker.com/new-machine-tpio/</id>
    <updated>2020-07-25T05:00:00Z</updated>
    <published>2020-07-25T05:00:00Z</published>
    <link href="https://waylonwalker.com/new-machine-tpio/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I setup a new machine on Digital Ocean to use with TestProject.io, Here are my installation notes.</summary>
    <content type="html">&lt;p&gt;Today I setup a new machine on Digital Ocean to use with TestProject.io,  Here are my installation notes.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt update &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt upgrade -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install zsh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chsh zsh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sh -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -fsSL https://starship.rs/install.sh &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;eval &amp;#34;$(starship init zsh)&amp;#34;&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; ~/.zshrc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# python&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install python3-pip -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;alias python=python3&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; ~/.zshrc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;alias pip=pip3&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; ~/.zshrc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# pipx&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install python3-venv&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install pipx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx install black&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx install shell-functools&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install ipython&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# docker&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -fsSL https://download.docker.com/linux/ubuntu/gpg &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo apt-key add -&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo add-apt-repository &lt;span class=&#34;s2&#34;&gt;&amp;#34;deb [arch=amd64] https://download.docker.com/linux/ubuntu &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;lsb_release -cs&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; stable&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install docker-ce&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# docker-compose&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo curl -L &lt;span class=&#34;s2&#34;&gt;&amp;#34;https://github.com/docker/compose/releases/download/1.25.5/docker-compose-&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;uname -s&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;uname -m&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; -o /usr/local/bin/docker-compose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chmod +x /usr/local/bin/docker-compose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# configure git&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config --global user.name &lt;span class=&#34;s2&#34;&gt;&amp;#34;Waylon Walker&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config --global user.email waylon@waylonwalker.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# fzf&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone --depth &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; https://github.com/junegunn/fzf.git ~/.fzf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/.fzf/install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# forgit&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/wfxr/forgit ~/.forgit&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;. ~/.forgit/forgit.plugin.zsh&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; ~/.zshrc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ag&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install silversearcher-ag&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# bat&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install bat&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alias cat=batcat&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; ~/.zshrc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# testproject.io tokens&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;export TP_AGENT_ALIAS=&amp;#34;Digital Ocean Agent&amp;#34;&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34; ~/.zshrc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;echo &amp;#34;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;TP_AGENT_API_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;lt;your-key&amp;gt; &amp;gt;&amp;gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34; ~/.zshrc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;echo &amp;#34;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;TP_DEV_TOKEN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;lt;your-token&amp;gt; &amp;gt;&amp;gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34; ~/.zshrc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;envsubst &amp;lt; .github/ci/docker-compose.yml &amp;gt; docker-compose.yml&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# .github/ci/docker-compose.yml&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;3.1&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;services&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;testproject-agent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;testproject/agent:latest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;container_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;testproject-agent&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;depends_on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;chrome&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;firefox&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;TP_API_KEY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;${TP_API_KEY}&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;TP_AGENT_ALIAS&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;GitHub Action Agent&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;TP_AGENT_TEMP&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;TP_SDK_PORT&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;8686&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;CHROME&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;chrome:4444&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;CHROME_EXT&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;localhost:5555&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;FIREFOX&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;firefox:4444&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;FIREFOX_EXT&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;localhost:6666&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;8585:8585&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;8686:8686&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;chrome&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;selenium/standalone-chrome&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;/dev/shm:/dev/shm&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;5555:4444&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;firefox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;selenium/standalone-firefox&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;/dev/shm:/dev/shm&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;6666:4444&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker-compose -f docker-compose.yml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>🐍 Practice Python Online</title>
    <id>https://waylonwalker.com/practice-python-online/</id>
    <updated>2020-07-25T05:00:00Z</updated>
    <published>2020-07-25T05:00:00Z</published>
    <link href="https://waylonwalker.com/practice-python-online/" rel="alternate" type="text/html"></link>
    <summary type="text">When learning a new skill it&#39;s important to practice along the way. In order for me to show up to practice I need to make it easy to show up. An easy way to...</summary>
    <content type="html">&lt;p&gt;When learning a new skill it’s important to practice along the way. In order&#xA;for me to show up to practice I need to make it easy to show up. An easy way to&#xA;show up to practice with python is to use an online repl.  With these you can&#xA;try out something quick. Sometimes I see snippets from blogs or tweets and I&#xA;need to try the out for myself to really understand.&lt;/p&gt;&#xA;&lt;p&gt;When learning a new skill it’s important to practice along the way. In order&#xA;for me to show up to practice I need to make it easy to show up. An easy way to&#xA;show up to practice with python is to use an online repl. With these, you can&#xA;try out something quick. Sometimes I see snippets from blogs or tweets and I&#xA;need to try them out for myself to really understand.&lt;/p&gt;&#xA;&lt;h2 id=&#34;three-online-repls&#34;&gt;Three online REPLS &lt;a href=&#34;#three-online-repls&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here are three different options that I have used in the past to try out&#xA;something at some various levels. I am sure there are plenty more, but these&#xA;are three that I have tried. I am not covering all of them, because It’s been a&#xA;while since I have used one other than &lt;a href=&#34;https://replit.com&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/replit.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/replit.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;replit.com&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://python.org/shell/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/python.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/python.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;python.org/shell/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://replit.com&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/replit.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/replit.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;replit.com&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pythonanywhere.com&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/pythonanywhere.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/pythonanywhere.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pythonanywhere.com&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;replit&#34;&gt;replit &lt;a href=&#34;#replit&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://replit.com&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/replit.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/replit.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;replit.com&lt;/a&gt; has been my go-to place to practice python&#xA;away from my local machine. It’s super quick to spin up a new “project” add&#xA;files, install libraries, and run a script. It’s not quite as nice as having&#xA;all of my personal keyboard shortcuts and extensions, but its the closest thing&#xA;I have found.&lt;/p&gt;&#xA;&lt;h2 id=&#34;show-up-for-practice&#34;&gt;Show up for Practice &lt;a href=&#34;#show-up-for-practice&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The best way to learn something new in tech is to get your own fingers on the&#xA;keyboard and start trying new things. Reading and watching videos is great to&#xA;start, but to get a deep understanding for yourself you need to get your&#xA;fingers on the keyboard. Make it easy for yourself and find several options&#xA;that work well for you. &lt;a href=&#34;https://replit.com&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/replit.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/replit.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;replit.com&lt;/a&gt; is one tool that works&#xA;well for me.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Kedro Catalog</title>
    <id>https://waylonwalker.com/kedro-catalog/</id>
    <updated>2020-07-24T05:00:00Z</updated>
    <published>2020-07-24T05:00:00Z</published>
    <link href="https://waylonwalker.com/kedro-catalog/" rel="alternate" type="text/html"></link>
    <summary type="text">I am exploring a kedro catalog meta data hook</summary>
    <content type="html">&lt;p&gt;I am exploring a kedro catalog meta data hook, these are some notes about what I am thinking.&lt;/p&gt;&#xA;&lt;h2 id=&#34;process&#34;&gt;Process &lt;a href=&#34;#process&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;metadata will be attached to the dataset object under a &lt;code&gt;.metadata&lt;/code&gt; attribute&lt;/li&gt;&#xA;&lt;li&gt;metadata will be updated &lt;code&gt;after_node_run&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;metadata will be empty until a pipeline is ran with the hook on&lt;/li&gt;&#xA;&lt;li&gt;optionally a function to add metadata will be added&lt;/li&gt;&#xA;&lt;li&gt;metadata will be stored in a file next to the &lt;code&gt;filepath&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;meta&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;problems-this-hook-should-solve&#34;&gt;Problems This Hook Should solve &lt;a href=&#34;#problems-this-hook-should-solve&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;what datasets have a columns with &lt;code&gt;sales&lt;/code&gt; in the name&lt;/li&gt;&#xA;&lt;li&gt;what datasets were updated after last tuesday&lt;/li&gt;&#xA;&lt;li&gt;which pipeline node created this dataset&lt;/li&gt;&#xA;&lt;li&gt;how many rows are in this dataset (without reloading all datasets)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;implementation-details&#34;&gt;implementation details &lt;a href=&#34;#implementation-details&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;metadata will be attached to each dataset as a dictionary&lt;/li&gt;&#xA;&lt;li&gt;list/dict comprehensions can be used to make queries&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;metadata-to-capture&#34;&gt;Metadata to Capture &lt;a href=&#34;#metadata-to-capture&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;try pandas method -&amp;gt; try spark -&amp;gt; try dict/list -&amp;gt; none&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;column names&lt;/li&gt;&#xA;&lt;li&gt;length&lt;/li&gt;&#xA;&lt;li&gt;Null count&lt;/li&gt;&#xA;&lt;li&gt;created_by node name&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;database&#34;&gt;Database? &lt;a href=&#34;#database&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Is there an easy way to create a nosql database in memory from a a list of dictionaries?&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://pypi.org/project/list-dict-DB/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/pypi.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/pypi.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;list-dict-DB&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://dataset.readthedocs.io/en/latest/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/dataset.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/dataset.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dataset&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tinydb.readthedocs.io/en/latest/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/tinydb.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/tinydb.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;TinyDB&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Thaiane Thaiane</title>
    <id>https://waylonwalker.com/thaiane-thaiane/</id>
    <updated>2020-07-23T00:06:58Z</updated>
    <published>2020-07-23T00:06:58Z</published>
    <link href="https://waylonwalker.com/thaiane-thaiane/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about Thaiane, an amazing project by Thaiane. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/Thaiane/Thaiane&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Thaiane&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/Thaiane&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Thaiane&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ sindresorhus css-in-readme-like-wat</title>
    <id>https://waylonwalker.com/sindresorhus-css-in-readme-like-wat/</id>
    <updated>2020-07-22T14:20:12Z</updated>
    <published>2020-07-22T14:20:12Z</published>
    <link href="https://waylonwalker.com/sindresorhus-css-in-readme-like-wat/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out sindresorhus and their project css-in-readme-like-wat.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/sindresorhus&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sindresorhus&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/sindresorhus/css-in-readme-like-wat&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;css-in-readme-like-wat&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Style your readme using CSS with this simple trick&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ gautamkrishnar blog-post-workflow</title>
    <id>https://waylonwalker.com/gautamkrishnar-blog-post-workflow/</id>
    <updated>2020-07-21T23:05:41Z</updated>
    <published>2020-07-21T23:05:41Z</published>
    <link href="https://waylonwalker.com/gautamkrishnar-blog-post-workflow/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by blog-post-workflow from gautamkrishnar.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/gautamkrishnar/blog-post-workflow&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;blog-post-workflow&lt;/a&gt; from &lt;a href=&#34;https://github.com/gautamkrishnar&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gautamkrishnar&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Show your latest blog posts from any sources or StackOverflow activity or Youtube Videos on your GitHub profile/project readme automatically using the RSS feed&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ commitizen-tools commitizen</title>
    <id>https://waylonwalker.com/commitizen-tools-commitizen/</id>
    <updated>2020-07-21T19:49:18Z</updated>
    <published>2020-07-21T19:49:18Z</published>
    <link href="https://waylonwalker.com/commitizen-tools-commitizen/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on commitizen by commitizen-tools.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/commitizen-tools/commitizen&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;commitizen&lt;/a&gt; by &lt;a href=&#34;https://github.com/commitizen-tools&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;commitizen-tools&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Create committing rules for projects 🚀 auto bump versions ⬆️ and auto changelog generation 📂&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>How python tools configure</title>
    <id>https://waylonwalker.com/how-python-tools-config/</id>
    <updated>2020-07-21T05:00:00Z</updated>
    <published>2020-07-21T05:00:00Z</published>
    <link href="https://waylonwalker.com/how-python-tools-config/" rel="alternate" type="text/html"></link>
    <summary type="text">Mypy&#39;s config parser seems to be one of the most complex. This is likely in part to it having the largest backwards compatability of all projects that I...</summary>
    <content type="html">&lt;h2 id=&#34;mypy&#34;&gt;mypy &lt;a href=&#34;#mypy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Mypy’s config parser seems to be one of the most complex.  This is likely in part to it having the largest backwards compatability of all projects that I looked at.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/python/mypy/blob/master/mypy/config_parser.py&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mypy/config_parser&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;flake8&#34;&gt;flake8 &lt;a href=&#34;#flake8&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/PyCQA/flake8/blob/master/src/flake8/options/config.py&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;options/config.py&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;black&#34;&gt;black &lt;a href=&#34;#black&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/psf/black/blob/master/src/black/__init__.py#L277-L331&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;black&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;portray&#34;&gt;portray &lt;a href=&#34;#portray&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;only uses pyproject.toml&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/timothycrosley/portray/blob/main/portray/config.py&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;portray/config.py&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;interrogate&#34;&gt;interrogate &lt;a href=&#34;#interrogate&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;only uses pyproject.toml&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Edit On GitHub</title>
    <id>https://waylonwalker.com/edit-on-github/</id>
    <updated>2020-07-18T05:00:00Z</updated>
    <published>2020-07-18T05:00:00Z</published>
    <link href="https://waylonwalker.com/edit-on-github/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently added a button to my blog, and subsequently my posts on DEV.to. It&#39;s the best thing that I have done for it in a while. It makes it so easy to do...</summary>
    <content type="html">&lt;p&gt;I recently added a button to my blog, and subsequently my posts on&#xA;&lt;a href=&#34;https://dev.to/waylonwalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/dev.to.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/dev.to.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;DEV.to&lt;/a&gt;.  It’s the best thing that I have done&#xA;for it in a while.  It makes it so easy to do quick edits.&lt;/p&gt;&#xA;&lt;h2 id=&#34;finding-errors&#34;&gt;finding errors &lt;a href=&#34;#finding-errors&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I refer back to my old posts quite a bit, sometimes I find errors in them.&#xA;Honestly most of the time its too much effort to load up my editor make the&#xA;change and &lt;code&gt;git add&lt;/code&gt; and &lt;code&gt;git commit&lt;/code&gt;.  It’s not much, but when I am referring&#xA;to my own post generally I am just trying to get something done and don’t have&#xA;time for that.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-slug&#34;&gt;The slug &lt;a href=&#34;#the-slug&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The slug that I am getting from gatsby is formatted as &lt;code&gt;/blog/this-post/&lt;/code&gt;.&#xA;Note the trailing slash and missing file extension, thats where the&#xA;&lt;code&gt;${slug.slice(0, -1)}.md&lt;/code&gt; comes in.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-full-link&#34;&gt;The Full Link &lt;a href=&#34;#the-full-link&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;GitHub makes it super easy to form a URL that puts you right into edit mode on&#xA;the exact post you are looking for.  This is format for the URL… you can&#xA;always figure it out easily by clicking edit on one.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;https://github.com/&amp;lt;user&amp;gt;/&amp;lt;repo&amp;gt;/edit/&amp;lt;branch&amp;gt;/&amp;lt;filepath&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;the-final-result&#34;&gt;The Final Result &lt;a href=&#34;#the-final-result&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Wrapping that URL up in a short snippet gave me the following result.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;flex&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;justify&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;center&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;textAlign&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;center&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;margin&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;3rem auto&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;span&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;role&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;img&amp;#39;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;aria&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;👀&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;see&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;an&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;issue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;edit&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;post&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;on&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`https://github.com/WaylonWalker/waylonwalkerv2/edit/main/src/pages&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;slug&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;slice&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;.md`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;alt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;edit post url&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;na&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;edit this post&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;FiGithub&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;GitHub&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dev-to-uploads.s3.amazonaws.com/i/sgqd23rbbusjpfxqr7bl.PNG&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dev-to-uploads.s3.amazonaws.com/i/sgqd23rbbusjpfxqr7bl.PNG&#34; alt=&#34;Edit on GitHub&#34;/ data-glightbox=&#34;description: Edit on GitHub&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;I know better than hard coding the GitHub url in, but I did it anyway, my&#xA;personal site gets to be a bit of a rats nest of hotfixes over time.&lt;/p&gt;&#xA;&lt;p&gt;This was a super quick change that brought me a lot of value without much&#xA;effort.  I will probably change up the styling/layout of it in the future. For&#xA;now I have something that functions, and I can get back to creating content.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ChristopherBiscardi toast</title>
    <id>https://waylonwalker.com/christopherbiscardi-toast/</id>
    <updated>2020-07-16T04:11:23Z</updated>
    <published>2020-07-16T04:11:23Z</published>
    <link href="https://waylonwalker.com/christopherbiscardi-toast/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out ChristopherBiscardi and their project toast.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/ChristopherBiscardi&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ChristopherBiscardi&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/ChristopherBiscardi/toast&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;toast&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Moved! now at &lt;a href=&#34;https://github.com/toastdotdev/toast&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/toastdotdev/toast&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Why use a cms</title>
    <id>https://waylonwalker.com/why-use-cms/</id>
    <updated>2020-07-14T03:00:00Z</updated>
    <published>2020-07-14T03:00:00Z</published>
    <link href="https://waylonwalker.com/why-use-cms/" rel="alternate" type="text/html"></link>
    <summary type="text">When first learning to code its very common to hard code everything right into the code. This happens with most folks in just about any language. Whether its...</summary>
    <content type="html">&lt;p&gt;When first learning to code its very common to hard code everything right into&#xA;the code. This happens with most folks in just about any language. Whether its&#xA;&lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;HTML&lt;/a&gt; or markdown for front end content, or even hardcoding parameters in our&#xA;backend languages like python, or node.js.&lt;/p&gt;&#xA;&lt;h2 id=&#34;-whats-wrong-with-hard-coding-everything&#34;&gt;🤷‍♀️ What’s wrong with hard coding everything? &lt;a href=&#34;#-whats-wrong-with-hard-coding-everything&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Hard coding everything right into your code makes it really hard for&#xA;non-technical collaborators to join. It makes it nearly impossible to hand&#xA;websites off to clients without needing to come back for routine updates.&lt;/p&gt;&#xA;&lt;p&gt;The cms generally come with a rich content editor that feels more like&#xA;something most folks are used to. There are buttons for changing the font,&#xA;font-size, adding images, bold, italics, etc.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sometimes-i-dont-feel-technical&#34;&gt;Sometimes I don’t feel technical &lt;a href=&#34;#sometimes-i-dont-feel-technical&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Even when you are developing for a technical audience there is a layer of&#xA;polish that comes from giving them a nice interface to edit their content in.&#xA;YouTube doesn’t have you manually inserting records into the database to add a&#xA;comment, or upload a new video, nor would anyone expect you to.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dev-to-uploads.s3.amazonaws.com/i/sgqd23rbbusjpfxqr7bl.PNG&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dev-to-uploads.s3.amazonaws.com/i/sgqd23rbbusjpfxqr7bl.PNG&#34; alt=&#34;Edit on GitHub&#34;/ data-glightbox=&#34;description: Edit on GitHub&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I recently added an edit button on my posts that allows me to jump right into&#xA;edit on GitHub.  I have used this so much, I should have done this long ago!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;There are times when I want to edit my blog on the go from my phone while on&#xA;the go. I use &lt;a href=&#34;https://forestry.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/forestry.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/forestry.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;forestry.io&lt;/a&gt; to do this for the most part.&#xA;It gives me an image uploader, and a markdown editor to edit this blog right&#xA;from my phone.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/0555114b-1c25-41c4-803b-43d0a528e3cc.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/0555114b-1c25-41c4-803b-43d0a528e3cc.png&#34; alt=&#34;forestry editor&#34;/ data-glightbox=&#34;description: forestry editor&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;My Blog on forestry.io&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;what-do-they-output&#34;&gt;What do they output &lt;a href=&#34;#what-do-they-output&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There are a number of different CMS’s out there, and I haven’t touched most of&#xA;them. Some write content into a MySQL database while others kick out HTML or&#xA;markdown to a &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; repo. I prefer the ones built off of a git repo for my site&#xA;because I am cheap and I am not making anything from this blog yet, but you&#xA;might want to check into some of the other options if you plan on handing your&#xA;site off to a client.&lt;/p&gt;&#xA;&lt;h2 id=&#34;-pricing&#34;&gt;🤑 pricing &lt;a href=&#34;#-pricing&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Be aware of the various pricing models. They are priced every which way, per&#xA;content editor, per site, per number of edits. Some offer free versions. Some&#xA;are open source but require you to host it somewhere. Before you pick one make&#xA;sure that you know your requirements.&lt;/p&gt;&#xA;&lt;h2 id=&#34;cmss-are-more-norm-than-i-realized&#34;&gt;CMS’s are more norm than I realized &lt;a href=&#34;#cmss-are-more-norm-than-i-realized&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;When I was first starting into web development, I was completely unaware of the&#xA;concept of a CMS. I had thought that content needs to be in HTML, or markdown,&#xA;with a few specific places that users could edit. This may have been the case&#xA;many years ago, but not anymore. The first time I ever designed a website for&#xA;someone other than myself I got quite a shock when I realized how many edits&#xA;they wanted, and how un-appealing markdown is for most.&lt;/p&gt;&#xA;&lt;h2 id=&#34;where-cmss-fall-short-&#34;&gt;Where CMS’s fall short 🍂 &lt;a href=&#34;#where-cmss-fall-short-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Please correct me if I am wrong here, I would love to be wrong on this. CMS’s&#xA;are not for developing the whole site. They hold data for content like site&#xA;title, description, menu items, or blog posts. They don’t necessarily give the&#xA;user a full website designer, with drag and drop, and every widget imaginable.&#xA;The web developer still needs to implement the site design and data&#xA;integration.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ rikschennink fitty</title>
    <id>https://waylonwalker.com/rikschennink-fitty/</id>
    <updated>2020-07-13T12:40:00Z</updated>
    <published>2020-07-13T12:40:00Z</published>
    <link href="https://waylonwalker.com/rikschennink-fitty/" rel="alternate" type="text/html"></link>
    <summary type="text">I like rikschennink&#39;s project fitty.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/rikschennink&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rikschennink’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/rikschennink/fitty&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fitty&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;✨ Makes text fit perfectly&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>🐍 Parsing RSS feeds with Python</title>
    <id>https://waylonwalker.com/parsing-rss-python/</id>
    <updated>2020-07-13T03:00:00Z</updated>
    <published>2020-07-13T03:00:00Z</published>
    <link href="https://waylonwalker.com/parsing-rss-python/" rel="alternate" type="text/html"></link>
    <summary type="text">I am looking into a way to replace my google reader experience that I had back in 2013 before google took it from us. I am starting by learning how to parse...</summary>
    <content type="html">&lt;p&gt;I am looking into a way to replace my google reader experience that I had back&#xA;in 2013 before google took it from us.  I am starting by learning how to parse&#xA;feeds with python, and without much previous knowledge, it proved to be much&#xA;easier than anticipated thanks to the &lt;code&gt;feedparser&lt;/code&gt; library.&lt;/p&gt;&#xA;&lt;p&gt;This is how I used python to parse rss and setup my own custom feed.&lt;/p&gt;&#xA;&lt;h2 id=&#34;install&#34;&gt;Install &lt;a href=&#34;#install&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Install the feedparser library.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda create -n reader &lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;3.8 -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; activate reader&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install feedparser&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;get-the-content&#34;&gt;Get the content &lt;a href=&#34;#get-the-content&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;feedparser&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;feed&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;feedparser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https://waylonwalker.com/rss.xml&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;the-feed-object&#34;&gt;The feed object &lt;a href=&#34;#the-feed-object&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The feed is a feedparser.FeedParserDict.  For all intents and purposes this&#xA;seems to just behave like a dict with the following &lt;code&gt;keys()&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;feed&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;keys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;feed&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;entries&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;bozo&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;headers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;etag&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;href&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;status&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;encoding&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;version&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;namespaces&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;content&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;feed&lt;/strong&gt; has some general information about the rss feed, but the meat of the&#xA;feed is in &lt;strong&gt;entries&lt;/strong&gt;.  The rest of the keys weren’t all that useful for me at&#xA;the moment.&lt;/p&gt;&#xA;&lt;h2 id=&#34;pulling-multiple-feeds&#34;&gt;pulling multiple feeds &lt;a href=&#34;#pulling-multiple-feeds&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I grabbed a few popular RSS feeds that I was familiar with to get started.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;urls&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https://waylonwalker.com/rss.xml&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://joelhooks.com/rss.xml&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://swyx.io/rss.xml&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;feeds&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;feedparser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;entries&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;url&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;urls&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I checked out the keys, all three had the following keys.  Mine also had the&#xA;full post under &lt;code&gt;&amp;#39;content&amp;#39;&lt;/code&gt;, this is because I added an extra &lt;code&gt;custom_element&lt;/code&gt;&#xA;for publishing to &lt;code&gt;dev.to&lt;/code&gt; from an RSS feed.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;feeds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;keys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dict_keys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;title_detail&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;summary&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;summary_detail&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;links&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;link&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;guidislink&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;published&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;published_parsed&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;note-devtofeed&#34;&gt;NOTE: dev.to/feed &lt;a href=&#34;#note-devtofeed&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I also pulled the &lt;a href=&#34;https://dev.to/feed&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/dev.to.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/dev.to.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dev.to/feed&lt;/a&gt;.  Since is it setup for&#xA;more Authors it had a few extra keys.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;feedparser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https://dev.to/feed&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;keys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dict_keys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;title_detail&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;authors&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;author&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;author_detail&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;published&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;published_parsed&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;links&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;, &amp;#39;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;link&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;, &amp;#39;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;, &amp;#39;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;guidislink&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;, &amp;#39;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;summary&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;, &amp;#39;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;summary_detail&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;, &amp;#39;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tags&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;combining-feeds&#34;&gt;Combining Feeds &lt;a href=&#34;#combining-feeds&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now that I have a list of feeds, I can create a single feed sorted by date with&#xA;a list comprehension.  Note I did need to pull in &lt;code&gt;dateutil.parser&lt;/code&gt; to convert&#xA;the date strings to datetime objects to be sorted.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;dateutil.parser&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;feed&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;item&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;feed&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;feeds&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;item&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;feed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;feed&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sort&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;lambda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dateutil&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;published&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;reverse&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;115&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;date&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;published&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;link&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;link&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]}&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;feed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;🙋&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\u200d&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;♂️ Can Anyone Explain Twitter Cards to me?&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;date&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Sat, 11 Jul 2020 03:00:00 GMT&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;link&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://waylonwalker.com/explain-twitter-cards/&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;How I Built My GitHub Profile&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;date&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Fri, 10 Jul 2020 03:00:00 GMT&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;link&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://waylonwalker.com/my-github-profile/&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Lessons and Regrets from My $25000 Launch&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;date&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Fri, 03 Jul 2020 04:06:47 GMT&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;link&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://swyx.io/writing/coding-career-launch&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;SLIDES - understanding python *args and **kwargs&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;date&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Thu, 02 Jul 2020 05:00:00 GMT&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;link&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://waylonwalker.com/python-args-kwargs-slides/&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Launching the Coding Career Handbook!&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;date&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Wed, 01 Jul 2020 13:08:37 GMT&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;link&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://swyx.io/writing/launching-coding-career&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Gracefully adopt kedro, the catalog&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;date&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Mon, 29 Jun 2020 03:00:00 GMT&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;link&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://waylonwalker.com/graceful-kedro-catalog/&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;🤓 What&amp;#39;s on your GitHub Profile&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;date&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Mon, 29 Jun 2020 03:00:00 GMT&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;link&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://waylonwalker.com/whats-on-your-github-profile/&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Versioned Docs in 30 Seconds with Amplify Console&amp;#39;s Branch Subdomains&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;date&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Fri, 26 Jun 2020 16:34:09 GMT&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;link&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://swyx.io/writing/amplify-console-branch-subdomains&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;What&amp;#39;s New in React&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;date&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Wed, 24 Jun 2020 00:00:00 GMT&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;link&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://swyx.io/speaking/react-whats-new&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Coding Careers - Vincit&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;date&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Wed, 24 Jun 2020 00:00:00 GMT&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;link&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://swyx.io/speaking/coding-careers-vincit&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;decentralized-feed&#34;&gt;Decentralized Feed &lt;a href=&#34;#decentralized-feed&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I think the idea of RSS is super cool, and the idea that I can potentially&#xA;create my own custom platform-agnostic decentralized feed is pretty cool.  I&#xA;would love to have a google reader like experience back.&lt;/p&gt;&#xA;&lt;p&gt;This post was super fun to explore.  I used an external library (&lt;code&gt;feedparser&lt;/code&gt;)&#xA;to pull in the feeds, but other than that It was all vanilla python 3.8.  In&#xA;DataScience we tend to get very &lt;code&gt;DataFrame&lt;/code&gt; heavy and I miss working with&#xA;vanilla datatypes sometimes.&lt;/p&gt;&#xA;&lt;h2 id=&#34;trying-to-step-up-your-python-game&#34;&gt;Trying to step up your python game &lt;a href=&#34;#trying-to-step-up-your-python-game&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;While trying to step up your skills you will need lots of practice.  Its good&#xA;to have several options to try out ideas quickly.  I often use&#xA;&lt;a href=&#34;https://replit.com&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/replit.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/replit.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://replit.com&lt;/a&gt;, check out this post to see how I use it.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/practice-python-online/&#34; class=&#34;wikilink&#34; data-title=&#34;🐍 Practice Python Online&#34; data-description=&#34;When learning a new skill it&amp;#39;s important to practice along the way. In order for me to show up to practice I need to make it easy to show up. An easy way to...&#34; data-date=&#34;2020-07-25&#34; data-preview=&#34;When learning a new skill it&amp;#39;s important to practice along the way. In order for me to show up to practice I need to make it easy to show up. An easy way to...&#34;&gt;🐍 Practice Python Online&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Not a sponsor REPL.it is a great way to practice.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ saturn-abhishek awesome-github-profile-readme</title>
    <id>https://waylonwalker.com/saturn-abhishek-awesome-github-profile-readme/</id>
    <updated>2020-07-13T01:06:30Z</updated>
    <published>2020-07-13T01:06:30Z</published>
    <link href="https://waylonwalker.com/saturn-abhishek-awesome-github-profile-readme/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out awesome-github-profile-readme by saturn-abhishek. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/saturn-abhishek/awesome-github-profile-readme&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;awesome-github-profile-readme&lt;/a&gt; by &lt;a href=&#34;https://github.com/saturn-abhishek&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;saturn-abhishek&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;😎 A curated list of awesome GitHub Profile which updates in real time&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ abhisheknaiidu awesome-github-profile-readme</title>
    <id>https://waylonwalker.com/abhisheknaiidu-awesome-github-profile-readme/</id>
    <updated>2020-07-13T01:06:30Z</updated>
    <published>2020-07-13T01:06:30Z</published>
    <link href="https://waylonwalker.com/abhisheknaiidu-awesome-github-profile-readme/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered awesome-github-profile-readme by abhisheknaiidu, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/abhisheknaiidu/awesome-github-profile-readme&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;awesome-github-profile-readme&lt;/a&gt; by &lt;a href=&#34;https://github.com/abhisheknaiidu&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;abhisheknaiidu&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;😎 A curated list of awesome GitHub Profile which updates in real time&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ajeetdsouza zoxide</title>
    <id>https://waylonwalker.com/ajeetdsouza-zoxide/</id>
    <updated>2020-07-12T20:37:45Z</updated>
    <published>2020-07-12T20:37:45Z</published>
    <link href="https://waylonwalker.com/ajeetdsouza-zoxide/" rel="alternate" type="text/html"></link>
    <summary type="text">zoxide by ajeetdsouza is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/ajeetdsouza/zoxide&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;zoxide&lt;/a&gt; by &lt;a href=&#34;https://github.com/ajeetdsouza&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ajeetdsouza&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;A smarter cd command. Supports all major shells.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ mscoutermarsh mscoutermarsh</title>
    <id>https://waylonwalker.com/mscoutermarsh-mscoutermarsh/</id>
    <updated>2020-07-12T13:30:48Z</updated>
    <published>2020-07-12T13:30:48Z</published>
    <link href="https://waylonwalker.com/mscoutermarsh-mscoutermarsh/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered mscoutermarsh by mscoutermarsh, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/mscoutermarsh/mscoutermarsh&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mscoutermarsh&lt;/a&gt; by &lt;a href=&#34;https://github.com/mscoutermarsh&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mscoutermarsh&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;SECRETS!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Reader-2020</title>
    <id>https://waylonwalker.com/reader-2020/</id>
    <updated>2020-07-12T05:00:00Z</updated>
    <published>2020-07-12T05:00:00Z</published>
    <link href="https://waylonwalker.com/reader-2020/" rel="alternate" type="text/html"></link>
    <summary type="text">Notes about my reader idea</summary>
    <content type="html">&lt;h2 id=&#34;inputs&#34;&gt;Inputs &lt;a href=&#34;#inputs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The input will be a yaml file containing a list of &lt;code&gt;Items&lt;/code&gt; you want to stay up to date with.  Inside each item will be a url, and weight.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;email&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;max-entries&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;recipients&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;waylon@waylonwalker.com&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;markdown&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;max-entries&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;output&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;README.md&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;max-entries&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1000&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;output&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;feeds/feed.json&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;rss&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;max-entries&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1000&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;output&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;feeds/feed.xml&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;html&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;max-entries&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;output&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;index.html&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;Waylon Walker&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;weight&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://waylonwalker.com/rss.xml&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;@_WaylonWalker&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;weight&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;twitter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://twitter.com/_waylonwalker&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;DEV Waylon Walker&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;weight&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://dev.to/waylonwalker&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;Stack Overflow Kedro&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;weight&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://stackoverflow.com/questions/tagged/kedro&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;Kedro GitHub&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;weight&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://github.com/kedro-org/kedro&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Kedro Pypi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;weight&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://pypi.org/project/kedro/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;types&#34;&gt;Types &lt;a href=&#34;#types&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;rss feed (primary source)&lt;/li&gt;&#xA;&lt;li&gt;youtube feed&lt;/li&gt;&#xA;&lt;li&gt;Stack Overflow tags&lt;/li&gt;&#xA;&lt;li&gt;GitHub repo activity&lt;/li&gt;&#xA;&lt;li&gt;pypi release&lt;/li&gt;&#xA;&lt;li&gt;dev.to post&lt;/li&gt;&#xA;&lt;li&gt;Twitter Search # user will need an api key&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;methodology&#34;&gt;Methodology&lt;/h1&gt;&#xA;&lt;p&gt;Each url will be pulled in and parsed into a standard data scructure.  Some items may yield special feaures, a schemaless/nosql datastructure may be best.  Pipeline will decide to how to weight posts based on users weight, recent position on feed, .&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;a_raw (raw plain text / json items) -&amp;gt; b_int (cleaned items) -&amp;gt; c_pri (single feed of items) -&amp;gt; d_fea (weighted feed of items) -&amp;gt; e_out (requested output formats)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;output&#34;&gt;output &lt;a href=&#34;#output&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Pipeline outputs will be email, json, markdown, xml, &lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;html&lt;/a&gt;.  Each will be able to be configured by the config file (max-entries, output location).&lt;/p&gt;&#xA;&lt;h2 id=&#34;running&#34;&gt;Running &lt;a href=&#34;#running&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Users will be able to create their own reader.  Here is a list of possiblilites.  Users will not have the pipeline inside their repo. It will pull the pipeline from a package repo, pypi, dockerhub, GitHub.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;fork a template repo (might be cumbersome to update)&lt;/li&gt;&#xA;&lt;li&gt;use a GitHub action from the Marketplace (easier to update)&lt;/li&gt;&#xA;&lt;li&gt;GH actions will run the pipeline on a schedule&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ timburgan timburgan</title>
    <id>https://waylonwalker.com/timburgan-timburgan/</id>
    <updated>2020-07-11T04:09:09Z</updated>
    <published>2020-07-11T04:09:09Z</published>
    <link href="https://waylonwalker.com/timburgan-timburgan/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? timburgan by timburgan.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/timburgan/timburgan&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;timburgan&lt;/a&gt; by &lt;a href=&#34;https://github.com/timburgan&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;timburgan&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>🤓 What&#39;s on your GitHub Profile</title>
    <id>https://waylonwalker.com/whats-on-your-github-profile/</id>
    <updated>2020-07-11T03:00:00Z</updated>
    <published>2020-07-11T03:00:00Z</published>
    <link href="https://waylonwalker.com/whats-on-your-github-profile/" rel="alternate" type="text/html"></link>
    <summary type="text">I ran this post on dev.to and got a great response of great examples, check it out.</summary>
    <content type="html">&lt;p&gt;I ran this post on dev.to and got a great response of great examples, &lt;a href=&#34;https://dev.to/waylonwalker/what-s-on-your-github-profile-40p3&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/dev.to.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/dev.to.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;check it out&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dev.to/waylonwalker/what-s-on-your-github-profile-40p3&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/whats-on-your-github-profile.png&#34; alt=&#34;dev.to whats-on-your-github-profile&#34;/ data-glightbox=&#34;description: dev.to whats-on-your-github-profile&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The GitHub profile feature just went live for a subset of users.  Simply creating a repo named after your username, and clicking share to Profile on the sidebar will create a custom profile that shows up just above your pinned projects.&lt;/p&gt;&#xA;&lt;p&gt;I am still trying to figure out what to put on mine, but this is what I have so far.  I feel like mine is a bit big at the moment, I don’t like that my pinned repos end up blow the fold.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/waylonwalker&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dev-to-uploads.s3.amazonaws.com/i/pk1ostnnpn9dmlbs4emv.png&#34; alt=&#34;my github profile&#34;/ data-glightbox=&#34;description: my github profile&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;updated&#34;&gt;updated &lt;a href=&#34;#updated&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I tightened mine up and took inspiration from a few others.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/waylonwalker&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dev-to-uploads.s3.amazonaws.com/i/zl9o2kmxoy2c7xv16pbz.png&#34; alt=&#34;Alt Text&#34;/ data-glightbox=&#34;description: Alt Text&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Share a screenshot and link of yours &lt;a href=&#34;https://dev.to/waylonwalker/what-s-on-your-github-profile-40p3&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/dev.to.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/dev.to.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;on dev&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;updated-again&#34;&gt;updated again &lt;a href=&#34;#updated-again&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Updated with a list of latest Twitter followers, using GitHub actions.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dev-to-uploads.s3.amazonaws.com/i/f8fcm9dvvozj4rzh4376.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dev-to-uploads.s3.amazonaws.com/i/f8fcm9dvvozj4rzh4376.png&#34; alt=&#34;waylonwalkers GitHub profile&#34;/ data-glightbox=&#34;description: waylonwalkers GitHub profile&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>🙋‍♂️ Can Anyone Explain Twitter Cards to me?</title>
    <id>https://waylonwalker.com/explain-twitter-cards/</id>
    <updated>2020-07-11T03:00:00Z</updated>
    <published>2020-07-11T03:00:00Z</published>
    <link href="https://waylonwalker.com/explain-twitter-cards/" rel="alternate" type="text/html"></link>
    <summary type="text">Can someone explain how or why twitter cards render differently from device to device? I do understand that twitter cards a built from meta tags, the full...</summary>
    <content type="html">&lt;p&gt;Can someone explain how or why twitter cards render differently from device to device?  I do understand that twitter cards a built from meta tags, the full list can be found in their &lt;a href=&#34;https://developer.twitter.com/en/docs/tweets/optimize-with-cards/overview/markup&#34;&gt;docs&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;rendered-on-mobile&#34;&gt;Rendered on Mobile &lt;a href=&#34;#rendered-on-mobile&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Mobile Looks fine.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/twitter-card-rendered.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/twitter-card-rendered.png&#34; alt=&#34;rendered card&#34;/ data-glightbox=&#34;description: rendered card&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;not-rendered-on-desktop&#34;&gt;Not Rendered on Desktop &lt;a href=&#34;#not-rendered-on-desktop&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;On Desktop it is not picking up the image.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/twitter-card-rendered.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/twitter-card-rendered.png&#34; alt=&#34;not rendered card&#34;/ data-glightbox=&#34;description: not rendered card&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;twitter-card-validator&#34;&gt;Twitter Card Validator &lt;a href=&#34;#twitter-card-validator&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The Validator renders the card correctly.  I tried the official &lt;a href=&#34;https://cards-dev.twitter.com/validator&#34;&gt;twitter card&#xA;validator&lt;/a&gt;, as well as&#xA;&lt;a href=&#34;https://www.heymeta.com/results?url=waylonwalker.com&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.heymeta.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.heymeta.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;heymeta.com&lt;/a&gt;, and&#xA;&lt;a href=&#34;https://metatags.io/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/metatags.io.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/metatags.io.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;metatags.io&lt;/a&gt;.  All look good.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/twitter-card-rendered.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/twitter-card-rendered.png&#34; alt=&#34;rendered card with validator&#34;/ data-glightbox=&#34;description: rendered card with validator&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;can-cards-be-updated&#34;&gt;Can Cards be updated? &lt;a href=&#34;#can-cards-be-updated&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;even with a redirect?&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I tried seting up a pinned tweet that uses a netlify redirect to always keep my latest post up to date.  Again this one looks good in the validator, doesnt render the image on desktop, does render the image on mobile, but does not update.  I have heard that you need to hit the card validator to update cards?  I am not sure if this is true, but for me this is not even upating the card.&lt;/p&gt;&#xA;&lt;blockquote class=&#34;twitter-tweet&#34;&gt;&lt;p lang=&#34;en&#34; dir=&#34;ltr&#34;&gt;👋 Hello,&lt;br/&gt;&lt;br/&gt;―――――― I&amp;#39;m Waylon Walker ――――――&lt;br/&gt;&lt;br/&gt;I work with data using 🐍 &lt;a href=&#34;https://twitter.com/hashtag/python?src=hash&amp;amp;ref_src=twsrc%5Etfw&#34;&gt;&lt;/a&gt;&lt;a href=&#34;/tags/python/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;python&#34; data-count=&#34;272&#34; data-reading-time=&#34;445&#34; data-reading-time-text=&#34;445 minutes&#34;&gt;#python&lt;/a&gt; and utilize &lt;a href=&#34;https://twitter.com/hashtag/webdev?src=hash&amp;amp;ref_src=twsrc%5Etfw&#34;&gt;&lt;/a&gt;&lt;a href=&#34;/tags/webdev/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;webdev&#34; data-count=&#34;187&#34; data-reading-time=&#34;255&#34; data-reading-time-text=&#34;255 minutes&#34;&gt;#webdev&lt;/a&gt; to 〽visualize it.&lt;br/&gt;&lt;br/&gt;――――――&lt;br/&gt;&lt;br/&gt;I write about things on my 🌱 digital garden&lt;a href=&#34;https://t.co/rAvD9iw05g&#34;&gt;https://t.co/rAvD9iw05g&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;👨‍💻Some are cross-posted to &lt;a href=&#34;https://t.co/oRWk7MgUD5&#34;&gt;https://t.co/oRWk7MgUD5&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;――――――&lt;br/&gt;💌&lt;a href=&#34;https://t.co/PilOTWQ9ub&#34;&gt;https://t.co/PilOTWQ9ub&lt;/a&gt;&lt;/p&gt;— 𝚆𝚊𝚢𝚕𝚘𝚗 𝚆𝚊𝚕𝚔𝚎𝚛 (@_WaylonWalker) &lt;a href=&#34;https://twitter.com/_WaylonWalker/status/1282000623299371008?ref_src=twsrc%5Etfw&#34;&gt;July 11, 2020&lt;/a&gt;&lt;/blockquote&gt; &lt;script async=&#34;&#34; src=&#34;https://platform.twitter.com/widgets.js&#34; charset=&#34;utf-8&#34;&gt;&lt;/script&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>How I Built My GitHub Profile</title>
    <id>https://waylonwalker.com/my-github-profile/</id>
    <updated>2020-07-10T03:00:00Z</updated>
    <published>2020-07-10T03:00:00Z</published>
    <link href="https://waylonwalker.com/my-github-profile/" rel="alternate" type="text/html"></link>
    <summary type="text">I ran a discussion on dev that collected quite a list of examples in the comment section. So many great calls to action, animations, memes, and weird tricks.</summary>
    <content type="html">&lt;p&gt;I ran a discussion on dev that collected quite a list of examples in the comment section.  So many great calls to action, animations, memes, and weird tricks.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dev.to/waylonwalker/what-s-on-your-github-profile-40p3&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/whats-on-your-github-profile.png&#34; alt=&#34;dev.to whats-on-your-github-profile&#34;/ data-glightbox=&#34;description: dev.to whats-on-your-github-profile&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;my-current-profile&#34;&gt;My current profile &lt;a href=&#34;#my-current-profile&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/waylonwalker/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/github-profile.png&#34; alt=&#34;Waylon Walkers GitHub profile&#34;/ data-glightbox=&#34;description: Waylon Walkers GitHub profile&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;social-icons&#34;&gt;social icons &lt;a href=&#34;#social-icons&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Upload all of your icons to the repo in a directory such as &lt;code&gt;icons&lt;/code&gt; or &lt;code&gt;assets&lt;/code&gt;, then link them with a &lt;code&gt;height&lt;/code&gt; attribute like below.  I used &lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;html&lt;/a&gt; for mine, not sure if you can set the &lt;code&gt;height&lt;/code&gt; in markdown.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;a href=&amp;#34;https://dev.to/waylonwalker&amp;#34;&amp;gt;&amp;lt;img height=&amp;#34;30&amp;#34; src=&amp;#34;https://raw.githubusercontent.com/WaylonWalker/WaylonWalker/main/icon/dev.png&amp;#34;&amp;gt;&amp;lt;/a&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;note&lt;/strong&gt; I did add a bit of &lt;code&gt;&amp;amp;nbsp;&lt;/code&gt; (non-breaking-whitespace) between my icons.  Without adding css this seemed like the simplest way to do it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;center&#34;&gt;Center &lt;a href=&#34;#center&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Aligning things in the center of the readme is super simple.  I used this trick to align my social icons in the middle.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;p align=&amp;#39;center&amp;#39;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; ...html&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/p&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;right&#34;&gt;right &lt;a href=&#34;#right&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;For my &lt;a href=&#34;https://waylonwalker.com/latest&#34;&gt;latest post&lt;/a&gt; I floated it to the right with a little bit of &lt;code&gt;align=&amp;#39;right&amp;#39;&lt;/code&gt; action.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;p&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;a href=&amp;#34;https://images.waylonwalker.com/latest&amp;#34;&amp;gt;&amp;lt;img width=&amp;#34;400&amp;#34; align=&amp;#39;right&amp;#39; src=&amp;#34;https://waylonwalker.com/latest.png?raw=true&amp;#34;&amp;gt;&amp;lt;/a&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/p&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You may need to play with where you put this in the document, and the size of elements to get things to flow right.&lt;/p&gt;&#xA;&lt;h2 id=&#34;redirects&#34;&gt;redirects &lt;a href=&#34;#redirects&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;In order to keep my latest post always up to date on my readme I implemented a netlify redirect to always point to my latest post.  As a digital gardener this helps me keep pointed to a the best one in my opinion.  Any automated way would pick up half finished posts.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;# /static/_redirects&#xA;# netlify redirects&#xA;&#xA;# latest post&#xA;/latest            /blog/kedro-catalog-search/&#xA;/latest.png        /kedro-catalog-search.png&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now I can reference both the post and the post cover image.&lt;/p&gt;&#xA;&lt;h2 id=&#34;summarydetails&#34;&gt;summary/details &lt;a href=&#34;#summarydetails&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I also wanted to list out a few of my favorite posts without taking up a ton of space, so I used &lt;code&gt;details&lt;/code&gt; and &lt;code&gt;summary&lt;/code&gt; tags so that it would collapse.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;details&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &amp;lt;summary&amp;gt;&amp;lt;strong&amp;gt;other favorite posts&amp;lt;/strong&amp;gt;&amp;lt;/summary&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &amp;lt;a href=&amp;#34;https://images.waylonwalker.com/eight-years-cat/&amp;#34;&amp;gt;&amp;lt;img width=&amp;#34;400&amp;#34; src=&amp;#34;https://waylonwalker.com/eight-years-cat.png?raw=true&amp;#34;&amp;gt;&amp;lt;/a&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &amp;lt;a href=&amp;#34;https://images.waylonwalker.com/keyboard-driven-vscode/&amp;#34;&amp;gt;&amp;lt;img width=&amp;#34;400&amp;#34; src=&amp;#34;https://waylonwalker.com/alt%20b.png?raw=true&amp;#34;&amp;gt;&amp;lt;/a&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &amp;lt;a href=&amp;#34;https://images.waylonwalker.com/what-are-github-actions/&amp;#34;&amp;gt;&amp;lt;img width=&amp;#34;400&amp;#34; src=&amp;#34;https://waylonwalker.com/what-are-github-actions.png?raw=true&amp;#34;&amp;gt;&amp;lt;/a&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/details&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Go ham on your profile, its your own slice of GitHub to completely personalize and speak your brand.  Give a powerfule call to action, share a funny meme, record a wicked cool GIF, its your space.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ mzjp2 mzjp2</title>
    <id>https://waylonwalker.com/mzjp2-mzjp2/</id>
    <updated>2020-07-09T21:23:26Z</updated>
    <published>2020-07-09T21:23:26Z</published>
    <link href="https://waylonwalker.com/mzjp2-mzjp2/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered mzjp2 by mzjp2, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/mzjp2/mzjp2&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mzjp2&lt;/a&gt; by &lt;a href=&#34;https://github.com/mzjp2&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mzjp2&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;My personal readme&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ conda-forge staged-recipes</title>
    <id>https://waylonwalker.com/conda-forge-staged-recipes/</id>
    <updated>2020-07-08T20:20:23Z</updated>
    <published>2020-07-08T20:20:23Z</published>
    <link href="https://waylonwalker.com/conda-forge-staged-recipes/" rel="alternate" type="text/html"></link>
    <summary type="text">staged-recipes by conda-forge is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/conda-forge/staged-recipes&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;staged-recipes&lt;/a&gt; by &lt;a href=&#34;https://github.com/conda-forge&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;conda-forge&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;A place to submit conda recipes before they become fully fledged conda-forge feedstocks&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ conda grayskull</title>
    <id>https://waylonwalker.com/conda-grayskull/</id>
    <updated>2020-07-08T20:20:23Z</updated>
    <published>2020-07-08T20:20:23Z</published>
    <link href="https://waylonwalker.com/conda-grayskull/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? grayskull by conda.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/conda/grayskull&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;grayskull&lt;/a&gt; by &lt;a href=&#34;https://github.com/conda&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;conda&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Grayskull 💀 - Recipe generator for Conda&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ rwhitt2049 log_to_json</title>
    <id>https://waylonwalker.com/rwhitt2049-log_to_json/</id>
    <updated>2020-07-08T01:54:03Z</updated>
    <published>2020-07-08T01:54:03Z</published>
    <link href="https://waylonwalker.com/rwhitt2049-log_to_json/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about log_json, an amazing project by rwhitt2049. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/rwhitt2049/log_to_json&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;log_to_json&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/rwhitt2049&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rwhitt2049&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Yet another Python library to log to JSON&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ foambubble foam-template</title>
    <id>https://waylonwalker.com/foambubble-foam-template/</id>
    <updated>2020-07-06T19:38:29Z</updated>
    <published>2020-07-06T19:38:29Z</published>
    <link href="https://waylonwalker.com/foambubble-foam-template/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about foam-template, an amazing project by foambubble. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/foambubble/foam-template&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;foam-template&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/foambubble&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;foambubble&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Foam workpace template&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ MaggieAppleton digital-gardeners</title>
    <id>https://waylonwalker.com/maggieappleton-digital-gardeners/</id>
    <updated>2020-07-05T21:18:29Z</updated>
    <published>2020-07-05T21:18:29Z</published>
    <link href="https://waylonwalker.com/maggieappleton-digital-gardeners/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on digital-gardeners by MaggieAppleton.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/MaggieAppleton/digital-gardeners&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;digital-gardeners&lt;/a&gt; by &lt;a href=&#34;https://github.com/MaggieAppleton&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;MaggieAppleton&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Resources, links, projects, and ideas for gardeners tending their digital notes on the public interwebs&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ GoogleChromeLabs react-adaptive-hooks</title>
    <id>https://waylonwalker.com/googlechromelabs-react-adaptive-hooks/</id>
    <updated>2020-07-04T20:06:13Z</updated>
    <published>2020-07-04T20:06:13Z</published>
    <link href="https://waylonwalker.com/googlechromelabs-react-adaptive-hooks/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out react-adaptive-hooks by GoogleChromeLabs. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/GoogleChromeLabs/react-adaptive-hooks&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;react-adaptive-hooks&lt;/a&gt; by &lt;a href=&#34;https://github.com/GoogleChromeLabs&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;GoogleChromeLabs&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;Deliver experiences best suited to a user’s device and network constraints&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>SLIDES - understanding python \*args and \*\*kwargs</title>
    <id>https://waylonwalker.com/python-args-kwargs-slides/</id>
    <updated>2020-07-02T05:00:00Z</updated>
    <published>2020-07-02T05:00:00Z</published>
    <link href="https://waylonwalker.com/python-args-kwargs-slides/" rel="alternate" type="text/html"></link>
    <summary type="text">Python and are super useful tools, that when used properly can make you code much simpler and easier to maintain. Large manual conversions from a dataset to...</summary>
    <content type="html">&lt;p&gt;Python &lt;code&gt;*args&lt;/code&gt; and &lt;code&gt;**kwargs&lt;/code&gt; are super useful tools, that when used properly&#xA;can make you code much simpler and easier to maintain.  Large manual&#xA;conversions from a dataset to function arguments can be packed and unpacked&#xA;into lists or dictionaries. Beware though, this power &lt;strong&gt;can&lt;/strong&gt; lead to some&#xA;really unreadable/unusable code if done wrong.&lt;/p&gt;&#xA;&lt;p&gt;I generally post these as a carousel on LinkedIn based on a full article.  Let mw know what you think of it shown inside of a blog &lt;a href=&#34;https://twitter.com/_WaylonWalker&#34;&gt;@_waylonwalker&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;iframe src=&#34;https://www.linkedin.com/embed/feed/update/urn:li:ugcPost:6678285914826911744&#34; height=&#34;587&#34; width=&#34;504&#34; frameborder=&#34;0&#34; allowfullscreen=&#34;&#34; title=&#34;Embedded post&#34;&gt;&lt;/iframe&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/python-args-kwargs&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/python-args-kwargs.png&#34; alt=&#34;python args and kwargs&#34;/ data-glightbox=&#34;description: python args and kwargs&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;See the full article &lt;a href=&#34;https://waylonwalker.com/python-args-kwargs&#34;&gt;here&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;slides&#34;&gt;Slides &lt;a href=&#34;#slides&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;hr/&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/args-kwargs-slide-1.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/args-kwargs-slide-1.png&#34; alt=&#34;1&#34;/ data-glightbox=&#34;description: 1&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;hr/&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/args-kwargs-slide-2.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/args-kwargs-slide-2.png&#34; alt=&#34;2&#34;/ data-glightbox=&#34;description: 2&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;hr/&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/args-kwargs-slide-3.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/args-kwargs-slide-3.png&#34; alt=&#34;3&#34;/ data-glightbox=&#34;description: 3&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;hr/&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/args-kwargs-slide-4.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/args-kwargs-slide-4.png&#34; alt=&#34;4&#34;/ data-glightbox=&#34;description: 4&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;hr/&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/args-kwargs-slide-5.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/args-kwargs-slide-5.png&#34; alt=&#34;5&#34;/ data-glightbox=&#34;description: 5&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;hr/&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/args-kwargs-slide-6.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/args-kwargs-slide-6.png&#34; alt=&#34;6&#34;/ data-glightbox=&#34;description: 6&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;hr/&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/args-kwargs-slide-7.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/args-kwargs-slide-7.png&#34; alt=&#34;7&#34;/ data-glightbox=&#34;description: 7&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;hr/&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/args-kwargs-slide-8.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/args-kwargs-slide-8.png&#34; alt=&#34;8&#34;/ data-glightbox=&#34;description: 8&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;hr/&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/args-kwargs-slide-9.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/args-kwargs-slide-9.png&#34; alt=&#34;9&#34;/ data-glightbox=&#34;description: 9&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;hr/&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/args-kwargs-slide-10.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/args-kwargs-slide-10.png&#34; alt=&#34;10&#34;/ data-glightbox=&#34;description: 10&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Gracefully adopt kedro, the catalog</title>
    <id>https://waylonwalker.com/graceful-kedro-catalog/</id>
    <updated>2020-06-29T03:00:00Z</updated>
    <published>2020-06-29T03:00:00Z</published>
    <link href="https://waylonwalker.com/graceful-kedro-catalog/" rel="alternate" type="text/html"></link>
    <summary type="text">While using the catalog alone will not reap all of the benefits of the framework, it does get you and your project ready for the full framework eventually....</summary>
    <content type="html">&lt;h2 id=&#34;why-use-kedro-catalog&#34;&gt;Why use kedro catalog? &lt;a href=&#34;#why-use-kedro-catalog&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;While using the catalog alone will not reap all of the benefits of the framework, it does get you and your project ready for the full framework eventually.  For me the full benefit of the catalog comes when you combine it with the pipeline and dont even touch read/write steps at all.&lt;/p&gt;&#xA;&lt;p&gt;Taking a step into kedro by adopting the catalog first will give you a way to organize all of your data loads in one place, and stop manually writing read/write code, which can be different for each data and storage type. You just don’t need to think about it.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;iperitive loading style&lt;/li&gt;&#xA;&lt;li&gt;organizes your data&lt;/li&gt;&#xA;&lt;li&gt;all file locations can be quickly identified&lt;/li&gt;&#xA;&lt;li&gt;can be dropped into kedro later&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr/&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;“can be dropped into kedro later”&#xA;Let’s talk a bit more about that&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;2-ways-to-gracefully-adopt-the-catalog&#34;&gt;2 Ways to Gracefully adopt the catalog &lt;a href=&#34;#2-ways-to-gracefully-adopt-the-catalog&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;How do I get started with the kedro catalog&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;add with the code api&lt;/li&gt;&#xA;&lt;li&gt;load from yaml (&lt;strong&gt;recommended&lt;/strong&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;1-adding-to-the-catalog-with-the-code-api&#34;&gt;1. Adding to the catalog with the code api &lt;a href=&#34;#1-adding-to-the-catalog-with-the-code-api&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;how to use the kedro catalog code api&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;It is possible to keep everything inside of one single file if you want by utilizing the code api, which defines the kedro catalog inside of your script with python.  I personally like this method as it is a bit more scriptable to create many layers of datasets with a for loop.  It can still be carried right into a kedro project, but is not the normal way that other kedro users will be used to seeing.  I’ll leave it up to you which technique to use.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.io&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DataCatalog&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.extras.datasets.pandas&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CSVDataSet&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;io&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DataCatalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;bikes&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CSVDataSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;../data/01_raw/bikes.csv&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;taken right from the kedro &lt;a href=&#34;https://kedro.readthedocs.io/en/stable/05_data/01_data_catalog.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;docs&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;👆 This can be done inside of a single Jupyter cell, and pulled out later.&lt;/p&gt;&#xA;&lt;h2 id=&#34;2-creating-a-catalog-config-file&#34;&gt;2. Creating a catalog config file &lt;a href=&#34;#2-creating-a-catalog-config-file&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;recommended&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This reccommended method it great since it will simply drop right in to a full kedro project if you were ever ready to adopt the framework as a whole.  The downside to gracefully adopting the framework is that you need to have a bit of an understanding of the internals to do it.  When using the framework as a whole it seemlessly takes care of everything for you.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# conf/base/catalog.yml&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Example 1: Loads / saves a CSV file from / to a local file system&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;bikes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/01_raw/bikes.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.config&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ConfigLoader&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.io&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DataCatalog&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;conf_loader&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ConfLoader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;conf/base&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;conf_catalog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;conf_loader&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;catalog*&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;catalog/**&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DataCatalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;from_config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conf_catalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;You can even do this 👆 from a Jupyter notebook&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;If you do happen to be in a module deeper into an existing library I tend to leverage the use of the &lt;code&gt;__file__&lt;/code&gt; magic.  &lt;code&gt;__file__&lt;/code&gt; is a string containing the location of the current file.  You can initiate a &lt;code&gt;Path&lt;/code&gt; object from this and roll up the necessary number of directories with the &lt;code&gt;parents&lt;/code&gt; attribute then into the &lt;code&gt;conf/base&lt;/code&gt; directory.  I find this more &lt;strong&gt;more robust&lt;/strong&gt; as it does not depend on your current working directory.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pathlib&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;conf_loader&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ConfLoader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;vm&#34;&gt;__file__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parents&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;conf/base&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;conf_catalog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;conf_loader&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;catalog*&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;catalog/**&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;new_catalog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DataCatalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;from_config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conf_catalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;I find leveraging the &lt;code&gt;__file__&lt;/code&gt; magic a bit more robust when possible as it does not depend on your current working directory.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;adhoc-adding-to-an-existing-kedro-catalog&#34;&gt;Adhoc adding to an existing kedro catalog &lt;a href=&#34;#adhoc-adding-to-an-existing-kedro-catalog&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let’s say that you are already using a kedro project, but you are wanting to develop new features entirely in the context of a notebook.  You can easily create a catalog as shown above.  Since the kedro catalog variable is typically &lt;code&gt;catalog&lt;/code&gt;, we will call it &lt;code&gt;new_catalog&lt;/code&gt; and add it to the existing &lt;code&gt;catalog&lt;/code&gt; below.  If you are not quite sure what that &lt;code&gt;**catalog&lt;/code&gt; syntax is doing check out my article on &lt;code&gt;**kwargs&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;add_feed_dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;new_catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datasets&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vm&#34;&gt;__dict__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/python-args-kwargs/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/python-args-kwargs.png&#34; alt=&#34;python args and kwargs&#34;/ data-glightbox=&#34;description: python args and kwargs&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/python-args-kwargs/&#34;&gt;python args and kwargs&lt;/a&gt; article by &lt;a href=&#34;https://twitter.com/_WaylonWalker&#34;&gt;@_waylonwalker&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The framework makes appending&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DataCatalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datasets&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vm&#34;&gt;__dict__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;new_catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datasets&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vm&#34;&gt;__dict__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;``&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;## One word of caution&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;If&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;you&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;have&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;any&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hooks&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;running&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;after_catalog_created&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;they&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;will&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;be&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;run&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;appended&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;entries&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ streamlit streamlit</title>
    <id>https://waylonwalker.com/streamlit-streamlit/</id>
    <updated>2020-06-25T13:25:14Z</updated>
    <published>2020-06-25T13:25:14Z</published>
    <link href="https://waylonwalker.com/streamlit-streamlit/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on streamlit by streamlit.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/streamlit/streamlit&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;streamlit&lt;/a&gt; by &lt;a href=&#34;https://github.com/streamlit&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;streamlit&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Streamlit — A faster way to build and share data apps.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ JackMcKew python-interrogate-check</title>
    <id>https://waylonwalker.com/jackmckew-python-interrogate-check/</id>
    <updated>2020-06-22T19:37:24Z</updated>
    <published>2020-06-22T19:37:24Z</published>
    <link href="https://waylonwalker.com/jackmckew-python-interrogate-check/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred python-interrogate-check by JackMcKew. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/JackMcKew/python-interrogate-check&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;python-interrogate-check&lt;/a&gt; by &lt;a href=&#34;https://github.com/JackMcKew&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;JackMcKew&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;GitHub Action for use with python package interrogate&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>How to find things in your kedro catalog</title>
    <id>https://waylonwalker.com/kedro-catalog-search/</id>
    <updated>2020-06-22T03:00:00Z</updated>
    <published>2020-06-22T03:00:00Z</published>
    <link href="https://waylonwalker.com/kedro-catalog-search/" rel="alternate" type="text/html"></link>
    <summary type="text">kedro 0.16.2 just dropped last week with a long-awaited feature... **! I went as far as monkey patching this into each of my projects. I work jump between a...</summary>
    <content type="html">&lt;p&gt;kedro 0.16.2 just dropped last week with a long-awaited feature… &lt;strong&gt;catalog search&lt;/strong&gt;!  I went as far as monkey patching this into each of my projects.  I work jump between a few really big projects that have tons of datasets.  Being able to quickly search for what I need is so useful.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-catalog&#34;&gt;The Catalog &lt;a href=&#34;#the-catalog&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The kedro data catalog is a key component to the kedro framework.  It handles all data loading and saving for you.  It is configurable and hackable.  Having all your data connections listed in one place make it so easy to pick your project up and move it to a completely new environment.  That sweet imperative loading style saves so much read/write overhead.  I can load all my data with a single command whether it’s in amazon s3, google cloud platform, or a local file.&lt;/p&gt;&#xA;&lt;h2 id=&#34;kick-start-a-toy-project&#34;&gt;Kick start a toy project &lt;a href=&#34;#kick-start-a-toy-project&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Just like with most of these articles, I am going to create a conda environment so that I don’t break any existing projects and scaffold up a toy project to learn from.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda create -n kedro0162 &lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;3.8 -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;activate kedro0162&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install kedro&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro new &lt;span class=&#34;c1&#34;&gt;# call it Kedro 0162 and click-through&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; kedro-0162&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Expect this set of commands to take a few minutes depending on your system, connection speed, and amount of packages already in your local cache.&lt;/p&gt;&#xA;&lt;h2 id=&#34;create-some-catalog&#34;&gt;Create some catalog &lt;a href=&#34;#create-some-catalog&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now the power of the catalog search really starts to shine when your projects grow legs.  You have groups of many datasets containing patterns of data including &lt;code&gt;layer&lt;/code&gt;, or &lt;code&gt;source&lt;/code&gt; among other things.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim conf/base/catalog.yml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In the catalog, you will see a few lines of instructions followed by&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;example_iris_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/01_raw/iris.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This gives us one stored catalog entry called &lt;code&gt;example_iris_data&lt;/code&gt;, it is a CSV file stored in &lt;code&gt;data/01_raw/iris.csv&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Let’s make up a transportation company that is siloed into three different divisions and it is our job to bring their sales and product metadata into a single report.  This company makes &lt;code&gt;lifted-trucks&lt;/code&gt;, &lt;code&gt;primium-scoots&lt;/code&gt;, and &lt;code&gt;luxy-yahts&lt;/code&gt;.  and we know that we will want &lt;code&gt;raw&lt;/code&gt;, &lt;code&gt;int&lt;/code&gt;, &lt;code&gt;pri&lt;/code&gt; and &lt;code&gt;modin&lt;/code&gt; layers to start our project so let’s scaffold up that catalog real quick.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# ――――――――― lifted-truck ―――――――――&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;raw_lifted_truck_sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/01_raw/sales/lifted-truck.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;int_lifted_truck_sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/01_int/sales/lifted-truck.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pri_lifted_truck_sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/01_pri/sales/lifted-truck.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;raw_lifted_truck_info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/01_raw/info/lifted-truck.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;int_lifted_truck_info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/01_int/info/lifted-truck.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pri_lifted_truck_info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/01_pri/info/lifted-truck.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# ――――――――― primium-scoot ―――――――――&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;raw_primium_scoot_sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/01_raw/sales/primium-scoot.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;int_primium_scoot_sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/01_int/sales/primium-scoot.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pri_primium_scoot_sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/01_pri/sales/primium-scoot.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;raw_primium_scoot_info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/01_raw/info/primium-scoot.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;int_primium_scoot_info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/01_int/info/primium-scoot.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pri_primium_scoot_info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/01_pri/info/primium-scoot.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# ――――――――― luxy-yaht ―――――――――&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;raw_luxy_yaht_sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/01_raw/sales/luxy-yaht.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;int_luxy_yaht_sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/01_int/sales/luxy-yaht.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pri_luxy_yaht_sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/01_pri/sales/luxy-yaht.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;raw_luxy_yaht_info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/01_raw/info/luxy-yaht.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;int_luxy_yaht_info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/01_int/info/luxy-yaht.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pri_luxy_yaht_info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/01_pri/info/luxy-yaht.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# ――――――――― combined ―――――――――&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pri_combined_sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/01_pri/sales/combined.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pri_combined_info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/01_pri/info/combined.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# ――――――――― modin ―――――――――&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;modin_main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pandas.CSVDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;data/01_pri/info/combined.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;some-examples-of-common-regex-uses&#34;&gt;Some examples of common regex uses &lt;a href=&#34;#some-examples-of-common-regex-uses&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;regex&lt;/code&gt; gets really complicated fast, but these basic examples are very common use cases and will get you a long way without being very complicated.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;term&lt;/code&gt; - all catalog entries that include &lt;code&gt;term&lt;/code&gt; in the catalog entry&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;^term&lt;/code&gt; - all catalog entries that include &lt;code&gt;term&lt;/code&gt; at the &lt;strong&gt;beginning&lt;/strong&gt; of the catalog entry&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;term$&lt;/code&gt; - all catalog entries that include &lt;code&gt;term&lt;/code&gt; at the &lt;strong&gt;end&lt;/strong&gt; of the catalog entry&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;term1.*term2&lt;/code&gt; - include anything in between &lt;code&gt;term1&lt;/code&gt; and &lt;code&gt;term2&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;term1|term2&lt;/code&gt; - all catalog entries that include &lt;code&gt;term1&lt;/code&gt; or &lt;code&gt;term2&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;lets-search-this-thing&#34;&gt;Let’s Search this thing &lt;a href=&#34;#lets-search-this-thing&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;kedro has long included the &lt;code&gt;catalog.list()&lt;/code&gt; feature that returns a list of all datasets.  Now the &lt;code&gt;list&lt;/code&gt; command takes in a &lt;code&gt;regex_search&lt;/code&gt; keyword argument.  By default, it is empty and returns the entire catalog.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro ipython&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;list-out-all-of-the-luxy-yahts&#34;&gt;list out all of the luxy-yahts &lt;a href=&#34;#list-out-all-of-the-luxy-yahts&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;luxy_yaht`)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_luxy_yaht_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;int_luxy_yaht_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_luxy_yaht_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_luxy_yaht_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;int_luxy_yaht_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_luxy_yaht_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;list-out-data-by-layer&#34;&gt;List out data by layer &lt;a href=&#34;#list-out-data-by-layer&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Easy just search for the layer name.&lt;/p&gt;&#xA;&lt;h3 id=&#34;raw&#34;&gt;raw &lt;a href=&#34;#raw&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;raw&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_lifted_truck_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_lifted_truck_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_primium_scoot_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_primium_scoot_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_luxy_yaht_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_luxy_yaht_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;pri&#34;&gt;pri &lt;a href=&#34;#pri&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;pri&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_lifted_truck_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_lifted_truck_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_primium_scoot_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;int_primium_scoot_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_primium_scoot_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_primium_scoot_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;int_primium_scoot_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_primium_scoot_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_luxy_yaht_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_luxy_yaht_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_combined_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_combined_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;😲 We just included every &lt;code&gt;primium-scoot&lt;/code&gt; dataset!&lt;/p&gt;&#xA;&lt;p&gt;Here we just encountered our first need for &lt;code&gt;regex&lt;/code&gt;.  I’ll be the first to admit that I am really bad at regex, it’s incredibly confusing, becomes read-only with much complexity, but is super powerful and used in a lot of places.&lt;/p&gt;&#xA;&lt;h2 id=&#34;term&#34;&gt;&lt;code&gt;^term&lt;/code&gt; &lt;a href=&#34;#term&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;beginning of catalog entry&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;^&lt;/code&gt; regex operator searches for catalog entries that include the search term at the very beginning.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;^pri&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_lifted_truck_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_lifted_truck_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_primium_scoot_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_primium_scoot_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_luxy_yaht_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_luxy_yaht_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_combined_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_combined_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;term-1&#34;&gt;&lt;code&gt;term$&lt;/code&gt; &lt;a href=&#34;#term-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;end of catalog entry&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;$&lt;/code&gt; operator is the opposite of the &lt;code&gt;^&lt;/code&gt; operator.  It means give me all that matches that occur at the end of the catalog entry.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;info$&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_lifted_truck_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;int_lifted_truck_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_lifted_truck_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_primium_scoot_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;int_primium_scoot_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_primium_scoot_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_luxy_yaht_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;int_luxy_yaht_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_luxy_yaht_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_combined_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;term1term2&#34;&gt;&lt;code&gt;term1.*term2&lt;/code&gt; &lt;a href=&#34;#term1term2&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The &lt;code&gt;.*&lt;/code&gt; operator in regex means give me all the datasets that include the two terms no matter what is between them.  There is also a &lt;code&gt;.?&lt;/code&gt; to only allow one character between them.  More often than not I really just want the two patterns to exist in the dataset entry.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;raw.*info$&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_lifted_truck_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_primium_scoot_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_luxy_yaht_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;some-real-things-that-we-can-do-with-search&#34;&gt;Some real things that we can do with search &lt;a href=&#34;#some-real-things-that-we-can-do-with-search&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let’s look at a few examples beyond the obvious of just searching for the dataset that we want to load.&lt;/p&gt;&#xA;&lt;h2 id=&#34;check-raw-data&#34;&gt;Check Raw Data &lt;a href=&#34;#check-raw-data&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;While migrating pipelines between environments it’s important to know if your raw datasets are available.  I will argue that you should also consider looking at &lt;code&gt;pipeline.inputs&lt;/code&gt; as it cannot lie and gives you a true reading of the pipeline inputs.  But another easy check might be to check all the datasets that the Data Engineers have labeled raw.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dataset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exists&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dataset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dataset&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;^raw&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_lifted_truck_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_lifted_truck_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_primium_scoot_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_primium_scoot_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_luxy_yaht_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_luxy_yaht_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Since we just created a dummy catalog the data does not exist in this example.&lt;/p&gt;&#xA;&lt;h2 id=&#34;create-a-new-catalog&#34;&gt;Create a new catalog &lt;a href=&#34;#create-a-new-catalog&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let’s say that we have someone on the team who is from the land division of our company and they want a simplified catalog readily available that does not include any marine data.&lt;/p&gt;&#xA;&lt;p&gt;To do this we will need to reach a bit into the kedro internals for the &lt;code&gt;DataCatalog&lt;/code&gt; class and utilize a new regex operator &lt;code&gt;|&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.io&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DataCatalog&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;land_catalog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DataCatalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;dataset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;getattr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datasets&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dataset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dataset&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;truck|scoot&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;land_catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_lifted_truck_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;int_lifted_truck_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_lifted_truck_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_lifted_truck_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;int_lifted_truck_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_lifted_truck_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_primium_scoot_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;int_primium_scoot_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_primium_scoot_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_primium_scoot_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;int_primium_scoot_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_primium_scoot_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;regex-recap&#34;&gt;regex recap &lt;a href=&#34;#regex-recap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;^term&lt;/code&gt; - beginning&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;term$&lt;/code&gt; - end&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;term1.*term2&lt;/code&gt; - anything in between&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;term1|term2&lt;/code&gt; - or&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ davidesantangelo datoji</title>
    <id>https://waylonwalker.com/davidesantangelo-datoji/</id>
    <updated>2020-06-19T21:01:05Z</updated>
    <published>2020-06-19T21:01:05Z</published>
    <link href="https://waylonwalker.com/davidesantangelo-datoji/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out davidesantangelo and their project datoji.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/davidesantangelo&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;davidesantangelo&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/davidesantangelo/datoji&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;datoji&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A tiny JSON storage service. Create, Read, Update, Delete and Search JSON data.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>My first eight years as a working professional.</title>
    <id>https://waylonwalker.com/eight-years-cat/</id>
    <updated>2020-06-19T05:00:00Z</updated>
    <published>2020-06-19T05:00:00Z</published>
    <link href="https://waylonwalker.com/eight-years-cat/" rel="alternate" type="text/html"></link>
    <summary type="text">This day 8 years ago I started my first day as a Mechanical Engineer. I am so grateful for this journey that I have been able to have. There is no way that I...</summary>
    <content type="html">&lt;p&gt;This day 8 years ago I started my first day as a Mechanical Engineer. I am so&#xA;grateful for this journey that I have been able to have. There is no way that I&#xA;could have planned this journey from the beginning.&lt;/p&gt;&#xA;&lt;h2 id=&#34;keep-learning&#34;&gt;Keep Learning &lt;a href=&#34;#keep-learning&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;My initial career plans were down a completely different path. I have been very flexible in taking on a new career path. I have been eager to learn new things and respond to life changes that I never would have imagined.&lt;/p&gt;&#xA;&lt;h2 id=&#34;life-changes&#34;&gt;Life Changes &lt;a href=&#34;#life-changes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Very severe chronic health issues from my family restricted my ability to travel to the facilities I served as a Mechanical Engineer. I was able to stay strong and make it work. But in the meantime, I was learning new skills that enabled me to be more effective remotely.&lt;/p&gt;&#xA;&lt;h2 id=&#34;i-was-scared&#34;&gt;I was scared. &lt;a href=&#34;#i-was-scared&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It was in these times that I found a love for data, and taking action from insights I found with data. I learned how to use python to enable me to be more effective. I did this primarily from hospital waiting rooms and many overnight stays. This gave my mind a break from some of the really difficult things in life but also catapulted my career in a new direction.&lt;/p&gt;&#xA;&lt;p&gt;🔼 Be flexible&lt;/p&gt;&#xA;&lt;p&gt;🔼 Always be open and ready for change&lt;/p&gt;&#xA;&lt;p&gt;🔼 Never stop learning&lt;/p&gt;&#xA;&lt;p&gt;🔼 Keep a positive attitude&lt;/p&gt;&#xA;&lt;p&gt;🔼 Be kind to others&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;This was originally posted on my LinkedIn, if you enjoy it please connect with me and give the post a 👍&lt;/p&gt;&#xA;&lt;iframe src=&#34;https://www.linkedin.com/embed/feed/update/urn:li:share:6679445409351393280&#34; height=&#34;813&#34; width=&#34;504&#34; frameborder=&#34;0&#34; allowfullscreen=&#34;&#34; title=&#34;Embedded post&#34;&gt;&lt;/iframe&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>How Kedro handles your inputs</title>
    <id>https://waylonwalker.com/kedro-inputs/</id>
    <updated>2020-06-19T03:00:00Z</updated>
    <published>2020-06-19T03:00:00Z</published>
    <link href="https://waylonwalker.com/kedro-inputs/" rel="alternate" type="text/html"></link>
    <summary type="text">Passing inputs into kedro is a key concept. Understanding how it accepts a single catalog key as input is quite trivial that easily makes sense, but passing...</summary>
    <content type="html">&lt;p&gt;Passing inputs into kedro is a key concept.  Understanding how it accepts a&#xA;single catalog key as input is quite trivial that easily makes sense, but&#xA;passing a list or dictionary of catalog entries can be a bit confusing.&lt;/p&gt;&#xA;&lt;h2 id=&#34;argsargs-review&#34;&gt;*args/**args review &lt;a href=&#34;#argsargs-review&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Check out this post for a review of how &lt;code&gt;*args&lt;/code&gt; &lt;code&gt;**kwargs&lt;/code&gt; work in python.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/python-args-kwargs/&#34; class=&#34;wikilink&#34; data-title=&#34;understanding python \\*args and \\*\\*kwargs&#34; data-description=&#34;Python and are super useful tools, that when used properly can make you code much simpler and easier to maintain. Large manual conversions from a dataset to...&#34; data-date=&#34;2020-06-10&#34; data-preview=&#34;Python and are super useful tools, that when used properly can make you code much simpler and easier to maintain. Large manual conversions from a dataset to...&#34;&gt;understanding python *args and **kwargs&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/python-args-kwargs&#34;&gt;python args and kwargs&lt;/a&gt; article by &lt;a href=&#34;https://twitter.com/_WaylonWalker&#34;&gt;@_waylonwalker&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;all-kedro-inputs-are-catalog-entries&#34;&gt;All Kedro inputs are catalog Entries &lt;a href=&#34;#all-kedro-inputs-are-catalog-entries&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;When kedro runs your pipeline it uses the catalog to imperatively load your data, meaning that you don’t tell kedro how to load your data, you tell it where your data is and what type it is.  These catalog entries are like a &lt;code&gt;key-value&lt;/code&gt; store.  You just need to give the key when setting up a node.&lt;/p&gt;&#xA;&lt;h2 id=&#34;single-inputs&#34;&gt;Single Inputs &lt;a href=&#34;#single-inputs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;These are fairly straightforward to understand.  In the example below when &lt;code&gt;kedro&lt;/code&gt; runs the pipeline it will load the input from the catalog, then pass that input to the func, then save the returned value to the output catalog entry.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.pipeline&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;create_int_sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;cleans up raw sales data&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cleaned_sales&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;my_node&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create_int_sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;output&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;int_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;list-of-inputs&#34;&gt;List of inputs &lt;a href=&#34;#list-of-inputs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let’s look at an example node that combines more than one dataset. When kedro has sees a list of catalog entries it will load up each catalog entry sequentially then pass them in order to the &lt;code&gt;create_sales_report&lt;/code&gt; function.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.pipeline&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;create_sales_report&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;products&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;adds product metadata to the sales data&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;my_node&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create_sales_report&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_products&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;output&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sales_report&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;simulating-pipeline-run-using-2-inputs&#34;&gt;simulating pipeline run using 2 inputs &lt;a href=&#34;#simulating-pipeline-run-using-2-inputs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here We can simulate what kedro does during the pipeline run by using &lt;code&gt;*args&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# inputs you gave kedro&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_products&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# load data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;input_data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;entry&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;entry&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# run the node&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sales_report&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;create_sales_report&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# save the data to the output&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datasets&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sales_report&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;save&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sales_report&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;more-generalizable-functions&#34;&gt;More generalizable functions &lt;a href=&#34;#more-generalizable-functions&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;We can also use &lt;code&gt;*args&lt;/code&gt; to make our functions a little bit more generalizable. The first that&#xA;comes to my mind is a unioner. The second&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;unioner&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dfs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataFrame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataFrame&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;concat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dfs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now we can pass any number of DataFrames into our kedro node to get unioned together, but&#xA;do we really need a function for a one-liner… No we can use an inline function for this case.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;my_node&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;lambda&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dfs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;concat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dfs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sales_2017&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;sales_2018&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;output&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;args-scares-the-crap-out-of-me&#34;&gt;&lt;code&gt;*args&lt;/code&gt; scares the crap out of me &lt;a href=&#34;#args-scares-the-crap-out-of-me&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It’s great for the &lt;code&gt;unioner&lt;/code&gt; example where its a collection of similar things where order&#xA;does not matter.  But for the &lt;code&gt;create_sales_report&lt;/code&gt; function.  Those are distinctly different&#xA;inputs.  If someone does some refactoring and changes the order in one place or another it’s&#xA;going to turn into a bad day real fast.&lt;/p&gt;&#xA;&lt;h2 id=&#34;kwargs-are-a-bit-better&#34;&gt;**kwargs are a bit better &lt;a href=&#34;#kwargs-are-a-bit-better&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let’s refactor the &lt;code&gt;create_sales_report&lt;/code&gt; before someone tries to ruin our day.  We can easily&#xA;do this by passing a dictionary (keys are the argument name, values are the catalog key)&#xA;of arguments to kedro instead of a list.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.pipeline&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;create_sales_report&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;products&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;adds product metadata to the sales data&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;my_node&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create_sales_report&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;products&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_products&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;output&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sales_report&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now if someone tries to refactor the order of arguments we are safe!&lt;/p&gt;&#xA;&lt;h2 id=&#34;simulating-the-pipeline-run-with-kwargs&#34;&gt;Simulating the pipeline run with &lt;code&gt;**kwargs&lt;/code&gt; &lt;a href=&#34;#simulating-the-pipeline-run-with-kwargs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Pretty much the same as before, except with &lt;code&gt;**kwargs&lt;/code&gt; and &lt;code&gt;dictionaries&lt;/code&gt; keeping us a bit&#xA;safer.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# inputs you gave kedro&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;products&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_products&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# load data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;input_data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;arg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;entry&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;entry&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# run the node&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sales_report&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;create_sales_report&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# save the data to the output&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datasets&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sales_report&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;save&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sales_report&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;stay-safe&#34;&gt;Stay Safe &lt;a href=&#34;#stay-safe&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Kedro inputs are quite easy to understand if you already have a grasp of &lt;code&gt;*args&lt;/code&gt; and &lt;code&gt;**kwargs&lt;/code&gt;&#xA;and if you don’t it is still fairly intuitive to pick up.  Stay on the safe side, if your&#xA;collection of inputs are clearly different things, use a dictionary for safety.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ visit1985 mdp</title>
    <id>https://waylonwalker.com/visit1985-mdp/</id>
    <updated>2020-06-16T23:45:35Z</updated>
    <published>2020-06-16T23:45:35Z</published>
    <link href="https://waylonwalker.com/visit1985-mdp/" rel="alternate" type="text/html"></link>
    <summary type="text">visit1985 has done a fantastic job with mdp. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/visit1985&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;visit1985&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/visit1985/mdp&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mdp&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;A command-line based markdown presentation tool.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ say4n hotreload</title>
    <id>https://waylonwalker.com/say4n-hotreload/</id>
    <updated>2020-06-15T20:02:23Z</updated>
    <published>2020-06-15T20:02:23Z</published>
    <link href="https://waylonwalker.com/say4n-hotreload/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out hotreload by say4n. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/say4n/hotreload&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;hotreload&lt;/a&gt; by &lt;a href=&#34;https://github.com/say4n&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;say4n&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;hot reload your python code!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tamsanh kedro-great</title>
    <id>https://waylonwalker.com/tamsanh-kedro-great/</id>
    <updated>2020-06-15T20:00:51Z</updated>
    <published>2020-06-15T20:00:51Z</published>
    <link href="https://waylonwalker.com/tamsanh-kedro-great/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across kedro-great from tamsanh, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/tamsanh/kedro-great&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-great&lt;/a&gt; from &lt;a href=&#34;https://github.com/tamsanh&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tamsanh&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;The easiest way to integrate Kedro and Great Expectations&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ awesomedata awesome-public-datasets</title>
    <id>https://waylonwalker.com/awesomedata-awesome-public-datasets/</id>
    <updated>2020-06-15T18:49:44Z</updated>
    <published>2020-06-15T18:49:44Z</published>
    <link href="https://waylonwalker.com/awesomedata-awesome-public-datasets/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across awesome-public-datasets from awesomedata, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/awesomedata/awesome-public-datasets&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;awesome-public-datasets&lt;/a&gt; from &lt;a href=&#34;https://github.com/awesomedata&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;awesomedata&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;A topic-centric list of HQ open datasets.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Master No More</title>
    <id>https://waylonwalker.com/master-no-more/</id>
    <updated>2020-06-11T05:00:00Z</updated>
    <published>2020-06-11T05:00:00Z</published>
    <link href="https://waylonwalker.com/master-no-more/" rel="alternate" type="text/html"></link>
    <summary type="text">It&#39;s been a long time coming. We use some very harsh language within tech so much sometimes that we become numb to it. It&#39;s time to do my very small part in...</summary>
    <content type="html">&lt;p&gt;It’s been a long time coming.  We use some very harsh language within tech so&#xA;much sometimes that we become numb to it.  It’s time to do my very small part&#xA;in this movement and purge this language from my active repos starting with&#xA;this blog right here.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/refactor-in-cli/&#34; class=&#34;wikilink&#34; data-title=&#34;Large Refactor At The Command Line&#34; data-description=&#34;As projects grow patterns that worked early on break and we need to change things to make the project easier to work with, and more welcoming to new developers.&#34; data-date=&#34;2020-12-30&#34; data-preview=&#34;As projects grow patterns that worked early on break and we need to change things to make the project easier to work with, and more welcoming to new developers.&#34;&gt;Large Refactor At The Command Line&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;this post follows my method of refactoring code bases from the command line,&#xA;read more about that in this article.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;c-s-f&#34;&gt;c-s-f &lt;a href=&#34;#c-s-f&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;First off browsing through the content of my blog I found many references to master.  I cannot completely whole-sale find and replace each one of them, because some of them are links that I do not own.  Any set of instructions got upgraded from &lt;code&gt;master&lt;/code&gt; to &lt;code&gt;main&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-  git checkout master&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+  git checkout main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;There were countless cases of examples like this to comb through, but it feels good to have them purged of old language.&lt;/p&gt;&#xA;&lt;h2 id=&#34;rename-routes&#34;&gt;rename routes &lt;a href=&#34;#rename-routes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Following yesterdays post, I am going to rename my markdown files&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;/static/_redirects&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;shorteners&#34;&gt;shorteners &lt;a href=&#34;#shorteners&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;- /gdfm              /blog/today-i-learned-git-diff-feature-master/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;- /blog/gdfm         /blog/today-i-learned-git-diff-feature-master/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+ /gdfm              /blog/today-i-learned-git-diff-feature-main/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+ /blog/gdfm         /blog/today-i-learned-git-diff-feature-main/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;redirect-posts&#34;&gt;redirect posts &lt;a href=&#34;#redirect-posts&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+ # master -&amp;gt; main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+ /blog/today-i-learned-git-diff-feature-master/   /blog/git-diff-feature-main/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;redirect-external-links-to-repo&#34;&gt;redirect external links to repo &lt;a href=&#34;#redirect-external-links-to-repo&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;- /redirects      https://github.com/WaylonWalker/waylonwalkerv2/edit/master/static/_redirects&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+ /redirects      https://github.com/WaylonWalker/waylonwalkerv2/edit/main/static/_redirects&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;More info on refactoring your blog routes with netlify here.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/gracefully-redirect/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/gracefully-redirect.png&#34; alt=&#34;gracefully redirect cover image&#34;/ data-glightbox=&#34;description: gracefully redirect cover image&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;-edit-this-post--links&#34;&gt;&lt;em&gt;“Edit This post”&lt;/em&gt; Links &lt;a href=&#34;#-edit-this-post--links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I literally just added &lt;em&gt;“edit this post”&lt;/em&gt; links to my rss feed and my blog feed.  This was a simple find and replace inside of my blog template and &lt;code&gt;gatsby-config.js&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;dont-forget-about-ci&#34;&gt;Don’t Forget about CI &lt;a href=&#34;#dont-forget-about-ci&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you have build/deploy processes that specifically run on master or not on master dont forget to change those to main.  I did everything in a single commit and as soon as I pushed to main it started deploying gloriously.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;name: 🌱 Deploy site&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;on:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  push:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    branches:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-      - master&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+      - main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;now-the-fun-part&#34;&gt;Now the fun part &lt;a href=&#34;#now-the-fun-part&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;removing &lt;strong&gt;master&lt;/strong&gt; completely&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I mostly just followed this &lt;a href=&#34;https://www.hanselman.com/blog/easily-rename-your-git-default-branch-from-master-to-main&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.hanselman.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.hanselman.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;post by Scott Hanselman&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git branch -m master main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git push -u origin main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then from GitHub go to settings&amp;gt;default branch&amp;gt; select main and accept the risk involved.&lt;/p&gt;&#xA;&lt;p&gt;After your default is set to main, you have no use for master in your life anymore, time to purge it completely once and for all.  Go to &lt;repo&gt;/branches and trash it.&lt;/repo&gt;&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/delete-master.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/delete-master.png&#34; alt=&#34;delete master&#34;/ data-glightbox=&#34;description: delete master&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;stop-the-bleeding&#34;&gt;Stop the Bleeding &lt;a href=&#34;#stop-the-bleeding&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I like how Scott included this nice alias for starting from main from the beginning.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config --global alias.new &lt;span class=&#34;s1&#34;&gt;&amp;#39;!git init &amp;amp;&amp;amp; git symbolic-ref HEAD refs/heads/main&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;see-the-full-diff&#34;&gt;See the Full Diff &lt;a href=&#34;#see-the-full-diff&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you happen to want to see the full diff of my change you can see it &lt;a href=&#34;https://github.com/WaylonWalker/waylonwalkerv2/commit/4bd26ba8faaf7c72e01cc4946d989e3284302cd0&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Refactoring your blog urls</title>
    <id>https://waylonwalker.com/gracefully-redirect/</id>
    <updated>2020-06-11T05:00:00Z</updated>
    <published>2020-06-11T05:00:00Z</published>
    <link href="https://waylonwalker.com/gracefully-redirect/" rel="alternate" type="text/html"></link>
    <summary type="text">I just did a quick refactoring of my JAMStack blog urls. Some didn&#39;t fit with my style, some had that I wanted to switch to , and others were ridiculously...</summary>
    <content type="html">&lt;p&gt;I just did a quick refactoring of my JAMStack blog urls.  Some didn’t fit with&#xA;my style, some had &lt;code&gt;_&lt;/code&gt; that I wanted to switch to &lt;code&gt;-&lt;/code&gt;, and others were&#xA;ridiculously long.  I’ve been using forestry as my CMS, I write many of my&#xA;posts there, and sometimes it picks some crazy file names (based on my titles).&#xA;It was time to refactor.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/refactor-in-cli/&#34; class=&#34;wikilink&#34; data-title=&#34;Large Refactor At The Command Line&#34; data-description=&#34;As projects grow patterns that worked early on break and we need to change things to make the project easier to work with, and more welcoming to new developers.&#34; data-date=&#34;2020-12-30&#34; data-preview=&#34;As projects grow patterns that worked early on break and we need to change things to make the project easier to work with, and more welcoming to new developers.&#34;&gt;Large Refactor At The Command Line&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;When refactorings similar to this get really big I often need to do some&#xA;project wide find an replace, I usually do this right from the command line.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;-rename-posts--change-the-filename-&#34;&gt;🖊 Rename posts &lt;em&gt;change the filename&lt;/em&gt; &lt;a href=&#34;#-rename-posts--change-the-filename-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;My post urls are based on the file name of my markdown file, so I can simply go&#xA;through my filesystem and rename anything I want.  From here its probably best&#xA;to only commit the addition of the new file name, until the redirects clear,&#xA;but these are all low traffic posts for me so I just commited both at once.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Safely redirect without breaking links&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;-redirects---redirects-&#34;&gt;_redirects ⤴ &lt;em&gt;/redirects&lt;/em&gt; &lt;a href=&#34;#-redirects---redirects-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I am hosted on netlify, which automatically puts very ⚡ performant redirects&#xA;on the edge based on a &lt;code&gt;/_redirects&lt;/code&gt; route on your site.  So I added a redirect&#xA;from the old route to the new route there.&lt;/p&gt;&#xA;&lt;h2 id=&#34;rename-long-posts&#34;&gt;rename long posts &lt;a href=&#34;#rename-long-posts&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/blog/i-finally-fixed-my-styled-components-in-gatsby-js&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/blog/fix-styled-components-in-gatsby&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/blog/interrogate-is-a-pretty-awesome-brand-new-cli-for-python-packages&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/blog/interrogate&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;pedantic---probably-&#34;&gt;pedantic 🤔 &lt;em&gt;probably&lt;/em&gt; &lt;a href=&#34;#pedantic---probably-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is probably being a bit pedantic.  Realistically my urls were probably ok.&#xA;These posts probably aren’t going to be topping the google search charts&#xA;anyways, but I wanted to do it without killing off any links that I may have&#xA;happened to post somewhere.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>understanding python \*args and \*\*kwargs</title>
    <id>https://waylonwalker.com/python-args-kwargs/</id>
    <updated>2020-06-10T05:00:00Z</updated>
    <published>2020-06-10T05:00:00Z</published>
    <link href="https://waylonwalker.com/python-args-kwargs/" rel="alternate" type="text/html"></link>
    <summary type="text">Python and are super useful tools, that when used properly can make you code much simpler and easier to maintain. Large manual conversions from a dataset to...</summary>
    <content type="html">&lt;p&gt;Python &lt;code&gt;*args&lt;/code&gt; and &lt;code&gt;**kwargs&lt;/code&gt; are super useful tools, that when used properly&#xA;can make you code much simpler and easier to maintain.  Large manual&#xA;conversions from a dataset to function arguments can be packed and unpacked&#xA;into lists or dictionaries. Beware though, this power &lt;strong&gt;can&lt;/strong&gt; lead to some&#xA;really unreadable/unusable code if done wrong.&lt;/p&gt;&#xA;&lt;style&gt;&#xA;/* h2 {display: block;} */&#xA;h2&gt;img { margin: auto; width: 100%;}&#xA;&lt;/style&gt;&#xA;&lt;p&gt;Python &lt;code&gt;*args&lt;/code&gt; and &lt;code&gt;**kwargs&lt;/code&gt; are super useful tools, that when used properly can make you code much simpler and easier to maintain.  Large manual conversions from a dataset to function arguments can be packed and unpacked into lists or dictionaries. Beware though, this power &lt;strong&gt;can&lt;/strong&gt; lead to some really unreadable/unusable code if done wrong.&lt;/p&gt;&#xA;&lt;h2 id=&#34;args-are-for-lists&#34;&gt;*args are for lists &lt;a href=&#34;#args-are-for-lists&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;*args are some magical syntax that will collect function arguments into a list, or unpack a list into individual arguments.&lt;/p&gt;&#xA;&lt;h2 id=&#34;recieving-args&#34;&gt;recieving *args &lt;a href=&#34;#recieving-args&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;When recieving variables as a &lt;code&gt;*&amp;lt;varname&amp;gt;&lt;/code&gt;, commonly &lt;code&gt;*args&lt;/code&gt;, the arguments get &lt;strong&gt;packed&lt;/strong&gt; into an ordered list.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Never add *args to your function definition (almost never)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Generally I find &lt;code&gt;*args&lt;/code&gt; poor naming and it only drives confusion to the user looking at your function trying to decide what exactly it does.  Here I have chosen the name &lt;code&gt;printrows&lt;/code&gt; since we are printing each item as a row.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;printer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;printrows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;row&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;enumerate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;printrows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;row&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;printer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;eggs&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;spam&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;ham&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;eggs&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;spam&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ham&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;be-aware-of-antipatterns&#34;&gt;Be Aware of AntiPatterns &lt;a href=&#34;#be-aware-of-antipatterns&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If your &lt;code&gt;*args&lt;/code&gt; collection is distictly different things, then make them separate variables.  Using &lt;code&gt;*args&lt;/code&gt; as a crutch can lead to a really confusing api for your users, even yourself.&lt;/p&gt;&#xA;&lt;h2 id=&#34;heading&#34;&gt;❌ &lt;a href=&#34;#heading&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here &lt;code&gt;*args&lt;/code&gt; is confusing as we are a bit unsure of what to pass to &lt;code&gt;get_user_data&lt;/code&gt;, or which order it needs to be in without reading the code.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_user_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;does stuff given a users GitHub and DevTo username&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;github&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;reuqests&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https://api.github.com/users/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;devto&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;requests&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https://dev.to/api/users/by_username?url=&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;heading-1&#34;&gt;✔ &lt;a href=&#34;#heading-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here the function signature makes it clear what &lt;code&gt;get_user_data&lt;/code&gt; expects.  Users will not have to read your docstring or worse your source code to understand it each time the reference it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_user_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;github_username&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;devto_username&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;does stuff given a users GitHub and DevTo username&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;github&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;reuqests&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https://api.github.com/users/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;github_username&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;devto&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;requests&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https://dev.to/api/users/by_username?url=&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devto_username&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;sending-args&#34;&gt;sending *args &lt;a href=&#34;#sending-args&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Inversely we can send a list of things as individual arguments by &lt;strong&gt;unpacking&lt;/strong&gt; them into the function call.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;things_to_print&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;eggs&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;spam&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;ham&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;printer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;things_to_print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;eggs&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;spam&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ham&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;kwargs-are-for-dictionaries&#34;&gt;**kwargs are for dictionaries &lt;a href=&#34;#kwargs-are-for-dictionaries&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Just like &lt;code&gt;*args&lt;/code&gt; being for lists, &lt;code&gt;**kwargs&lt;/code&gt; are for dictionaries.  When packing them up inside of a function. The argument name passed in becomes the key, then invers happens when unpacking, the key becomes the argument for the function.&lt;/p&gt;&#xA;&lt;h2 id=&#34;recieving-kwargs&#34;&gt;recieving **kwargs &lt;a href=&#34;#recieving-kwargs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is a function accepting &lt;code&gt;**printrows&lt;/code&gt; as it’s only input. Any keyword argument that you pass into the function will get packed into a dictionary.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;printer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;printrows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;key&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;printrows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;printrows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;printer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;breakfast&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;eggs&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lunch&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;spam&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dinner&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;ham&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;breakfast&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;eggs&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;lunch&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;spam&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;dinner&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ham&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Any arguments passed in will throw a &lt;code&gt;TypeError&lt;/code&gt;, since this &lt;code&gt;printer&lt;/code&gt; does not accept any positional arguments.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;printer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;one&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;---------------------------------------------------------------------------&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;ne&#34;&gt;TypeError&lt;/span&gt;                                 &lt;span class=&#34;n&#34;&gt;Traceback&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;most&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;recent&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;call&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;last&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ipython&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f03e96cb5e14&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;module&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;----&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;printer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;one&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;ne&#34;&gt;TypeError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;printer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;takes&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;positional&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;arguments&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;but&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;was&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;given&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;avoid-anti-patterns&#34;&gt;Avoid Anti-Patterns &lt;a href=&#34;#avoid-anti-patterns&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Just as above, if your items are clearly separate things, make them separate things and do not use &lt;code&gt;**kwargs&lt;/code&gt;.  &lt;code&gt;**kwargs&lt;/code&gt; are great when you have collections of things that all get treated exactly the sam, if they get treated differently, or you are expecting certain keys to always exist it will be very confusing to your users what they need to pass in.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sending-kwargs&#34;&gt;sending **kwargs &lt;a href=&#34;#sending-kwargs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Sending &lt;code&gt;**kwargs&lt;/code&gt; is quite useful.  Especially when combining various libraries together.  Often times you can coerse objects into a dictionary, often with something like &lt;code&gt;.to_dict()&lt;/code&gt;, then pass that whole dictionary to another function.  This makes gluing different libraries together a breeze at times.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;things_to_print&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;breakfast&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;eggs&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lunch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;spam&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dinner&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;ham&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;printer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;things_to_print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;breakfast&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;eggs&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;lunch&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;spam&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;dinner&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ham&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;hr/&gt;&#xA;&lt;p&gt;I setup a replit.com with these examples so that you can quickly jump in, run it, break it, fix it, add breakpoints and really get a feel for them yourself. Check it out 👉 &lt;a href=&#34;https://replit.com/@WaylonWalker/args#main.py&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/replit.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/replit.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://replit.com/@WaylonWalker/args#main.py&lt;/a&gt;&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;I hope this helps you understand &lt;code&gt;*args&lt;/code&gt; and &lt;code&gt;**kwargs&lt;/code&gt; just a bit more.  They can be quite handy to greatly simplify repetative code, expecially if we already have the data setup in the right data structure.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Teemu pytest-sugar</title>
    <id>https://waylonwalker.com/teemu-pytest-sugar/</id>
    <updated>2020-06-08T16:13:31Z</updated>
    <published>2020-06-08T16:13:31Z</published>
    <link href="https://waylonwalker.com/teemu-pytest-sugar/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered pytest-sugar by Teemu, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/Teemu/pytest-sugar&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pytest-sugar&lt;/a&gt; by &lt;a href=&#34;https://github.com/Teemu&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Teemu&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;a plugin for py.test that changes the default look and feel of py.test (e.g. progressbar, show tests that fail instantly)&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ari-hacks the-hub</title>
    <id>https://waylonwalker.com/ari-hacks-the-hub/</id>
    <updated>2020-06-08T15:00:03Z</updated>
    <published>2020-06-08T15:00:03Z</published>
    <link href="https://waylonwalker.com/ari-hacks-the-hub/" rel="alternate" type="text/html"></link>
    <summary type="text">the-hub by ari-hacks is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/ari-hacks/the-hub&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;the-hub&lt;/a&gt; by &lt;a href=&#34;https://github.com/ari-hacks&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ari-hacks&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;📈📊 A hub where users can experiment with graphing and Python in the browser (&lt;a href=&#34;https://pyodide-experiment.herokuapp.com/&#34;&gt;https://pyodide-experiment.herokuapp.com/&lt;/a&gt;)&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>pre-commit is awesome</title>
    <id>https://waylonwalker.com/pre-commit-is-awesome/</id>
    <updated>2020-06-05T05:00:00Z</updated>
    <published>2020-06-05T05:00:00Z</published>
    <link href="https://waylonwalker.com/pre-commit-is-awesome/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered the ✨ awesomeness that is pre-commit. I steered away from it for so long because it seemed like a big daunting thing to set up, but...</summary>
    <content type="html">&lt;p&gt;I recently discovered the ✨ awesomeness that is pre-commit. I steered away&#xA;from it for so long because it seemed like a big daunting thing to set up, but&#xA;really it’s easy. It will automatically run checks for you. In some cases, it&#xA;will even automatically fix them for you. Out of the box, it will do things&#xA;like automatically trim extra whitespace, fix file endings, and ensure file&#xA;sizes are not too large for &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I recently discovered the ✨ awesomeness that is pre-commit. I steered away from it for so long because it seemed like a big daunting thing to set up, but really it’s easy. It will automatically run checks for you. In some cases, it will even automatically fix them for you. Out of the box, it will do things like automatically trim extra whitespace, fix file endings, and ensure file sizes are not too large for git.&lt;/p&gt;&#xA;&lt;h2 id=&#34;quickstart&#34;&gt;Quickstart &lt;a href=&#34;#quickstart&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It comes with a &lt;code&gt;sample-config&lt;/code&gt; that is pretty general purpose and use for just about any project in git.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip instal pre-commit&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pre-commit sample-config &amp;gt; .pre-commit-config.yaml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pre-commit install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;added pre-commit&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;cloned-repo&#34;&gt;Cloned Repo &lt;a href=&#34;#cloned-repo&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Once someone has created the &lt;code&gt;.pre-commit-config.yaml&lt;/code&gt; everyone on the team will want to be running it for consistency’s sake. (make sure everyone agrees with the config you have chosen first). Simply install the existing config.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install pre-commit&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone &amp;lt;repo&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pre-commit install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;added pre-commit&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;sample-config&#34;&gt;sample-config &lt;a href=&#34;#sample-config&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The sample configuration does some really basic, file ending, trailing-whitespace fixing. And checks for files too large for git. This one saved me when I tried to commit linux &lt;code&gt;rpm&lt;/code&gt; once 🤦‍♀️.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# See https://pre-commit.com for more information&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# See https://pre-commit.com/hooks.html for more hooks&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;repos&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;repo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://github.com/pre-commit/pre-commit-hooks&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;rev&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;v2.4.0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;hooks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;trailing-whitespace&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;end-of-file-fixer&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;check-yaml&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;check-added-large-files&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;adding-some-extras-from-pre-commit-themselves&#34;&gt;Adding some extras from pre-commit themselves &lt;a href=&#34;#adding-some-extras-from-pre-commit-themselves&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here I have added a couple of extra ones form pre-commit&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;check-case-conflict&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Check for files that would conflict in case-insensitive filesystems&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;check-merge-conflict&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Check for files that contain merge conflict strings.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;debug-statements&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Check for debugger imports and py37+ `breakpoint()` calls in python source.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;requirements-txt-fixer&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Sorts entries in requirements.txt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;forbid-new-submodules&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Check for git submodules&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;flake8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# runs python flake8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The submodules one is big. I have seen several folks trying to learn git for the first time mistakenly start nesting all of their projects underneath each other and eventually losing a lot of work. Trying to learn the command line and git all at once can be really confusing.&lt;/p&gt;&#xA;&lt;h2 id=&#34;skip-pre-commit&#34;&gt;skip pre-commit &lt;a href=&#34;#skip-pre-commit&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;So you have a big codebase and you are trying to get pre-commit ready, but you just need your changes in.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;l&#34;&gt;git commit -m &amp;#34;commiting wihout pre-commit&amp;#34; --no-verify&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;manually-run-pre-commit&#34;&gt;manually run pre-commit &lt;a href=&#34;#manually-run-pre-commit&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you have an existing repo and want to run pre-commit on everything, since it was pre-existing, you can do that manually.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;l&#34;&gt;pre-commit run --all-files&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;so-pre-commit-changed-some-files&#34;&gt;So pre-commit changed some files &lt;a href=&#34;#so-pre-commit-changed-some-files&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Since &lt;code&gt;pre-commit&lt;/code&gt; only runs against staged files, but makes changes to the local files you need to add them.&lt;/p&gt;&#xA;&lt;p&gt;Here is a git status after committing with some trailing whitespace issues.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ git status&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;On branch main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Changes to be committed:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;use &lt;span class=&#34;s2&#34;&gt;&amp;#34;git restore --staged &amp;lt;file&amp;gt;...&amp;#34;&lt;/span&gt; to unstage&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        modified: README.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Changes not staged &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; commit:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;use &lt;span class=&#34;s2&#34;&gt;&amp;#34;git add &amp;lt;file&amp;gt;...&amp;#34;&lt;/span&gt; to update what will be committed&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;use &lt;span class=&#34;s2&#34;&gt;&amp;#34;git restore &amp;lt;file&amp;gt;...&amp;#34;&lt;/span&gt; to discard changes in working directory&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        modified: README.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;pre-commit&lt;/code&gt; will keep yelling at you about &lt;code&gt;trailing whitespace&lt;/code&gt; until you add the files.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add README.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;community-developed-plugins&#34;&gt;Community Developed plugins &lt;a href=&#34;#community-developed-plugins&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;give me more&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;These almost make it &lt;strong&gt;too&lt;/strong&gt; easy. Sharing your process to get up and running without &lt;code&gt;pre-commit&lt;/code&gt; can involve a lot of instructions. Installing several different tools, then running them manually, probably forgetting to do so sometimes. These will automatically install and only run scoped to the files that have changed, not on the whole repo.&lt;/p&gt;&#xA;&lt;h3 id=&#34;isort&#34;&gt;isort &lt;a href=&#34;#isort&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- &lt;span class=&#34;nt&#34;&gt;repo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://github.com/asottile/seed-isort-config&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;rev&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;v2.1.1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;hooks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;seed-isort-config&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;repo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://github.com/pre-commit/mirrors-isort&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;rev&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;v4.3.21&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;hooks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;isort&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;isortcfg&#34;&gt;.isort.cfg &lt;a href=&#34;#isortcfg&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;In order to get isort to play nicely with black, I found great success with the following config placed in the root of the repo at &lt;code&gt;.isort.cfg&lt;/code&gt;. Without these settings, I found that you commits will consistently fail checks because &lt;code&gt;isort&lt;/code&gt; and &lt;code&gt;black&lt;/code&gt; are fighting each other.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;settings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;multi_line_output&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;include_trailing_comma&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;True&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;force_grid_wrap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;use_parentheses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;True&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;line_length&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;88&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;flake8&#34;&gt;.flake8 &lt;a href=&#34;#flake8&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Just as with &lt;code&gt;isort&lt;/code&gt; flake8 tends to complain about a few things that black does. To get them to play nicely together place this file in the root of the repo at &lt;code&gt;.flake8&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# taken from black&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# added E231 as is conflicts with black formatting&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;flake8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;ignore&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;E203&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;E266&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;E501&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;W503&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;E231&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;F541&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;max-line-length&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;88&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;max-complexity&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;select&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;C&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;E&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;F&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;W&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;T4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;B9&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;black&#34;&gt;black &lt;a href=&#34;#black&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Black is an amazing CLI tool the python community has been blessed with. It was developed by python core dev Lukasz Langa after deep research of real python projects. It will autoformat your project and will check that the AST before and after remains the same ensuring that the code will run exactly the same. It only makes it more readable. I keep black installed and set to run on save. Many times I will bang out some sloppy code with long lines or poor indentation hit save and let black take care of the easy work.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- &lt;span class=&#34;nt&#34;&gt;repo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://github.com/asottile/blacken-docs&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;rev&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;v1.7.0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;hooks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;blacken-docs&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;additional_dependencies&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;l&#34;&gt;black]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;repo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://github.com/psf/black&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;rev&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;19.&lt;/span&gt;&lt;span class=&#34;l&#34;&gt;3b0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;hooks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;black&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;mypy&#34;&gt;mypy &lt;a href=&#34;#mypy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;I have recently fallen in love with mypy. It has saved me from shipping some bugs that would not have been caught with tests, even with 100% coverage. I don’t have 100% coverage across every possible type entered.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;repo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://github.com/pre-commit/mirrors-mypy&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;rev&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;v0.720&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;hooks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;mypy&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;exclude&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;tests/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;your-own-plugin&#34;&gt;Your own plugin &lt;a href=&#34;#your-own-plugin&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Sometimes you have a CLI tool that you want to run, but there is no plugin. No worries, you can install manually set the repo to local, and add an entry for your CLI command to run.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;repo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;hooks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;interrogate&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Interrogate docstring coverage check&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;types&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;l&#34;&gt;file, python]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;entry&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;interrogate -f 100 -vv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;hr/&gt;&#xA;&lt;p&gt;I have been writing short snippets about my mentality breaking into the tech/data industry in my newsletter, 👇 check it out and lets get the conversation started.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Building kedro.dev</title>
    <id>https://waylonwalker.com/building-kedro-dev/</id>
    <updated>2020-06-05T05:00:00Z</updated>
    <published>2020-06-05T05:00:00Z</published>
    <link href="https://waylonwalker.com/building-kedro-dev/" rel="alternate" type="text/html"></link>
    <summary type="text">This is my journey to building up the community page.</summary>
    <content type="html">&lt;p&gt;Follow along the Journey as I build out &lt;a href=&#34;https://kedro.dev&#34;&gt;kedro.dev&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;building-a-community&#34;&gt;Building a Community &lt;a href=&#34;#building-a-community&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have really enjoyed my own personal journey as I have started to build all of my data pipeline projects with the kedro framework.  I want to start building a place to share resources with the community.  I want to see this community grow and flourish.  They say in front end web development if you are not using a framework you end up building one.  That’s exactly what I was doing before I started using kedro.  I want to build out a set of resources that this community can learn from and start to use the framework at their own pace without needing to develop their own from scratch.&lt;/p&gt;&#xA;&lt;h2 id=&#34;research&#34;&gt;research &lt;a href=&#34;#research&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Looking into the front end frameworks to see how they welcome their community.  Much of my inspiration is from them, bringing lessons learned to data.&lt;/p&gt;&#xA;&lt;h3 id=&#34;pages&#34;&gt;pages &lt;a href=&#34;#pages&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;banner&lt;/li&gt;&#xA;&lt;li&gt;nav&#xA;&lt;ul&gt;&#xA;&lt;li&gt;docs -&amp;gt; readthedocs&lt;/li&gt;&#xA;&lt;li&gt;tutorial -&amp;gt; kedro-examples&lt;/li&gt;&#xA;&lt;li&gt;blog -&amp;gt; medium&lt;/li&gt;&#xA;&lt;li&gt;community&#xA;&lt;ul&gt;&#xA;&lt;li&gt;support&lt;/li&gt;&#xA;&lt;li&gt;team&lt;/li&gt;&#xA;&lt;li&gt;courses&lt;/li&gt;&#xA;&lt;li&gt;examples&lt;/li&gt;&#xA;&lt;li&gt;meetups&lt;/li&gt;&#xA;&lt;li&gt;conferences&lt;/li&gt;&#xA;&lt;li&gt;articles&lt;/li&gt;&#xA;&lt;li&gt;podcasts&lt;/li&gt;&#xA;&lt;li&gt;videos&lt;/li&gt;&#xA;&lt;li&gt;external resources&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;search&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;examples&lt;/li&gt;&#xA;&lt;li&gt;footer&lt;/li&gt;&#xA;&lt;li&gt;sponsors&lt;/li&gt;&#xA;&lt;li&gt;newsletter&lt;/li&gt;&#xA;&lt;li&gt;copyright&lt;/li&gt;&#xA;&lt;li&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;components&#34;&gt;components &lt;a href=&#34;#components&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;edit this page&lt;/li&gt;&#xA;&lt;li&gt;scrolling toc&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;stack-overflow-api&#34;&gt;Stack Overflow Api &lt;a href=&#34;#stack-overflow-api&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;fetch last 5 posts.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;https://api.stackexchange.com/2.2/questions?order=desc&amp;amp;sort=activity&amp;amp;site=stackoverflow&amp;amp;tagged=kedro&amp;amp;pagesize=5&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;devto-api&#34;&gt;DEV.to api &lt;a href=&#34;#devto-api&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;fetch last 5 posts&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;https://dev.to/api/articles?tag=kedro&amp;amp;per_page=5&amp;amp;page=1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ python-desert desert</title>
    <id>https://waylonwalker.com/python-desert-desert/</id>
    <updated>2020-06-04T01:10:46Z</updated>
    <published>2020-06-04T01:10:46Z</published>
    <link href="https://waylonwalker.com/python-desert-desert/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on desert by python-desert.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/python-desert/desert&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;desert&lt;/a&gt; by &lt;a href=&#34;https://github.com/python-desert&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;python-desert&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Deserialize to objects while staying DRY&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tamsanh kedro-wings</title>
    <id>https://waylonwalker.com/tamsanh-kedro-wings/</id>
    <updated>2020-06-03T19:11:26Z</updated>
    <published>2020-06-03T19:11:26Z</published>
    <link href="https://waylonwalker.com/tamsanh-kedro-wings/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered kedro-wings by tamsanh, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/tamsanh/kedro-wings&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-wings&lt;/a&gt; by &lt;a href=&#34;https://github.com/tamsanh&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tamsanh&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;Kedro Wings automatically creates catalog entries to simplify Kedro pipeline writing. See the video here: &lt;a href=&#34;https://www.youtube.com/watch?v=p4ELo1tqbYY&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://www.youtube.com/watch?v=p4ELo1tqbYY&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ dataengineerone kedro-streaming-twitter-pipeline</title>
    <id>https://waylonwalker.com/dataengineerone-kedro-streaming-twitter-pipeline/</id>
    <updated>2020-05-31T00:55:25Z</updated>
    <published>2020-05-31T00:55:25Z</published>
    <link href="https://waylonwalker.com/dataengineerone-kedro-streaming-twitter-pipeline/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out kedro-streaming-twitter-pipeline by dataengineerone. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/dataengineerone/kedro-streaming-twitter-pipeline&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-streaming-twitter-pipeline&lt;/a&gt; by &lt;a href=&#34;https://github.com/dataengineerone&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dataengineerone&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ junegunn fzf.vim</title>
    <id>https://waylonwalker.com/junegunn-fzf-vim/</id>
    <updated>2020-05-29T13:22:23Z</updated>
    <published>2020-05-29T13:22:23Z</published>
    <link href="https://waylonwalker.com/junegunn-fzf-vim/" rel="alternate" type="text/html"></link>
    <summary type="text">junegunn has done a fantastic job with fzf.vim. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/junegunn&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;junegunn&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/junegunn/fzf.vim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fzf.vim&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;fzf ❤️ vim&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Kedro Static Viz 0.3.0 is out with Hooks Support</title>
    <id>https://waylonwalker.com/kedro-static-viz-0-3-0/</id>
    <updated>2020-05-28T05:00:00Z</updated>
    <published>2020-05-28T05:00:00Z</published>
    <link href="https://waylonwalker.com/kedro-static-viz-0-3-0/" rel="alternate" type="text/html"></link>
    <summary type="text">kedro-static-viz is out with support for the newly released hooks feature. This means that you can have automatically deploy a full gatsby site keeping your...</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/WaylonWalker/kedro-static-viz&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-static-viz&lt;/a&gt; is out with support for the newly released hooks feature.  This means that you can have &lt;code&gt;kedro-static-viz&lt;/code&gt; automatically deploy a full gatsby site &lt;code&gt;before_pipeline_run&lt;/code&gt; keeping your visualization always up to date.&lt;/p&gt;&#xA;&lt;p&gt;Even though it is a static site there is no functionality lost.  The only thing that’s missing is the flask server.  With &lt;a href=&#34;https://github.com/WaylonWalker/kedro-static-viz&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-static-viz&lt;/a&gt; you can deploy your visualization to a number of static hosting providers such as GitHub pages free of charge with wicked fast performance&lt;/p&gt;&#xA;&lt;h2 id=&#34;-its-fast&#34;&gt;⚡ It’s Fast &lt;a href=&#34;#-its-fast&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Even though it’s built on gatsbyjs the full site builds in under 2s even on slower hardware.  This is because the site is already pre-rendered and stripped of any excess.  It’s zipped up right into the python package and is typically used with the cli, but now can be used with python, or as a hook as well.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;h3 id=&#34;what-is-kedro-vizhttpsgithubcomkedro-orgkedro-viz-&#34;&gt;What is &lt;a href=&#34;https://github.com/kedro-org/kedro-viz&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-viz&lt;/a&gt; 🤔 &lt;a href=&#34;#what-is-kedro-vizhttpsgithubcomkedro-orgkedro-viz-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Kedro viz is a fantastic kedro plugin that allows you to visualize your data pipeline.  Kedro allows you to quickly build production-ready pipelines where you just configure a catalog, then toss python functions into a big pile.  Kedro figures out the order everything needs ran in for you, allows you to run a datasets dependencies or dependents only.  &lt;a href=&#34;https://github.com/kedro-org/kedro-viz&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-viz&lt;/a&gt; gives you a great way to see this ordering visually.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/pipeline_visualisation-1.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/pipeline_visualisation-1.png&#34; alt=&#34;a visualization of a kedro data pipeline featuring data and functions flowing together.&#34; title=&#34;kedro visualization&#34;/ data-glightbox=&#34;description: a visualization of a kedro data pipeline featuring data and functions flowing together.&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;kedro visualization from the projects readme&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;check-out-a-live-running-example&#34;&gt;Check out a live running example &lt;a href=&#34;#check-out-a-live-running-example&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Using the power of GitHub actions the I have built a kedro iris pipeline visualization that can be found on &lt;a href=&#34;https://static-viz.kedro.dev/&#34;&gt;https://static-viz.kedro.dev/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;itching-to-get-started-with-kedro&#34;&gt;Itching to get started with kedro &lt;a href=&#34;#itching-to-get-started-with-kedro&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can be up and running in a matter of minutes if you already have python running on your machine.&lt;/p&gt;&#xA;&lt;p&gt;Make a &lt;a href=&#34;/virtual-environment/&#34; class=&#34;glossary-term&#34; title=&#34;Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...&#34;&gt;virtual environment&lt;/a&gt; with your environment manager of choice.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;conda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;create&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;practice&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;3.8&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;conda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;activate&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;practice&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Install kedro. Then create a new project with their awesome cli template built on cookiecutter. Make sure to answer &lt;code&gt;y&lt;/code&gt; to get a prebuilt example pipeline with data.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;pip install kedro kedro-static-viz&#xA;kedro new&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;vizualize-your-pipeline-with-the-cli-&#34;&gt;Vizualize your pipeline with the cli 〽 &lt;a href=&#34;#vizualize-your-pipeline-with-the-cli-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;For local use when you already have the full project &lt;code&gt;kedro viz&lt;/code&gt; is a great tool to use, but this is an article about kedro-static-viz.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;viz&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;viz&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Since we used &lt;code&gt;kedro-static-viz&lt;/code&gt; you will have a new directory called &lt;code&gt;public&lt;/code&gt; that you can host on any static web hosting service, like GitHub pages or Netlify.&lt;/p&gt;&#xA;&lt;h2 id=&#34;ready-to-try-out-the-new-hooks-feature-&#34;&gt;Ready to try out the new hooks feature 🙋‍♀️ &lt;a href=&#34;#ready-to-try-out-the-new-hooks-feature-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Open up your &lt;code&gt;&amp;lt;project&amp;gt;/src/run.py&lt;/code&gt; and add the hook to your &lt;code&gt;ProjectContext&lt;/code&gt; class.  Next time you run your pipeline you will have an updated pipeline.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro_static_viz.hooks&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;StaticViz&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;ProjectContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;KedroContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;project_name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro0160&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;project_version&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;0.16.1&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;package_name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro0160&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;hooks&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;StaticViz&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;now-run-that-pipeline-&#34;&gt;Now Run that pipeline 🏃‍♀️ &lt;a href=&#34;#now-run-that-pipeline-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Run your pipeline and enjoy that fresh kedro viz each and every time you run your pipeline.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro run&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;want-to-make-your-own-hooks-&#34;&gt;Want to make your own hooks 🎣 &lt;a href=&#34;#want-to-make-your-own-hooks-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Check out some of my other articles on building kedro hooks.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/kedro-class-hooks/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/configurable-kedro-hooks.png&#34; alt=&#34;creating customizable kedro hooks&#34;/ data-glightbox=&#34;description: creating customizable kedro hooks&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/creating-the-kedro-preflight-hook/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/kedro-hooks.png&#34; alt=&#34;creating the kedro preflight hook&#34;/ data-glightbox=&#34;description: creating the kedro preflight hook&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Check out the example 👉 &lt;a href=&#34;https://static-viz.kedro.dev/&#34;&gt;https://static-viz.kedro.dev/&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ joeyespo pytest-watch</title>
    <id>https://waylonwalker.com/joeyespo-pytest-watch/</id>
    <updated>2020-05-24T19:25:52Z</updated>
    <published>2020-05-24T19:25:52Z</published>
    <link href="https://waylonwalker.com/joeyespo-pytest-watch/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about pytest-watch, an amazing project by joeyespo. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/joeyespo/pytest-watch&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pytest-watch&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/joeyespo&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;joeyespo&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Local continuous test runner with pytest and watchdog.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ aws aws-cli</title>
    <id>https://waylonwalker.com/aws-aws-cli/</id>
    <updated>2020-05-24T02:35:29Z</updated>
    <published>2020-05-24T02:35:29Z</published>
    <link href="https://waylonwalker.com/aws-aws-cli/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out aws and their project aws-cli.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/aws&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;aws&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/aws/aws-cli&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;aws-cli&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Universal Command Line Interface for Amazon Web Services&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Create Configurable Kedro Hooks</title>
    <id>https://waylonwalker.com/kedro-class-hooks/</id>
    <updated>2020-05-23T05:00:00Z</updated>
    <published>2020-05-23T05:00:00Z</published>
    <link href="https://waylonwalker.com/kedro-class-hooks/" rel="alternate" type="text/html"></link>
    <summary type="text">There are two main ways to create kedro hooks, with modules and classes. Each one still uses the same verbiage as the function/method names.</summary>
    <content type="html">&lt;p&gt;There are two main ways to create kedro hooks, with modules and classes.  Each&#xA;one still uses the same verbiage as the function/method names.&lt;/p&gt;&#xA;&lt;p&gt;Class hooks seem a bit special as they give you a way to configure them so that they are a bit more generally useful.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/what-is-kedro/&#34; class=&#34;wikilink&#34; data-title=&#34;What is Kedro&#34; data-description=&#34;Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...&#34; data-date=&#34;2021-08-17&#34; data-preview=&#34;Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...&#34;&gt;What is Kedro&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If you are completely unsure what kedro is be sure to check out my &lt;a href=&#34;https://waylonwalker.com/wike&#34;&gt;what is kedro&lt;/a&gt; post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation &lt;a href=&#34;#installation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;.create a new environment manager of choice.  Here I will use &lt;code&gt;conda&lt;/code&gt;. Then we will install &lt;code&gt;kedro&lt;/code&gt; from pypi.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda create -n kedro_class_hooks -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda activate kedro_class_hooks &lt;span class=&#34;c1&#34;&gt;# may also be source activate kedro_class_hooks or activate kedro_class_hooks&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install kedro&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;create-a-sample-project&#34;&gt;Create a sample project &lt;a href=&#34;#create-a-sample-project&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;h3 id=&#34;kedro-new&#34;&gt;Kedro new &lt;a href=&#34;#kedro-new&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;For more details check out my full post on &lt;a href=&#34;https://waylonwalker.com/knew&#34;&gt;kedro new&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;For this post I really just want a working pipeline as fast as possible.  For this I am going to use iris pipeline that is generated from the &lt;code&gt;kedro new&lt;/code&gt; command in the cli.  It’s &lt;strong&gt;important&lt;/strong&gt; that you answer &lt;code&gt;y&lt;/code&gt; to create an example pipeline.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;h3 id=&#34;hold-on-&#34;&gt;Hold On ✋ &lt;a href=&#34;#hold-on-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Did you create a separate environment for this?  Please do.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro new&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;After you run the &lt;code&gt;kedro new&lt;/code&gt; command it will ask a series of questions.  👇 Here is how I answered them.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Project Name:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;=============&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Please enter a human readable name &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; your new project.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Spaces and punctuation are allowed.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;New Kedro Project&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;: Kedro Class Hooks&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Repository Name:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;================&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Please enter a directory name &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; your new project repository.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Alphanumeric characters, hyphens and underscores are allowed.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Lowercase is recommended.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;kedro-class-hooks&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Python Package Name:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;====================&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Please enter a valid Python package name &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; your project package.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Alphanumeric characters and underscores are allowed.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Lowercase is recommended. Package name must start with a letter or underscore.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;kedro_class_hooks&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Generate Example Pipeline:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;==========================&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Do you want to generate an example pipeline in your project?&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Good &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; first-time users. &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;N&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;y/N&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;: y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Change directory to the project generated in /mnt/c/temp/kedro-hooks/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;A best-practice setup includes initialising git and creating a virtual environment before running &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;kedro install&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt; to install project-specific dependencies. Refer to the Kedro documentation: https://kedro.readthedocs.io/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;install-the-project&#34;&gt;Install the Project &lt;a href=&#34;#install-the-project&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Next install the project itself and all of its dependencies with the &lt;code&gt;kedro install&lt;/code&gt; command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; kedro-hooks&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;-run-the-pipeline&#34;&gt;🏃‍♀️ Run the pipeline &lt;a href=&#34;#-run-the-pipeline&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Before we start developing any hooks lets make sure everything is set up correctly by running the pipeline with &lt;code&gt;kedro run&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro run&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;class-hook-without-self&#34;&gt;class hook without &lt;code&gt;self&lt;/code&gt; &lt;a href=&#34;#class-hook-without-self&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;A kedro class-based hook is a class with methods using the kedro lifecycle names, decorated with &lt;code&gt;@hook_impl&lt;/code&gt;, If we create a class-based kedro hook without &lt;code&gt;self&lt;/code&gt; in the method calls, we simply pass the hook class itself into the hooks list. And we are off.  Kedro will call each method as it hits that point in its lifecycle.  It will pass any of the possible arguments, see arguments below.  Each method has a different set of possible arguments.  You don’t need to ask for all of them, but I did here so that you could see them.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.framework.hooks&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hook_impl&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;debug_hook&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;debugs all kedro hook points&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;nd&#34;&gt;@staticmethod&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@hook_impl&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;before_pipeline_run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run_params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;pops into a debugger before pipeline run&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;I hooked in right before the pipeline run&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;should_before_pipeline_run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;breakpoint&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;nd&#34;&gt;@staticmethod&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@hook_impl&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;after_pipeline_run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run_params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;pops into a debugger after pipeline run&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;I hooked in right after the pipeline run&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;breakpoint&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;nd&#34;&gt;@staticmethod&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@hook_impl&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;on_pipeline_error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;run_params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;pops into a debugger on pipeline error&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;I hooked into the pipeline during an error&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;breakpoint&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;nd&#34;&gt;@staticmethod&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@hook_impl&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;after_catalog_created&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;conf_catalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;conf_creds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;feed_dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;save_version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;load_versions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;run_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;pops into a debugger after catalog created&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;I hooked in right after the catalog created&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;breakpoint&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;nd&#34;&gt;@staticmethod&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@hook_impl&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;before_node_run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;is_async&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;run_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;pops into a debugger before node run&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;I hooked in right before the node run&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;breakpoint&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;nd&#34;&gt;@staticmethod&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@hook_impl&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;after_node_run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;outputs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;is_async&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;run_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;pops into a debugger after node run&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;I hooked in right after the node run&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;breakpoint&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;nd&#34;&gt;@staticmethod&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@hook_impl&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;on_node_error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;is_async&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;run_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;pops into a debugger on node error&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;I hooked into the node during an error&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;breakpoint&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;implement-the-hook-object&#34;&gt;Implement the hook object &lt;a href=&#34;#implement-the-hook-object&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;With this version of the hook it gets added to the &lt;code&gt;ProjectContext&lt;/code&gt; as the class itself, not an instance.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;ProjectContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;KedroContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Users can override the remaining methods from the parent class here,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    or create new ones (e.g. as required by plugins)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;project_name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro_class_hooks&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# `project_version` is the version of kedro used to generate the project&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;project_version&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;0.16.1&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;package_name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro_class_hooks&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;hooks&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;debug_hook&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;generalizing-debug-hook&#34;&gt;Generalizing debug_hook &lt;a href=&#34;#generalizing-debug-hook&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If we want to generalize the debug hook and make it a bit more re-usable across all of our projects, we can include the &lt;code&gt;self&lt;/code&gt; argument, on each method and a &lt;code&gt;__init__&lt;/code&gt; method in which we can configure our hook.  This will make the hook configurable.  We can now create an instance of the &lt;code&gt;debug_hook&lt;/code&gt; class, and tell it which lifecycle points should trigger the debugger.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34; Kedro Debug Hook module &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.framework.hooks&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hook_impl&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;debug_hook&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34; Kedro Debug Hook&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    Opens a debugger at any hook-able point of your kedro projects lifecycle.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    debug_hook is applied by adding it to the pipeline and setting the desired&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    debug points to true.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    Examples:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        &amp;gt;&amp;gt;&amp;gt; hooks = [debug_hook(should_debug_all=True)]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        &amp;gt;&amp;gt;&amp;gt; hooks = [debug_hook(should_debug_before_pipeline_run=True)]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    Args:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        should_debug_all (bool): overrides all points Defaults to False&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        should_debug_before_pipeline_run (bool): opens a debugger&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;            before_pipeline_run if True Defaults to False&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        should_debug_after_pipeline_run (bool): opens a debugger&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;            after_pipeline_run if True Defaults to False&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        should_debug_on_pipeline_error (bool): opens a debugger&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;            on_pipeline_error if True Defaults to False&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        should_debug_before_node_run (bool): opens a debugger&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;            before_node_run if True Defaults to False&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        should_debug_after_node_run (bool): opens a debugger&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;            after_node_run if True Defaults to False&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        should_debug_on_node_error (bool): opens a debugger&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;            on_node_error if True Defaults to False&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        should_debug_after_catalog_created (bool): opens a debugger&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;            after_catalog_created if True Defaults to False&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__init__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;should_debug_all&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;should_debug_before_pipeline_run&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;should_debug_after_pipeline_run&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;should_debug_on_pipeline_error&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;should_debug_before_node_run&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;should_debug_after_node_run&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;should_debug_on_node_error&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;should_debug_after_catalog_created&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;should_debug_before_pipeline_run&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;should_debug_before_pipeline_run&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;should_debug_all&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;should_debug_after_pipeline_run&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;should_debug_after_pipeline_run&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;should_debug_all&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;should_debug_on_pipeline_error&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;should_debug_on_pipeline_error&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;should_debug_all&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;should_debug_before_node_run&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;should_debug_before_node_run&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;should_debug_all&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;should_debug_after_node_run&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;should_debug_after_node_run&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;should_debug_all&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;should_debug_on_node_error&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;should_debug_on_node_error&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;should_debug_all&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;should_debug_after_catalog_created&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;should_debug_after_catalog_created&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;should_debug_all&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@hook_impl&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;before_pipeline_run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;run_params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;pops into a debugger before pipeline run&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;should_debug_before_pipeline_run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;breakpoint&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@hook_impl&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;after_pipeline_run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;run_params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;pops into a debugger after pipeline run&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;should_debug_after_pipeline_run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;breakpoint&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@hook_impl&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;on_pipeline_error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;run_params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;pops into a debugger on pipeline error&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;should_debug_on_pipeline_error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;breakpoint&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@hook_impl&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;after_catalog_created&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;conf_catalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;conf_creds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;feed_dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;save_version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;load_versions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;run_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;pops into a debugger after catalog created&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;should_debug_after_catalog_created&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;breakpoint&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@hook_impl&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;before_node_run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;is_async&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;run_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;pops into a debugger before node run&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;should_debug_before_node_run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;breakpoint&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@hook_impl&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;after_node_run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;outputs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;is_async&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;run_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;pops into a debugger after node run&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;should_debug_after_node_run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;breakpoint&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@hook_impl&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;on_node_error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;is_async&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;run_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;pops into a debugger on node error&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;should_debug_on_node_error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;breakpoint&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;implement-the-hook-instance&#34;&gt;implement the hook instance &lt;a href=&#34;#implement-the-hook-instance&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;When &lt;code&gt;self&lt;/code&gt; is used in the method calls we must pass an instance of the &lt;code&gt;debug_hook&lt;/code&gt; into the hooks list, not the class itself.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;ProjectContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;KedroContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Users can override the remaining methods from the parent class here,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    or create new ones (e.g. as required by plugins)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;project_name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro_class_hooks&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# `project_version` is the version of kedro used to generate the project&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;project_version&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;0.16.1&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;package_name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro_class_hooks&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;hooks&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;debug_hook&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;should_debug_all&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;final-thoughts&#34;&gt;Final thoughts &lt;a href=&#34;#final-thoughts&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Hooks are an amazing addition to the kedro framework that will allow the community to make big changes to how their kedro project gets ran without needing to change kedro itself.  Using a hook class with self can make them so much more configurable, and reusable across different projects without a lot of extra code. Personally I still really like the module method that we used in &lt;a href=&#34;https://waylonwalker.com/creating-the-kedro-preflight-hook/&#34;&gt;kedro-preflight&lt;/a&gt;.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Brainstorming Kedro Hooks</title>
    <id>https://waylonwalker.com/brainstorming-kedro-hooks/</id>
    <updated>2020-05-22T22:02:00Z</updated>
    <published>2020-05-22T22:02:00Z</published>
    <link href="https://waylonwalker.com/brainstorming-kedro-hooks/" rel="alternate" type="text/html"></link>
    <summary type="text">This post is a 🧠 branstorming work in progress. I will likely use it as a storage location/brain dump of hook ideas.</summary>
    <content type="html">&lt;p&gt;This post is a 🧠 branstorming work in progress.  I will likely use it as a&#xA;storage location/brain dump of hook ideas.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;h3 id=&#34;what-is-kedro-&#34;&gt;What is Kedro 🤔 &lt;a href=&#34;#what-is-kedro-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;If you are completely unsure what kedro is be sure to check out my &lt;a href=&#34;https://waylonwalker.com/what-is-kedro/&#34;&gt;what is kedro&lt;/a&gt; post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;after-catalog-created&#34;&gt;after_catalog_created &lt;a href=&#34;#after-catalog-created&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;filepath replacer&lt;/li&gt;&#xA;&lt;li&gt;bucket replacer&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;before-pipeline-run&#34;&gt;before_pipeline_run &lt;a href=&#34;#before-pipeline-run&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;preflight&lt;/li&gt;&#xA;&lt;li&gt;check that data exists&lt;/li&gt;&#xA;&lt;li&gt;run &lt;code&gt;kedro_static_viz&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;run mypy&lt;/li&gt;&#xA;&lt;li&gt;run interrogate&lt;/li&gt;&#xA;&lt;li&gt;run flake8&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;after-pipeline-run&#34;&gt;after_pipeline_run &lt;a href=&#34;#after-pipeline-run&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Great Expectations&lt;/li&gt;&#xA;&lt;li&gt;send email&lt;/li&gt;&#xA;&lt;li&gt;send slack&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;before-node-run&#34;&gt;before_node_run &lt;a href=&#34;#before-node-run&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;after-node-run&#34;&gt;after_node_run &lt;a href=&#34;#after-node-run&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Great Expectations&lt;/li&gt;&#xA;&lt;li&gt;save stats/meta data&lt;/li&gt;&#xA;&lt;li&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;execution-order&#34;&gt;Execution Order &lt;a href=&#34;#execution-order&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;hooks are executed in reverse order of the hooks list.&lt;/p&gt;&#xA;&lt;p&gt;hooks with &lt;code&gt;tryfirst&lt;/code&gt; will be moved to the end of the list&#xA;hooks with &lt;code&gt;trylast&lt;/code&gt; will be moved to the end of the list&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;after_catalog_created&lt;/li&gt;&#xA;&lt;li&gt;before_pipeline_run&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;args&#xA;&lt;ul&gt;&#xA;&lt;li&gt;run_params = run_params = {‘run_id’: ‘2020-05-23T15.24.23.958Z’, ‘project_path’: ‘/mnt/c/temp/kedro0160’, ’env’: ’local’, ‘kedro_version’: ‘0.15.9’, ’tags’: (), ‘from_nodes’: [], ’to_nodes’: [], ’node_names’: (), ‘from_inputs’: [], ’load_versions’: {}, ‘pipeline_name’: None, ’extra_params’:&lt;/li&gt;&#xA;&lt;li&gt;pipeline&lt;/li&gt;&#xA;&lt;li&gt;catalog&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;before_node_run&lt;/li&gt;&#xA;&lt;li&gt;after_node_run&lt;/li&gt;&#xA;&lt;li&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;when-does-data-get-saved&#34;&gt;When does data get saved??? &lt;a href=&#34;#when-does-data-get-saved&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;before or after node hook?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;unsure&#34;&gt;??Unsure?? &lt;a href=&#34;#unsure&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;does before  catalog load have access to parameters?&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Yes&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;steel-toeshttpsgithubcomwaylonwalkersteel-toes&#34;&gt;🥾&lt;a href=&#34;https://github.com/waylonwalker/steel-toes/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;steel toes&lt;/a&gt; &lt;a href=&#34;#steel-toeshttpsgithubcomwaylonwalkersteel-toes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;I was way too excited about this one and already created it&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;prevents pain from stepping on your teammates toes&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Kedro is so amazing at promoting collaboration between team members.  Each team member can check out the code, branch, and start work on their own section of the pipeline.  Issues can arrise if the team members section of the pipeline happen to cross.  Breaking changes happen, BREAKS during development happen and can completely kill a teammates workflow.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;is there a way to prevent toe stepping?&lt;/li&gt;&#xA;&lt;li&gt;try to load &lt;code&gt;filepath_&amp;lt;branch&amp;gt;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;if load fails try &lt;code&gt;filepath&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;save data to &lt;code&gt;filepath_&amp;lt;branch&amp;gt;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;how&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;on after_catalog_load check for existing “branch” data&lt;/li&gt;&#xA;&lt;li&gt;if “branch” data exists load that&lt;/li&gt;&#xA;&lt;li&gt;otherwise keep default&lt;/li&gt;&#xA;&lt;li&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;run-only-nodes-that-have-changed&#34;&gt;Run only nodes that have changed &lt;a href=&#34;#run-only-nodes-that-have-changed&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;store a deephash of functions code&lt;/li&gt;&#xA;&lt;li&gt;store a hash of the inputs&lt;/li&gt;&#xA;&lt;li&gt;if neither code or inputs changed run function, otherwise skip.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;How could a hook choose to skip the node?&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;static-viz-hook&#34;&gt;Static viz hook &lt;a href=&#34;#static-viz-hook&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Before pipeline run&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;make site&lt;/li&gt;&#xA;&lt;li&gt;Set node status to queued&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Before node run&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Set running status&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;After node run&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Set running status&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;On pipeline error&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Set run status&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;On node error&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Set error status&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;After pipeline run&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Set complete status&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;After node run&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;set complete&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>How to get Dev Comments from an article Url</title>
    <id>https://waylonwalker.com/devto-comments-from-url/</id>
    <updated>2020-05-20T10:00:00Z</updated>
    <published>2020-05-20T10:00:00Z</published>
    <link href="https://waylonwalker.com/devto-comments-from-url/" rel="alternate" type="text/html"></link>
    <summary type="text">I want to incorporate some of the wonderful comments, \U0001F495, \U0001F984, and \U0001F516&#39;s that I have been getting on dev.to on my website. I have...</summary>
    <content type="html">&lt;p&gt;I want to incorporate some of the wonderful comments, \U0001F495, \U0001F984,&#xA;and \U0001F516’s that I have been getting on dev.to on my website.  I have&#xA;dabbled once or twice with no avail this time I am taking notes on my journey,&#xA;so follow along and let’s get there together.  By the end of this post, I will&#xA;have a way to get comments from posts on the client-side thanks to the&#xA;wonderfully open dev.to API.&lt;/p&gt;&#xA;&lt;p&gt;I want to incorporate some of the wonderful comments, 💕, 🦄, and 🔖’s that I have been getting on &lt;strong&gt;dev.to&lt;/strong&gt; on my website.  I have dabbled once or twice with no avail this time I am taking notes on my journey, so follow along and let’s get there together.  By the end of this post, I will have a way to get comments from posts on the client-side thanks to the wonderfully open dev.to API.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-api&#34;&gt;The API &lt;a href=&#34;#the-api&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;dev.to has an open API that allows us to easily get comments as &lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;HTML&lt;/a&gt;.  They have their API hosted at &lt;a href=&#34;https://docs.forem.com/api/#tag/comments&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/docs.forem.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/docs.forem.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://docs.forem.com/api/#tag/comments&lt;/a&gt;, let’s take a look at it.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/dev-to-api-comments.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/dev-to-api-comments.png&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Here we can see that going to &lt;a href=&#34;https://dev.to/api/comments?a_id=270180&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/dev.to.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/dev.to.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://dev.to/api/comments?a_id=270180&lt;/a&gt; returns us some json, that contains an array of comments.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;body_html:&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;&amp;#39;&amp;lt;the&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;comment&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;rendered&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;html&amp;gt;&amp;#39;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;err&#34;&gt;user:&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;{&amp;lt;an&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;array&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;quite&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;bit&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;information&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;about&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;commenting&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;user&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;err&#34;&gt;children:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;lt;an&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;array&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;child&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;comment&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;objects&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;err&#34;&gt;&amp;lt;other&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;stuff&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;we&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;don&amp;#39;t&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;care&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;about&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;err&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;err&#34;&gt;&amp;lt;more&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;comments&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;what-the-heck-is-that-a-id&#34;&gt;What the heck is that a_id &lt;a href=&#34;#what-the-heck-is-that-a-id&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;That is an &lt;code&gt;article_id&lt;/code&gt;.  Though a bit of searching I found that it occurs in at least four places on every page as a data attribute.  Using chrome dev tools I found a good place to “query” it from.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/dev-to-article-id.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/dev-to-article-id.png&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;With this knowledge, we can fetch the contents of an article and pull the &lt;code&gt;articleId&lt;/code&gt; from it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;getDevToAId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// Gets the articleId of a dev.to article&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;        &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;root&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://dev.to/&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;includes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;root&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;root&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;domparser&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;DOMParser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;html&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;fetch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;then&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;r&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;doc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;domparser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;parseFromString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;html&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;text/html&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;articleId&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;doc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;querySelector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#article-body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;dataset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;articleId&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;articleId&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;note&lt;/strong&gt;  I do check to see if a full URL or slug was given, if it was just the slug I tack on &lt;code&gt;https://dev.to/&lt;/code&gt; before fetching.&lt;/p&gt;&#xA;&lt;h2 id=&#34;now-the-comments&#34;&gt;Now the comments &lt;a href=&#34;#now-the-comments&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The main event is here, what you all have waited for, and it’s by far the easiest part.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;getDevToComments&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;articleId&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;getDevToAId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;fetch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`https://dev.to/api/comments?a_id=&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;articleId&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;comments&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;comments&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The hardest part of this was figuring out what the &lt;code&gt;a_id&lt;/code&gt; was and how I was going to get it from some more commonly known information about my articles, the URL, or the slug&lt;/p&gt;&#xA;&lt;h2 id=&#34;try-it-out&#34;&gt;Try it out &lt;a href=&#34;#try-it-out&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;F12&lt;/strong&gt; pop open your console right in dev tools of this post and try it out.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/dev-to-comments-in-devtools.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/dev-to-comments-in-devtools.png&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Four github actions for your website</title>
    <id>https://waylonwalker.com/four-github-actions-website/</id>
    <updated>2020-05-18T13:02:00Z</updated>
    <published>2020-05-18T13:02:00Z</published>
    <link href="https://waylonwalker.com/four-github-actions-website/" rel="alternate" type="text/html"></link>
    <summary type="text">GitHub&#39;s actions are a new GitHub feature that will trigger GitHub to spin up a virtual machine and run some tasks with some special access to your repo. It...</summary>
    <content type="html">&lt;p&gt;GitHub’s actions are a new GitHub feature that will trigger GitHub to spin up a&#xA;virtual machine and run some tasks with some special access to your repo. It&#xA;can interact with comments/issues, it can clone your repo, You can explicitly&#xA;pass in secrets so that it can commit back to the repo or deploy to another&#xA;service. The environment may be a Linux, windows, or even a mac machine. I&#xA;believe this is wildly incredible for the open-source community, putting these&#xA;tools in the same place that we are already collaborating is so convenient.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-can-they-do-for-my-personal-website-&#34;&gt;What can they do for my personal website? 🤔 &lt;a href=&#34;#what-can-they-do-for-my-personal-website-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;GitHub actions can give you confidence that your site is up and running, with the latest JavaScript packages, does not have broken links, and can even take screenshots of what your website looks like on different screen sizes and operating systems.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;periodically check that the website is up&lt;/li&gt;&#xA;&lt;li&gt;update npm&lt;/li&gt;&#xA;&lt;li&gt;url checker&lt;/li&gt;&#xA;&lt;li&gt;screenshot website&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;srt32uptimehttpsgithubcomsrt32uptime&#34;&gt;&lt;a href=&#34;https://github.com/srt32/uptime&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;srt32/uptime&lt;/a&gt; &lt;a href=&#34;#srt32uptimehttpsgithubcomsrt32uptime&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/srt32/uptime&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;srt32/uptime&lt;/a&gt; is an action that you can run on any public website. I run this one several times every day and it gives me confidence that my various sites are still up and running. It ensures that my build didn’t break something, nothing is wrong with my hosting provider, or my DNS.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;check if site is up&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;schedule&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;cron&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;0 0 * * *&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;jobs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ping_site&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;runs-on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;ubuntu-latest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Ping the site&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;steps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Check the site&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;hello&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;srt32/uptime@master&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;url-to-hit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://waylonwalker.com/&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;expected-statuses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;200,301&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;taichiactions-package-updatehttpsgithubcomtaichiactions-package-update&#34;&gt;&lt;a href=&#34;https://github.com/taichi/actions-package-update&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;taichi/actions-package-update&lt;/a&gt; &lt;a href=&#34;#taichiactions-package-updatehttpsgithubcomtaichiactions-package-update&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is another one to make sure that your package.json does not get too far out of date, or have any vulnerabilities. &lt;a href=&#34;https://github.com/taichi/actions-package-update&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;taichi/actions-package-update&lt;/a&gt; will submit a PR back to your repo with any updated dependencies. Since it submits it as a pr, your tests triggered by PRs should also run. giving you confidence that you are ready to update.&lt;/p&gt;&#xA;&lt;p style=&#34;text-align: center&#34;&gt;&#xA;&lt;a href=&#34;https://github.com/taichi/actions-package-update/raw/master/docs/actions-package-update.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://github.com/taichi/actions-package-update/raw/master/docs/actions-package-update.png&#34; style=&#34;width:600px; max-width:80%; margin: auto;&#34; alt=&#34;image of a PR submitted by actions-package-update&#34;/ data-glightbox=&#34;description: image of a PR submitted by actions-package-update&#34;&gt;&lt;/a&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Example to update &lt;code&gt;package.json&lt;/code&gt; every Wednesday night at midnight.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;schedule&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;cron&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;*&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Update&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;jobs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;package-update&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;runs-on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;ubuntu-latest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;steps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;actions/checkout@master&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;set remote url&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;git remote set-url --push origin https://$GITHUB_ACTOR:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;package-update&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;taichi/actions-package-update@master&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;AUTHOR_EMAIL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;john@example.com&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;AUTHOR_NAME&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;john&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;EXECUTE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;GITHUB_TOKEN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${{ secrets.GITHUB_TOKEN }}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;LOG_LEVEL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;debug&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;-&lt;span class=&#34;l&#34;&gt;u --packageFile package.json --loglevel verbose&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;urlstechieurlchecker-actionhttpsgithubcomurlstechieurlchecker-action&#34;&gt;&lt;a href=&#34;https://github.com/urlstechie/urlchecker-action&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;urlstechie/urlchecker-action&lt;/a&gt; &lt;a href=&#34;#urlstechieurlchecker-actionhttpsgithubcomurlstechieurlchecker-action&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/urlstechie/urlchecker-action&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;urlstechie/urlchecker-action&lt;/a&gt; is an action to collect and check URLs in a project and report on broken links. This is another one to give yourself some confidence that you are not linking out to a broken site, and can give you a heads up before you have frustrated users.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Check URLs&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;l&#34;&gt;push]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;jobs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;build&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;runs-on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;ubuntu-latest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;steps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;actions/checkout@v2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;urls-checker&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;urlstechie/urlchecker-action@0.2.1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# A subfolder or path to navigate to in the present or cloned repository&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;subfolder&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;docs&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# A comma-separated list of file types to cover in the URL checks&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;file_types&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;.md,.py,.rst&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Choose whether to include file with no URLs in the prints.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;print_all&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# The timeout seconds to provide to requests, defaults to 5 seconds&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;timeout&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# How many times to retry a failed request (each is logged, defaults to 1)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;retry_count&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# A comma separated links to exclude during URL checks&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;white_listed_urls&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://github.com/SuperKogito/URLs-checker/issues/1,https://github.com/SuperKogito/URLs-checker/issues/2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# A comma separated patterns to exclude during URL checks&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;white_listed_patterns&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://github.com/SuperKogito/Voice-based-gender-recognition/issues&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# choose if the force pass or not&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;force_pass &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;swintonscreenshot-websitehttpsgithubcomswintonscreenshot-website&#34;&gt;&lt;a href=&#34;https://github.com/swinton/screenshot-website&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;swinton/screenshot-website&lt;/a&gt; &lt;a href=&#34;#swintonscreenshot-websitehttpsgithubcomswintonscreenshot-website&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/swinton/screenshot-website&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;swinton/screenshot-website&lt;/a&gt; will take a screenshot of your website. It can even run a matrix of sizes and os’s to check how your site looks on various systems.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;screenshot-website&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;schedule&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;cron&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;0 0 0 * *&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;jobs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;screenshot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Screenshot&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;strategy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;matrix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;l&#34;&gt;ubuntu-latest, macos-latest, windows-latest]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1200&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;992&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;768&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;600&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;runs-on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${{ matrix.os }}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;steps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Screenshot Website&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;swinton/screenshot-website@v1.x&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://waylonwalker.com/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;destination&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;screenshot-${{ matrix.os }}-${{ matrix.width }}.png&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${{ matrix.width }}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Adding google fonts to a gatsbyjs site</title>
    <id>https://waylonwalker.com/adding-google-fonts-to-a-gatsbyjs-site/</id>
    <updated>2020-05-17T05:00:00Z</updated>
    <published>2020-05-17T05:00:00Z</published>
    <link href="https://waylonwalker.com/adding-google-fonts-to-a-gatsbyjs-site/" rel="alternate" type="text/html"></link>
    <summary type="text">https://stackoverflow.com/questions/47488440/how-do-i-add-google-fonts-to-a-gatsby-site</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://stackoverflow.com/questions/47488440/how-do-i-add-google-fonts-to-a-gatsby-site&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/stackoverflow.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/stackoverflow.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;stack overflow link&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Create Custom Kedro Dataset</title>
    <id>https://waylonwalker.com/create-custom-kedro-dataset/</id>
    <updated>2020-05-15T05:00:00Z</updated>
    <published>2020-05-15T05:00:00Z</published>
    <link href="https://waylonwalker.com/create-custom-kedro-dataset/" rel="alternate" type="text/html"></link>
    <summary type="text">Kedro provides an efficient way to build out data catalogs with their yaml api. It allows you to be very declaritive about loading and saving your data. For...</summary>
    <content type="html">&lt;p&gt;Kedro provides an efficient way to build out data catalogs with their yaml api.  It allows you to be very declaritive about loading and saving your data.  For the most part you just need to tell Kedro what connector to use and its filepath.  When running Kedro takes care of all of the read/write, you just reference the catalog key.&lt;/p&gt;&#xA;&lt;h2 id=&#34;but-what-is-happening-behind-the-scenes&#34;&gt;But what is happening behind the scenes &lt;a href=&#34;#but-what-is-happening-behind-the-scenes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Under the hood there is an &lt;code&gt;AbstractDataSet&lt;/code&gt; that each connector inherits from.  It sets up a lot of the behind the scenes structure for us so that we dont have to.  For the most part kedro has connectors for about anything that you want to load, csv, parquet, sql, json, from about anywhere, http, s3, localfile system are just some of the examples.&lt;/p&gt;&#xA;&lt;p&gt;Here is a DataSet implementation from their docs.  Here you can see the barebones example straight from the docs.  Parameters from the yaml catalog will get passed in&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pathlib&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pandas&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pd&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.io&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;AbstractDataSet&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;MyOwnDataSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AbstractDataSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__init__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;param1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;param2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;super&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;__init__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_param1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;param1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_param2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;param2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;_load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataFrame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;load_path&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_get_load_path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read_csv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load_path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;_save&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataFrame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;save_path&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_get_save_path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to_csv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;save_path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &#x9;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;_exists&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;bool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;path&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_get_load_path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;is_file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;_describe&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;param1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_param1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;param2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_param2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Interrogate is a pretty awesome, brand new, cli for Python packages</title>
    <id>https://waylonwalker.com/interrogate/</id>
    <updated>2020-05-15T03:00:00Z</updated>
    <published>2020-05-15T03:00:00Z</published>
    <link href="https://waylonwalker.com/interrogate/" rel="alternate" type="text/html"></link>
    <summary type="text">dead simple docstring coverage for your python project</summary>
    <content type="html">&lt;p&gt;As usual while listening to &lt;a href=&#34;https://pythonbytes.fm/episodes/show/181/it-s-time-to-interrogate-your-python-code&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/pythonbytes.fm.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/pythonbytes.fm.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;python bytes 181&lt;/a&gt; I heard of a tool that I had to try out right away!&lt;/p&gt;&#xA;&lt;p&gt;This thing is 🔥 hot off the press folks, we’re talking the first release only 3 weeks ago. Its something that the python community needed years ago, and it belongs in your CI &lt;strong&gt;today&lt;/strong&gt;. I had tried several tools that tried to do docstring coverage in the past but they were a bit cumbersome and were quickly forgotten about. Not interrogate, its dead simple!&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Nothing I have tried has come close to being this good&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;interrogate&#34;&gt;Interrogate &lt;a href=&#34;#interrogate&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It runs documentation coverage for your python project. It allows you to set the minimum amount of docstring coverage for your project and has some great setup instructions right in the readme.&lt;/p&gt;&#xA;&lt;h2 id=&#34;install-it&#34;&gt;Install it &lt;a href=&#34;#install-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Interrogate is on pypi so it is super simple to install with &lt;code&gt;pip&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;pip install interrogate&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;run-it&#34;&gt;run it &lt;a href=&#34;#run-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is the best part, its super easy to run right from the command line! Just call it, and give it a path to run.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;interrogate -v &amp;lt;path&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;-i-have-some-work-to-do&#34;&gt;😲 I have some work to do &lt;a href=&#34;#-i-have-some-work-to-do&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;One of my new open source packages &lt;a href=&#34;https://find.kedro.dev/&#34;&gt;find-kedro&lt;/a&gt; only hit 71%.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;interrogate find-kedro -v&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/interrogate-python-v.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/interrogate-python-v.png&#34; alt=&#34;verbose interrogate on find-kedro&#34;/ data-glightbox=&#34;description: verbose interrogate on find-kedro&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Personally I really like the &lt;strong&gt;double verbose&lt;/strong&gt; output that gives you the names of everything missing a docstring and the line they occur on.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;interrogate find-kedro -vv&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/interrogate-python-vv.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/interrogate-python-vv.png&#34; alt=&#34;double verbose interrogate on find-kedro&#34;/ data-glightbox=&#34;description: double verbose interrogate on find-kedro&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;give-it-a-&#34;&gt;Give it a ⭐ &lt;a href=&#34;#give-it-a-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Every project this amazing deserves a big ol ⭐ on GitHub! Go over to &lt;a href=&#34;https://github.com/econchick/interrogate&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;econchick/interrogate&lt;/a&gt; and give it a one… it deserves it! While you are there check out the &lt;strong&gt;wicked&lt;/strong&gt; good readme. It has great examples of how to run it from your command line, as a pre-commit hook, in your ci, with your code, or pyproject.toml.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;While you are there check out the &lt;strong&gt;wicked&lt;/strong&gt; good readme!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ hauntsaninja pyp</title>
    <id>https://waylonwalker.com/hauntsaninja-pyp/</id>
    <updated>2020-05-15T01:11:26Z</updated>
    <published>2020-05-15T01:11:26Z</published>
    <link href="https://waylonwalker.com/hauntsaninja-pyp/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred pyp by hauntsaninja. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/hauntsaninja/pyp&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pyp&lt;/a&gt; by &lt;a href=&#34;https://github.com/hauntsaninja&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;hauntsaninja&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;Easily run Python at the shell! Magical, but never mysterious.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ econchick interrogate</title>
    <id>https://waylonwalker.com/econchick-interrogate/</id>
    <updated>2020-05-15T00:54:45Z</updated>
    <published>2020-05-15T00:54:45Z</published>
    <link href="https://waylonwalker.com/econchick-interrogate/" rel="alternate" type="text/html"></link>
    <summary type="text">I like econchick&#39;s project interrogate.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/econchick&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;econchick’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/econchick/interrogate&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;interrogate&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Explain yourself! Interrogate a codebase for docstring coverage.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>drawing ascii boxes</title>
    <id>https://waylonwalker.com/drawing-ascii-boxes/</id>
    <updated>2020-05-12T22:05:00Z</updated>
    <published>2020-05-12T22:05:00Z</published>
    <link href="https://waylonwalker.com/drawing-ascii-boxes/" rel="alternate" type="text/html"></link>
    <summary type="text">I always struggle to find a good reference of ascii characters. This is a compilation of my most wanted ascii characters.</summary>
    <content type="html">&lt;p&gt;When creating cli’s I often want some nice full-width character.  I find it tough to find them, and when I do half the time it is an image or something that cannot be copied 👿.&lt;/p&gt;&#xA;&lt;p&gt;I rarely get very complex with my semi-manual ASCII art.  I can do 98% of what I need with bars and corners.  Using some simple full-width characters can really give your cli a nice clean look.&lt;/p&gt;&#xA;&lt;h2 id=&#34;example&#34;&gt;Example &lt;a href=&#34;#example&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’d say 50% of what I need is just a full-width horizontal bar to give some visual flair or separation.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/fw-bar-print.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/fw-bar-print.png&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;bars&#34;&gt;Bars &lt;a href=&#34;#bars&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;― ⍽ ⎸ ⎹ ␣ ─ ━ │ ┃&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;square-corners&#34;&gt;Square Corners &lt;a href=&#34;#square-corners&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;┌ ┍ ┎ ┏ ┐ ┑ ┒ ┓ └ ┕ ┖ ┗ ┘ ┙ ┚ ┛&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;round-corners&#34;&gt;Round Corners &lt;a href=&#34;#round-corners&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;╭ ╮ ╯ ╰ ╱ ╲ ╳&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;harpoons&#34;&gt;Harpoons &lt;a href=&#34;#harpoons&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; ⃑ ⃬ ⃭ ↼ ↽ ↾ ↿ ⇀ ⇁ ⇂ ⇃ ⇋ ⇌ ⥊ ⥋ ⥌ ⥍ ⥎ ⥏ ⥐ ⥑ ⥒ ⥓ ⥔ ⥕ ⥖ ⥗ ⥘ ⥙ ⥚ ⥛ ⥜ ⥝ ⥞ ⥟ ⥠ ⥡ ⥢ ⥣ ⥤ ⥥ ⥦ ⥧ ⥨ ⥩ ⥪ ⥫ ⥬ ⥭ ⥮ ⥯&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;double-boxes&#34;&gt;Double Boxes &lt;a href=&#34;#double-boxes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;═ ║ ╒ ╓ ╔ ╕ ╖ ╗ ╘ ╙ ╚ ╛ ╜ ╝ ╞ ╟ ╠ ╡ ╢ ╣ ╤ ╥ ╦ ╧ ╨ ╩ ╪ ╫ ╬&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;dashed-boxes&#34;&gt;Dashed Boxes &lt;a href=&#34;#dashed-boxes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;┄ ┅ ┆ ┇ ┈ ┉ ┊ ┋╌ ╍ ╎ ╏&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;connectors&#34;&gt;Connectors &lt;a href=&#34;#connectors&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├ ┝ ┞ ┟ ┠ ┡ ┢ ┣ ┤ ┥ ┦ ┧ ┨ ┩ ┪ ┫ ┬ ┭ ┮ ┯ ┰ ┱ ┲ ┳ ┴ ┵ ┶ ┷ ┸ ┹ ┺ ┻ ┼ ┽ ┾ ┿ ╀ ╁ ╂ ╃ ╄ ╅ ╆ ╇ ╈ ╉ ╊ ╋&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;others&#34;&gt;Others &lt;a href=&#34;#others&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;☐ ☑ ☒ ⫍ ⫎ ⮹ ⮽ ⺆ ⼌ ⼐ ⼕&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;arrows&#34;&gt;Arrows &lt;a href=&#34;#arrows&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; ← ↑ → ↓ ↔ ↕ ↖ ↗ ↘ ↙ ↚ ↛ ↜ ↝ ↞ ↟ ↠ ↡ ↢ ↣ ↤ ↥ ↦ ↧ ↨ ↩ ↪ ↫ ↬ ↭ ↮ ↯ ↰ ↱ ↲ ↳ ↴ ↵ ↶ ↷ ↸ ↹ ↺ ↻ ⇄ ⇅ ⇆ ⇇ ⇈ ⇉ ⇊ ⇍ ⇎ ⇏ ⇐ ⇑ ⇒ ⇓ ⇔ ⇕ ⇖ ⇗ ⇘ ⇙ ⇚ ⇛ ⇜ ⇝ ⇞ ⇟ ⇠ ⇡ ⇢ ⇣ ⇤ ⇥ ⇦ ⇧ ⇨ ⇩ ⇪&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;rounded-box&#34;&gt;Rounded Box &lt;a href=&#34;#rounded-box&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;╭――――――――――――――――――╮&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                  │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                  │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│                  │&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;╰――――――――――――――――――╯&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;resources&#34;&gt;Resources &lt;a href=&#34;#resources&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As I was putting this together I stumbled accross a good site to find ascii characters and copy them.&#xA;&lt;a href=&#34;https://xahlee.info/comp/unicode_full-width_chars.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/xahlee.info.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/xahlee.info.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Unicode Full-Width Characters&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ rec safer</title>
    <id>https://waylonwalker.com/rec-safer/</id>
    <updated>2020-05-10T18:56:58Z</updated>
    <published>2020-05-10T18:56:58Z</published>
    <link href="https://waylonwalker.com/rec-safer/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out rec and their project safer.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/rec&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rec&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/rec/safer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;safer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;🧷 A safer writer 🧷&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>creating the kedro-preflight hook</title>
    <id>https://waylonwalker.com/creating-the-kedro-preflight-hook/</id>
    <updated>2020-05-10T07:12:00Z</updated>
    <published>2020-05-10T07:12:00Z</published>
    <link href="https://waylonwalker.com/creating-the-kedro-preflight-hook/" rel="alternate" type="text/html"></link>
    <summary type="text">Kedro Hooks Intro - kedro hooks are an exciting upcoming feature of kedro . They allow you to hook into ,, and (nouns). With a , or (adjective). This really...</summary>
    <content type="html">&lt;p&gt;Kedro Hooks Intro - kedro hooks are an exciting upcoming feature of kedro&#xA;&lt;code&gt;0.16.0&lt;/code&gt;.  They allow you to hook into &lt;code&gt;catalog_created&lt;/code&gt;,&lt;code&gt;pipeline_run&lt;/code&gt;, and&#xA;&lt;code&gt;node_run&lt;/code&gt;(nouns).  With a &lt;code&gt;before&lt;/code&gt;, or &lt;code&gt;after&lt;/code&gt; (adjective).  This really&#xA;reminds me of reacts lifecycle hooks, that let you hook into various state of&#xA;react web components.  This is going to make kedro so extendable by the&#xA;community.  I am super pumped to see what the community is able to do with this&#xA;ability.&lt;/p&gt;&#xA;&lt;p&gt;kedro hooks are an exciting upcoming feature of kedro &lt;code&gt;0.16.0&lt;/code&gt;.  They allow you to hook into &lt;code&gt;catalog_created&lt;/code&gt;,&lt;code&gt;pipeline_run&lt;/code&gt;, and &lt;code&gt;node_run&lt;/code&gt;(nouns). With a &lt;code&gt;before&lt;/code&gt;, or &lt;code&gt;after&lt;/code&gt; (adjective).  This really reminds me of reacts lifecycle hooks, that let you hook into various state of react web components.  This is going to make kedro so extendable by the community.  I am super pumped to see what the community is able to do with this ability.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/what-is-kedro/&#34; class=&#34;wikilink&#34; data-title=&#34;What is Kedro&#34; data-description=&#34;Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...&#34; data-date=&#34;2021-08-17&#34; data-preview=&#34;Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...&#34;&gt;What is Kedro&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If you are completely unsure what kedro is be sure to check out my what is kedro post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;docs&#34;&gt;Docs &lt;a href=&#34;#docs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;a work in progress&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;As this is a part of an upcoming release you will need to look in the &lt;code&gt;latest&lt;/code&gt; docs, &lt;strong&gt;not&lt;/strong&gt; &lt;code&gt;stable&lt;/code&gt; and you will find a &lt;a href=&#34;https://kedro.readthedocs.io/en/stable/07_extend_kedro/02_hooks.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;15_hoooks&lt;/a&gt; page.  As these docs are still in development they are not very complete at this point and do require a bit more existing &lt;code&gt;kedro&lt;/code&gt; knowledge to understand.  I am sure they will get much better as we approach the realease of hooks.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This doesn’t mean that we can’t still install the latest/unstable version and have some fun learning!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation &lt;a href=&#34;#installation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Straight from GitHub&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;As this is part of an upcoming release you will need to get the library straight from github.  Since this is not a stable release of &lt;code&gt;kedro&lt;/code&gt; I cannot express the importance of using a &lt;a href=&#34;/virtual-environment/&#34; class=&#34;glossary-term&#34; title=&#34;Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...&#34;&gt;virtual environment&lt;/a&gt; enough.  Trying to install this version in the same place that you are trying to develop a pipeline potentially break your existing working development environment.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda create -n kedro0160 -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda activate kedro0160 &lt;span class=&#34;c1&#34;&gt;# may also be source activate kedro0160 or activate kedro0160&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install git+https://github.com/kedro-org/kedro.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install colorama&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;note&lt;/strong&gt; the version is still somewhere between &lt;code&gt;0.15.9&lt;/code&gt; and &lt;code&gt;0,16.0&lt;/code&gt;.  &lt;code&gt;kedro.__version__&lt;/code&gt; will still be &lt;code&gt;0.15.9&lt;/code&gt; and wiill not roll until the official release.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;create-a-sample-project&#34;&gt;Create a sample project &lt;a href=&#34;#create-a-sample-project&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;h3 id=&#34;kedro-new&#34;&gt;Kedro new &lt;a href=&#34;#kedro-new&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;For more details check out my full post on &lt;a href=&#34;https://waylonwalker.com/create-new-kedro-project/&#34;&gt;kedro new&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;For this post I really just want a working pipeline as fast as possible.  For this I am going to use iris pipeline that is generated from the &lt;code&gt;kedro new&lt;/code&gt; command in the cli.  It’s &lt;strong&gt;important&lt;/strong&gt; that you answer &lt;code&gt;y&lt;/code&gt; to create an example pipeline.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;h3 id=&#34;hold-on-&#34;&gt;Hold On ✋ &lt;a href=&#34;#hold-on-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Did you create a separate environment for this?  Please do.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro new&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;After you run the &lt;code&gt;kedro new&lt;/code&gt; command it will ask a series of questions.  👇 Here is how I answered them.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Project Name:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;=============&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Please enter a human readable name &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; your new project.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Spaces and punctuation are allowed.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;New Kedro Project&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;: Kedro Hooks&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Repository Name:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;================&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Please enter a directory name &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; your new project repository.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Alphanumeric characters, hyphens and underscores are allowed.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Lowercase is recommended.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;kedro-hooks&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Python Package Name:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;====================&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Please enter a valid Python package name &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; your project package.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Alphanumeric characters and underscores are allowed.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Lowercase is recommended. Package name must start with a letter or underscore.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;kedro_hooks&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Generate Example Pipeline:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;==========================&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Do you want to generate an example pipeline in your project?&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Good &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; first-time users. &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;N&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;y/N&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;: y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Change directory to the project generated in /mnt/c/temp/kedro-hooks/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;A best-practice setup includes initialising git and creating a virtual environment before running &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;kedro install&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt; to install project-specific dependencies. Refer to the Kedro documentation: https://kedro.readthedocs.io/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;install-the-project&#34;&gt;Install the Project &lt;a href=&#34;#install-the-project&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Next install the project itself and all of its dependencies with the &lt;code&gt;kedro install&lt;/code&gt; command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; kedro-hooks&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;-run-the-pipeline&#34;&gt;🏃‍♀️ Run the pipeline &lt;a href=&#34;#-run-the-pipeline&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Before we start developing any hooks lets make sure everything is setup correctly by running the pipeline with &lt;code&gt;kedro run&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro run&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;lets-make-a-hook&#34;&gt;Let’s make a hook &lt;a href=&#34;#lets-make-a-hook&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;getting to the meat of the post&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now that we have a project scaffolded up and running we can develop a hook for it.  As far as I can tell hooks can be implemented one of &lt;strong&gt;two ways&lt;/strong&gt;.  As a &lt;strong&gt;function&lt;/strong&gt; inside of a module, then import that module and pass it into the hooks list, or implemented as a method on a &lt;strong&gt;class&lt;/strong&gt;, then the class is passed into the hooks list.  Either method must follow the naming convention with the &lt;code&gt;@hook_impl&lt;/code&gt; decorator.  Each module/class can implement more than one hook, but not more than one of the same type. One of each kind will be created below.&lt;/p&gt;&#xA;&lt;h3 id=&#34;full-list-of-hooks-available&#34;&gt;Full list of hooks available &lt;a href=&#34;#full-list-of-hooks-available&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;before_catalog_created&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;after_catalog_created&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;before_pipeline_run&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;after_pipeline_run&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;before_node_run&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;after_node_run&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;debug-hook-class&#34;&gt;debug_hook (class) &lt;a href=&#34;#debug-hook-class&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;quick and dirty&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I highly recommend this as your first hook.  It’s super easy to make and lets you explore the arguments passed into the hook.  For this one I am going to pop the following class right into &lt;code&gt;kedro-hooks/src/kedro-hooks/run.py&lt;/code&gt;, remember that I chose &lt;code&gt;kedro-hooks&lt;/code&gt; as my project name.  Your path might be slightly different.  If you wanted to make a real hook it might make sense to put it in its own module, but for simplicity of your first hook you can put it directly in the same module that it gets implemented.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;debug_hook&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@hook_impl&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;before_pipeline_run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run_params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;pops into a debugger before pipeline run&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;I hooked in right before the pipeline run&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;breakpoint&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;It is really that easy to create a kedro hook!  Now lets apply it to our project.  All we need to do is add one line (&lt;code&gt;hooks = [debug_hook]&lt;/code&gt;) to the existing &lt;code&gt;ProjectContext&lt;/code&gt; class within &lt;code&gt;kedro-hooks/src/kedro-hooks/run.py&lt;/code&gt;.  Once we do that our &lt;code&gt;ProjectContext&lt;/code&gt; will look like this.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;ProjectContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;KedroContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Users can override the remaining methods from the parent class here,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    or create new ones (e.g. as required by plugins)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;project_name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro-hooks&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# `project_version` is the version of kedro used to generate the project&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;project_version&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;0.15.9&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;package_name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;kedro-hooks&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;hooks&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;debug_hook&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 👈 This is where you implement the hook&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;_get_pipelines&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;create_pipelines&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Run it!  While you are in the debugger, explore what the &lt;code&gt;run_params&lt;/code&gt;, &lt;code&gt;pipeine&lt;/code&gt;, and &lt;code&gt;catalog&lt;/code&gt; arguments give you.  This will give you some insight to what to expect when creating your next hook.&lt;/p&gt;&#xA;&lt;h2 id=&#34;preflight-hook-module&#34;&gt;preflight hook (module) &lt;a href=&#34;#preflight-hook-module&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;giving it a bit more flair&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Create a new file &lt;code&gt;kedro-hooks/src/kedro-hooks/preflight.py&lt;/code&gt; and place the following content into the file.  This will raise a &lt;code&gt;DataSetNotFoundError&lt;/code&gt; before wasting time running any of the pipeline.  This could be useful to save some developer time for long running pipelines by warning them that they don’t have all of the raw data they need before running.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# kedro-hooks/src/kedro-hooks/preflight.py&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.hooks&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hook_impl&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.io.core&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DataSetNotFoundError&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;colorama&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Fore&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;textwrap&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@hook_impl&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;before_pipeline_run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run_params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;missing_input&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;getattr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datasets&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_exists&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;missing_input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;raise&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DataSetNotFoundError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;textwrap&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dedent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Fore&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LIGHTBLACK_EX&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;――――――――  &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Fore&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;RED&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;PREFLIGHT ERROR &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Fore&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LIGHTBLACK_EX&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;―――――――――&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Fore&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;RESET&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt; preflight of pipeline failed due to &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Fore&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;YELLOW&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;missing datasets&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Fore&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BLUE&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;missing_input&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Fore&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;RESET&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    &amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Once we are happy with this hook, it can live anywhere.  It can be a module inside our project.  It can be a separate libarary that gets handed out as a back ally wheel, or we can even publish it as its own package to pypi so that anyone can easily pip install it.&lt;/p&gt;&#xA;&lt;h3 id=&#34;one-step-back&#34;&gt;One Step Back &lt;a href=&#34;#one-step-back&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;a bit of explanation of preflight&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you are not familiar, &lt;code&gt;pipeline.inputs()&lt;/code&gt; gives us all of the edge inputs into the pipeline.  kedro does also have a &lt;code&gt;pipeline.all_inputs()&lt;/code&gt; that tells us all of the edge and internal pipeline inputs that will be called throughout the pipeline run.  For this hook we are just concerned with the edge inputs as internal inputs will be generated during the run.&lt;/p&gt;&#xA;&lt;p&gt;Also each one of the kedro datasets have an &lt;code&gt;_exists()&lt;/code&gt; method attached to them to check if the dataset exists or not.  For a more robust implementation of &lt;code&gt;preflight&lt;/code&gt; it would probably be best to ignore &lt;code&gt;AttributeError&lt;/code&gt;s, i.e the dataset type does not have an implementation of &lt;code&gt;_exists&lt;/code&gt;.  It would probably also be a good idea to filter for types such as &lt;code&gt;SQLQueryDataSet&lt;/code&gt;s that assume &lt;code&gt;_exists&lt;/code&gt; is False by default.&lt;/p&gt;&#xA;&lt;h2 id=&#34;ideas&#34;&gt;Ideas &lt;a href=&#34;#ideas&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now that the juices are flowing what ideas do you have for &lt;code&gt;kedro&lt;/code&gt; hooks?&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>📝 Kedro Preflight Notes</title>
    <id>https://waylonwalker.com/kedro-preflight/</id>
    <updated>2020-05-09T15:01:00Z</updated>
    <published>2020-05-09T15:01:00Z</published>
    <link href="https://waylonwalker.com/kedro-preflight/" rel="alternate" type="text/html"></link>
    <summary type="text">run checks before running the pipeline</summary>
    <content type="html">&lt;p&gt;This is a very rough idea for a kedro package to prevent time lost to get partway through a pipeline run only to realize that you dont have access to data or resources.&lt;/p&gt;&#xA;&lt;h2 id=&#34;must-haves&#34;&gt;Must Haves &lt;a href=&#34;#must-haves&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;check that inputs exist or are of a type to skip (sql)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;good-to-haves&#34;&gt;Good to haves&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;check that all input and output databases are accessible with good credentials&lt;/li&gt;&#xA;&lt;li&gt;check for s3 bucket access&lt;/li&gt;&#xA;&lt;li&gt;check for spark install&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;implementation&#34;&gt;Implementation &lt;a href=&#34;#implementation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@hook_spec&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;before_pipeline_run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run_params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;run-params&#34;&gt;run params &lt;a href=&#34;#run-params&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;run_id&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;str&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;project_path&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;env&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;kedro_version&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;tags&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;Optional&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;List&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;from_nodes&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;Optional&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;List&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;to_nodes&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;Optional&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;List&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;node_names&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;Optional&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;List&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;from_inputs&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;Optional&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;List&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;load_versions&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;Optional&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;List&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;pipeline_name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;extra_params&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;Optional&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;Dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;Any&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ fake-name autoflake</title>
    <id>https://waylonwalker.com/fake-name-autoflake/</id>
    <updated>2020-05-08T19:26:52Z</updated>
    <published>2020-05-08T19:26:52Z</published>
    <link href="https://waylonwalker.com/fake-name-autoflake/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on autoflake by fake-name.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/fake-name/autoflake&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;autoflake&lt;/a&gt; by &lt;a href=&#34;https://github.com/fake-name&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fake-name&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Removes unused imports and unused variables as reported by pyflakes&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ trys sergey</title>
    <id>https://waylonwalker.com/trys-sergey/</id>
    <updated>2020-05-08T13:46:32Z</updated>
    <published>2020-05-08T13:46:32Z</published>
    <link href="https://waylonwalker.com/trys-sergey/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out trys and their project sergey.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/trys&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;trys&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/trys/sergey&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sergey&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A tiny lil’ static site generator&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Maintianing multiple git remotes</title>
    <id>https://waylonwalker.com/maintianing-multiple-git-remotes/</id>
    <updated>2020-05-07T11:56:00Z</updated>
    <published>2020-05-07T11:56:00Z</published>
    <link href="https://waylonwalker.com/maintianing-multiple-git-remotes/" rel="alternate" type="text/html"></link>
    <content type="html">&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git remote -v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git remote add gitlab &amp;lt;url&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git push gitlab main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>📢 Announcing find-kedro</title>
    <id>https://waylonwalker.com/find-kedro-release/</id>
    <updated>2020-05-04T11:53:00Z</updated>
    <published>2020-05-04T11:53:00Z</published>
    <link href="https://waylonwalker.com/find-kedro-release/" rel="alternate" type="text/html"></link>
    <summary type="text">kedro is an amazing project that allows for super-fast prototyping of data pipelines, yet yielding production-ready pipelines. find-kedro enhances this experience by adding a pytest-like node discovery eliminating the need to bubble up pipelines through modules.</summary>
    <content type="html">&lt;p&gt;&lt;code&gt;find-kedro&lt;/code&gt; is a small library to enhance your kedro experience.  It looks through your modules to find kedro pipelines, nodes, and iterables (lists, sets, tuples) of nodes.  It then assembles them into a dictionary of pipelines, each module will create a separate pipeline, and &lt;code&gt;__default__&lt;/code&gt; being a combination of all pipelines.  This format is compatible with the kedro &lt;code&gt;_create_pipelines&lt;/code&gt; format.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://github.com/WaylonWalker/find-kedro/workflows/Python%20package/badge.svg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://github.com/WaylonWalker/find-kedro/workflows/Python%20package/badge.svg&#34; alt=&#34;Python package&#34;/ data-glightbox=&#34;description: Python package&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://github.com/WaylonWalker/find-kedro/workflows/Test/badge.svg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://github.com/WaylonWalker/find-kedro/workflows/Test/badge.svg&#34; alt=&#34;Test&#34;/ data-glightbox=&#34;description: Test&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://find-kedro.waylonwalker.com&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://github.com/WaylonWalker/find-kedro/workflows/Build-Docs/badge.svg?branch=master&#34; alt=&#34;Build-Docs&#34;/ data-glightbox=&#34;description: Build-Docs&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;motivationhttpsimageswaylonwalkercomfind-kedro-release-1png&#34;&gt;&lt;a href=&#34;https://images.waylonwalker.com/find-kedro-release-1.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/find-kedro-release-1.png&#34; alt=&#34;Motivation&#34;/ data-glightbox=&#34;description: Motivation&#34;&gt;&lt;/a&gt; &lt;a href=&#34;#motivationhttpsimageswaylonwalkercomfind-kedro-release-1png&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;kedro&lt;/code&gt; is a ✨ fantastic project that allows for super-fast prototyping of data pipelines, while yielding production-ready pipelines. &lt;code&gt;find-kedro&lt;/code&gt; enhances this experience by adding a pytest like node/pipeline discovery eliminating the need to bubble up pipelines through modules.&lt;/p&gt;&#xA;&lt;p&gt;When working on larger pipeline projects, it is advisable to break your project down into different sub-modules which requires knowledge of building python libraries, and knowing how to import each module correctly.  While this is not too difficult, in some cases, it can trip up even the most senior engineers, losing precious feature development time to debugging a library.&lt;/p&gt;&#xA;&lt;h2 id=&#34;installationhttpsimageswaylonwalkercomfind-kedro-release-2png&#34;&gt;&lt;a href=&#34;https://images.waylonwalker.com/find-kedro-release-2.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/find-kedro-release-2.png&#34; alt=&#34;Installation&#34;/ data-glightbox=&#34;description: Installation&#34;&gt;&lt;/a&gt; &lt;a href=&#34;#installationhttpsimageswaylonwalkercomfind-kedro-release-2png&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;find-kedro&lt;/code&gt; is deployed to pypi and can easily be &lt;code&gt;pip&lt;/code&gt; installed.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install find-kedro&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;python-usagehttpsimageswaylonwalkercomfind-kedro-release-3png&#34;&gt;&lt;a href=&#34;https://images.waylonwalker.com/find-kedro-release-3.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/find-kedro-release-3.png&#34; alt=&#34;Python Usage&#34;/ data-glightbox=&#34;description: Python Usage&#34;&gt;&lt;/a&gt; &lt;a href=&#34;#python-usagehttpsimageswaylonwalkercomfind-kedro-release-3png&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The recommended usage of &lt;code&gt;find-kedro&lt;/code&gt; is to implement it directly into your projects &lt;code&gt;run.py&lt;/code&gt; module&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.context&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;KedroContext&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;find_kedro&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;find_kedro&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;ProjectContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;KedroContext&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;_get_pipelines&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;find_kedro&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;creating-nodes&#34;&gt;Creating nodes &lt;a href=&#34;#creating-nodes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;find-kedro&lt;/code&gt; will not execute any functions.  It will simply look for variables that match the &lt;code&gt;pattern&lt;/code&gt; and identify if they are a &lt;code&gt;kedro.pipeline.Pipeline&lt;/code&gt;, &lt;code&gt;kedro.pipeline.nodes.Node&lt;/code&gt;, or a list of &lt;code&gt;kedro.pipeline.nodes.  Node&lt;/code&gt;’s.  If so, it will collect them into the dictionary of pipelines.&lt;/p&gt;&#xA;&lt;p&gt;There are typically &lt;strong&gt;three&lt;/strong&gt; ways that pipelines are constructed with &lt;code&gt;find-kedro&lt;/code&gt;; &lt;strong&gt;lists&lt;/strong&gt;, &lt;strong&gt;single-nodes&lt;/strong&gt;, and &lt;strong&gt;pipelines&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h4 id=&#34;lists&#34;&gt;Lists &lt;a href=&#34;#lists&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;Any pattern matched list will be flattened and collected into the pipeline.  Nodes can be created all at once in the list definition.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# my-proj/pipelinies/data_engineering/pipeline&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.pipeline&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;.nodes&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;split_data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;split_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;example_iris_data&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;params:example_test_data_ratio&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;train_x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;example_train_x&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;train_y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;example_train_y&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;test_x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;example_test_x&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;test_y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;example_test_y&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;It is also convenient many times to keep the node definition close to the function definition.  Many times I define the list at the top of the file, then append to it as I go.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# my-proj/pipelinies/data_engineering/pipeline&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.pipeline&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;.nodes&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;split_data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;split_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;example_iris_data&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;params:example_test_data_ratio&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;train_x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;example_train_x&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;train_y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;example_train_y&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;test_x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;example_test_x&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;test_y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;example_test_y&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;nodes&#34;&gt;Nodes &lt;a href=&#34;#nodes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;All pattern matched &lt;code&gt;kedro.pipeline.node.Node&lt;/code&gt; objects will get collected into the pipeline.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# my-proj/pipelinies/data_engineering/pipeline&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.pipeline&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;.nodes&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;split_data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;split_node&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;split_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;example_iris_data&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;params:example_test_data_ratio&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;train_x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;example_train_x&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;train_y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;example_train_y&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;test_x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;example_test_x&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;test_y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;example_test_y&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;pipeline&#34;&gt;Pipeline &lt;a href=&#34;#pipeline&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;All pattern matched &lt;code&gt;kedro.pipeline.Pipeline&lt;/code&gt; objects will get collected into the pipeline.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# my-project/pipelinies/data_engineering/pipeline&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.pipeline&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;.nodes&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;split_data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;split_node&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;split_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;example_iris_data&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;params:example_test_data_ratio&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nb&#34;&gt;dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;train_x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;example_train_x&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;train_y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;example_train_y&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;test_x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;example_test_x&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;test_y&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;example_test_y&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;fully-qualified-imports&#34;&gt;Fully Qualified imports &lt;a href=&#34;#fully-qualified-imports&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;When using fully qualified imports &lt;code&gt;from my_proj.pipelines.data_science.nodes import split_data&lt;/code&gt; instead of&#xA;relative imports &lt;code&gt;from .nodes split_data&lt;/code&gt; you will need to make sure that your project is installed, in your current path, or you set the directory&lt;/p&gt;&#xA;&lt;h3 id=&#34;cli-usagehttpsimageswaylonwalkercomfind-kedro-release-4png&#34;&gt;&lt;a href=&#34;https://images.waylonwalker.com/find-kedro-release-4.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/find-kedro-release-4.png&#34; alt=&#34;CLI Usage&#34;/ data-glightbox=&#34;description: CLI Usage&#34;&gt;&lt;/a&gt; &lt;a href=&#34;#cli-usagehttpsimageswaylonwalkercomfind-kedro-release-4png&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;The CLI provides a handy interface to search your project for nodes&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Usage: find-kedro [OPTIONS]&#xA;&#xA;Options:&#xA;  --file-patterns TEXT       glob-style file patterns for Python node module&#xA;                             discovery&#xA;&#xA;  --patterns TEXT            prefixes or glob names for Python pipeline, node,&#xA;                             or list object discovery&#xA;&#xA;  -d, --directory DIRECTORY  Path to save the static site to&#xA;  --version                  Prints version and exits&#xA;  -v, --verbose              Prints extra information for debugging&#xA;  --help                     Show this message and exit.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Example ran with a slightly modified default &lt;code&gt;kedro new&lt;/code&gt; project.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ find-kedro&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;__default__&amp;#34;&lt;/span&gt;: &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;split_data([example_iris_data,params:example_test_data_ratio]) -&amp;gt; [example_test_x,example_test_y,example_train_x,example_train_y]&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;train_model([example_train_x,example_train_y,parameters]) -&amp;gt; [example_model]&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;predict([example_model,example_test_x]) -&amp;gt; [example_predictions]&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;report_accuracy([example_predictions,example_test_y]) -&amp;gt; None&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;src.default_kedro_159.pipelines.data_engineering.pipeline&amp;#34;&lt;/span&gt;: &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;split_data([example_iris_data,params:example_test_data_ratio]) -&amp;gt; [example_test_x,example_test_y,example_train_x,example_train_y]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;src.default_kedro_159.pipelines.data_science.pipeline&amp;#34;&lt;/span&gt;: &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;train_model([example_train_x,example_train_y,parameters]) -&amp;gt; [example_model]&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;predict([example_model,example_test_x]) -&amp;gt; [example_predictions]&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;report_accuracy([example_predictions,example_test_y]) -&amp;gt; None&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;contributinghttpsimageswaylonwalkercomfind-kedro-release-5png&#34;&gt;&lt;a href=&#34;https://images.waylonwalker.com/find-kedro-release-5.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/find-kedro-release-5.png&#34; alt=&#34;Contributing&#34;/ data-glightbox=&#34;description: Contributing&#34;&gt;&lt;/a&gt; &lt;a href=&#34;#contributinghttpsimageswaylonwalkercomfind-kedro-release-5png&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;You’re Awesome&lt;/strong&gt; for considering a contribution!  Contributions are welcome, please check out the &lt;a href=&#34;https://github.com/WaylonWalker/find-kedro/blob/master/contributing.md&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Contributing Guide&lt;/a&gt; for more information.  Please be a positive member of the community and embrace feedback&lt;/p&gt;&#xA;&lt;h2 id=&#34;versioninghttpsimageswaylonwalkercomfind-kedro-release-6png&#34;&gt;&lt;a href=&#34;https://images.waylonwalker.com/find-kedro-release-6.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/find-kedro-release-6.png&#34; alt=&#34;Versioning&#34;/ data-glightbox=&#34;description: Versioning&#34;&gt;&lt;/a&gt; &lt;a href=&#34;#versioninghttpsimageswaylonwalkercomfind-kedro-release-6png&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;We use &lt;a href=&#34;https://semver.org/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/semver.org.jpg&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/semver.org.jpg&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;SemVer&lt;/a&gt; for versioning. For the versions available, see the &lt;a href=&#34;https://github.com/WaylonWalker/find-kedro/releases&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tags on this repository&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;authorshttpsimageswaylonwalkercomfind-kedro-release-7png&#34;&gt;&lt;a href=&#34;https://images.waylonwalker.com/find-kedro-release-7.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/find-kedro-release-7.png&#34; alt=&#34;Authors&#34;/ data-glightbox=&#34;description: Authors&#34;&gt;&lt;/a&gt; &lt;a href=&#34;#authorshttpsimageswaylonwalkercomfind-kedro-release-7png&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/WaylonWalker&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://avatars1.githubusercontent.com/u/22648375?s=120&amp;amp;v=4&#34; alt=&#34;Waylon Walker&#34;/ data-glightbox=&#34;description: Waylon Walker&#34;&gt;&lt;/a&gt; - Waylon Walker - &lt;em&gt;Original Author&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/mzjp2&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://avatars3.githubusercontent.com/u/30357972?s=120&amp;amp;v=4&#34; alt=&#34;Zain Patel&#34;/ data-glightbox=&#34;description: Zain Patel&#34;&gt;&lt;/a&gt; - Zain Patel&lt;/p&gt;&#xA;&lt;h2 id=&#34;licensehttpsimageswaylonwalkercomfind-kedro-release-8png&#34;&gt;&lt;a href=&#34;https://images.waylonwalker.com/find-kedro-release-8.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/find-kedro-release-8.png&#34; alt=&#34;License&#34;/ data-glightbox=&#34;description: License&#34;&gt;&lt;/a&gt; &lt;a href=&#34;#licensehttpsimageswaylonwalkercomfind-kedro-release-8png&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This project is licensed under the MIT License - see the LICENSE.md file for details&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Explicit vs Implicit Returns in Javascript</title>
    <id>https://waylonwalker.com/explicit-vs-implicit-returns-in-javascript/</id>
    <updated>2020-05-03T11:55:00Z</updated>
    <published>2020-05-03T11:55:00Z</published>
    <link href="https://waylonwalker.com/explicit-vs-implicit-returns-in-javascript/" rel="alternate" type="text/html"></link>
    <summary type="text">Often when reading through javascript examples you will find some arrow functions use parentheses while others use braces . This key difference is that...</summary>
    <content type="html">&lt;p&gt;Often when reading through javascript examples you will find some arrow&#xA;functions use parentheses &lt;code&gt;()&lt;/code&gt; while others use braces &lt;code&gt;{}&lt;/code&gt;.  This key&#xA;difference is that parentheses will implicitly return the last statement while&#xA;braces require an explicit return statement.  It is important to understand the&#xA;difference between them because it is likely that you will find code examples&#xA;of both and trying to edit code written differently than you’re used to may&#xA;have unintended consequences.&lt;/p&gt;&#xA;&lt;h2 id=&#34;arrow-functionshttpsimageswaylonwalkercomexplicit-vs-implicit-returns-in-javascript-1png&#34;&gt;&lt;a href=&#34;https://images.waylonwalker.com/explicit-vs-implicit-returns-in-javascript-1.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/explicit-vs-implicit-returns-in-javascript-1.png&#34; alt=&#34;Arrow functions&#34;/ data-glightbox=&#34;description: Arrow functions&#34;&gt;&lt;/a&gt; &lt;a href=&#34;#arrow-functionshttpsimageswaylonwalkercomexplicit-vs-implicit-returns-in-javascript-1png&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Arrow functions are one-liner functions in javascript that have two main syntactical ways to create the code block.  with parentheses and braces.  Let’s take a look at both ways of creating arrow functions so that when we come accross them in the wild it will all make sense.&lt;/p&gt;&#xA;&lt;h2 id=&#34;implicit-returnshttpsimageswaylonwalkercomexplicit-vs-implicit-returns-in-javascript-2png&#34;&gt;&lt;a href=&#34;https://images.waylonwalker.com/explicit-vs-implicit-returns-in-javascript-2.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/explicit-vs-implicit-returns-in-javascript-2.png&#34; alt=&#34;implicit returns&#34;/ data-glightbox=&#34;description: implicit returns&#34;&gt;&lt;/a&gt; &lt;a href=&#34;#implicit-returnshttpsimageswaylonwalkercomexplicit-vs-implicit-returns-in-javascript-2png&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is an example of an arrow function that will implicitly return the last&#xA;statement without the return keyword.  I believe that these are a bit more restricted&#xA;in that you cannot set variables inside them.  They are a little bit more concise&#xA;and great for &lt;strong&gt;one-liners.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;implicit&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;thing&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;thing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kc&#34;&gt;undefined&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;implicit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;hi&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;hi&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt; that the parentheses are not required for this example and not having&#xA;parentheses or braces are implicitly returned as well.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// same as above&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;implicit&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;thing&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;thing&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kc&#34;&gt;undefined&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;implicit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;hi&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;hi&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;explicit-returnshttpsimageswaylonwalkercomexplicit-vs-implicit-returns-in-javascript-3png&#34;&gt;&lt;a href=&#34;https://images.waylonwalker.com/explicit-vs-implicit-returns-in-javascript-3.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/explicit-vs-implicit-returns-in-javascript-3.png&#34; alt=&#34;explicit returns&#34;/ data-glightbox=&#34;description: explicit returns&#34;&gt;&lt;/a&gt; &lt;a href=&#34;#explicit-returnshttpsimageswaylonwalkercomexplicit-vs-implicit-returns-in-javascript-3png&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;In the following example, the curly braces create an arrow function that must&#xA;explicitly return anything that you want to return from the function. Since the&#xA;return keyword is never used the function returns &lt;code&gt;undefined&lt;/code&gt; by default.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// missing return statement&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;explicit&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;thing&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;thing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kc&#34;&gt;undefined&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;explicit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;hi&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kc&#34;&gt;undefined&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;In this example using the return keyword will cause the function to return &lt;code&gt;thing&lt;/code&gt;&#xA;and behave similarly to our implicit return.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// same as original&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;explicit_return&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;thing&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;thing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kc&#34;&gt;undefined&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;explicit_return&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;hi&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;hi&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;multiline-arrow-functionshttpsimageswaylonwalkercomexplicit-vs-implicit-returns-in-javascript-4png&#34;&gt;&lt;a href=&#34;https://images.waylonwalker.com/explicit-vs-implicit-returns-in-javascript-4.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/explicit-vs-implicit-returns-in-javascript-4.png&#34; alt=&#34;Multiline arrow functions&#34;/ data-glightbox=&#34;description: Multiline arrow functions&#34;&gt;&lt;/a&gt; &lt;a href=&#34;#multiline-arrow-functionshttpsimageswaylonwalkercomexplicit-vs-implicit-returns-in-javascript-4png&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Until writing this article I was unaware that you could not have a multiline arrow function with an implicit return statement.  I tried myself and ran into some issues. I also tried to find examples online and could not find one.  If it is possible to write something like below, let me know.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// more complex example&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// only possible with an explicit return&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sayHello&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;who&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;greeting&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Hello &amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;greeting&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;who&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;message&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kc&#34;&gt;undefined&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;sayHello&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Waylon&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Hello Waylon&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Twitter deepdives</title>
    <id>https://waylonwalker.com/twitter-deepdives/</id>
    <updated>2020-05-01T05:00:00Z</updated>
    <published>2020-05-01T05:00:00Z</published>
    <link href="https://waylonwalker.com/twitter-deepdives/" rel="alternate" type="text/html"></link>
    <summary type="text">Inspired by Chris Achard</summary>
    <content type="html">&lt;p&gt;Inspired by Chris Achard&lt;/p&gt;&#xA;&lt;h2 id=&#34;my-ideas&#34;&gt;My ideas &lt;a href=&#34;#my-ideas&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;python&#34;&gt;Python &lt;a href=&#34;#python&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;List comps&lt;/li&gt;&#xA;&lt;li&gt;Classes&lt;/li&gt;&#xA;&lt;li&gt;Inheritance&lt;/li&gt;&#xA;&lt;li&gt;Background&lt;/li&gt;&#xA;&lt;li&gt;Click&lt;/li&gt;&#xA;&lt;li&gt;Lambdas&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;kedro&#34;&gt;Kedro &lt;a href=&#34;#kedro&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Cataloging&lt;/li&gt;&#xA;&lt;li&gt;Custom datasets&lt;/li&gt;&#xA;&lt;li&gt;Reusable pipelines&lt;/li&gt;&#xA;&lt;li&gt;find-kedro&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;learn-kedro-in-5-days&#34;&gt;Learn kedro in 5 days &lt;a href=&#34;#learn-kedro-in-5-days&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Email course inspired by learn d3 in 5 days&lt;/p&gt;&#xA;&lt;h3 id=&#34;mail&#34;&gt;Mail &lt;a href=&#34;#mail&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Share your knowledge&lt;/li&gt;&#xA;&lt;li&gt;Practice&lt;/li&gt;&#xA;&lt;li&gt;Practice in public&lt;/li&gt;&#xA;&lt;li&gt;Make practice easy&lt;/li&gt;&#xA;&lt;li&gt;Share your notes&lt;/li&gt;&#xA;&lt;li&gt;Digital Gardening&lt;/li&gt;&#xA;&lt;li&gt;Own your content&lt;/li&gt;&#xA;&lt;li&gt;Build your audience&lt;/li&gt;&#xA;&lt;li&gt;Be nice&lt;/li&gt;&#xA;&lt;li&gt;Have empathy&lt;/li&gt;&#xA;&lt;li&gt;Learn your way&lt;/li&gt;&#xA;&lt;li&gt;Continuous learning&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ rsalmei alive-progress</title>
    <id>https://waylonwalker.com/rsalmei-alive-progress/</id>
    <updated>2020-04-30T18:34:43Z</updated>
    <published>2020-04-30T18:34:43Z</published>
    <link href="https://waylonwalker.com/rsalmei-alive-progress/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by alive-progress from rsalmei.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/rsalmei/alive-progress&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;alive-progress&lt;/a&gt; from &lt;a href=&#34;https://github.com/rsalmei&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rsalmei&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A new kind of Progress Bar, with real-time throughput, ETA, and very cool animations!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ skywind3000 vim-quickui</title>
    <id>https://waylonwalker.com/skywind3000-vim-quickui/</id>
    <updated>2020-04-29T18:22:46Z</updated>
    <published>2020-04-29T18:22:46Z</published>
    <link href="https://waylonwalker.com/skywind3000-vim-quickui/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about vim-quickui, an amazing project by skywind3000. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/skywind3000/vim-quickui&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vim-quickui&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/skywind3000&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;skywind3000&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;The missing UI extensions for Vim 9 (and NeoVim) !! 😎&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ aristocratos bashtop</title>
    <id>https://waylonwalker.com/aristocratos-bashtop/</id>
    <updated>2020-04-29T01:18:42Z</updated>
    <published>2020-04-29T01:18:42Z</published>
    <link href="https://waylonwalker.com/aristocratos-bashtop/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on bashtop, created by aristocratos.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/aristocratos/bashtop&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;bashtop&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/aristocratos&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;aristocratos&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Linux/OSX/FreeBSD resource monitor&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>TIL: Bind arguments to dynamically generated lambdas in python</title>
    <id>https://waylonwalker.com/bind-dynamic-lambdas/</id>
    <updated>2020-04-27T12:13:00Z</updated>
    <published>2020-04-27T12:13:00Z</published>
    <link href="https://waylonwalker.com/bind-dynamic-lambdas/" rel="alternate" type="text/html"></link>
    <summary type="text">This past week I had a really weird bug in my kedro pipeline. For some reason data running through my pipeline was coming out completely made no sense, but...</summary>
    <content type="html">&lt;p&gt;This past week I had a really weird bug in my&#xA;&lt;a href=&#34;https://kedro.readthedocs.io/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro&lt;/a&gt; pipeline.  For some reason data running&#xA;through my pipeline was coming out completely made no sense, but if I manually&#xA;request raw data outside of the pipeline it matched expectations.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt; While this story is about a kedro pipeline, it can be applied anywhere closures are put into an iterable.&lt;/p&gt;&#xA;&lt;h2 id=&#34;debugger-to-the-rescuehttpsimageswaylonwalkercombind-dynamic-lambdas-1png&#34;&gt;&lt;a href=&#34;https://images.waylonwalker.com/bind-dynamic-lambdas-1.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/bind-dynamic-lambdas-1.png&#34; alt=&#34;Debugger to the rescue&#34;/ data-glightbox=&#34;description: Debugger to the rescue&#34;&gt;&lt;/a&gt; &lt;a href=&#34;#debugger-to-the-rescuehttpsimageswaylonwalkercombind-dynamic-lambdas-1png&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;After a few days of looking at it off and on, I pinpointed that it was all the way down in the raw layer. Right as data is coming off of the database.  For this I already had existing &lt;code&gt;sql&lt;/code&gt; files stored and a &lt;code&gt;read_sql&lt;/code&gt; function to get the data so I opted to just set up the pipeline to utilize the existing code as much as possible, leaning on the &lt;a href=&#34;https://kedro.readthedocs.io/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro&lt;/a&gt; framework a bit less.&lt;/p&gt;&#xA;&lt;p&gt;I have dynamically created lists of pipeline nodes many times in the past, but typically I take data from &lt;a href=&#34;https://kedro.readthedocs.io/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro&lt;/a&gt; input and use it in the lambda.  I prefer the simplicity of using lambdas over &lt;code&gt;functools.partial&lt;/code&gt;.  It typically looks something like this.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 👍  I do this all the time&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.pipeline&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;my_generic_project_lib&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;clean&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;datasets_to_clean&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;production&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;inventory&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dataset&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datasets_to_clean&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;n&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;lambda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;clean&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dataset&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;n&#34;&gt;outputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;int_&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dataset&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;n&#34;&gt;tags&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;int&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dataset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;create_int_&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dataset&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;What was different this time is that I needed to pass in the name of the dataset to my read_sql function, not the data loaded in the framework.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ❌ This does not work&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.pipeline&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;my_generic_project_lib&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;read_sql&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;datasets_to_read&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;production&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;inventory&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dataset&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datasets_to_clean&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;n&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;lambda&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;read_sql&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dataset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 💥 The major issue&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;dummy&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;n&#34;&gt;outputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;int_&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dataset&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;n&#34;&gt;tags&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;int&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dataset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;create_int_&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dataset&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;seriouslyhttpsimageswaylonwalkercombind-dynamic-lambdas-2png&#34;&gt;&lt;a href=&#34;https://images.waylonwalker.com/bind-dynamic-lambdas-2.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/bind-dynamic-lambdas-2.png&#34; alt=&#34;Seriously&#34;/ data-glightbox=&#34;description: Seriously&#34;&gt;&lt;/a&gt; &lt;a href=&#34;#seriouslyhttpsimageswaylonwalkercombind-dynamic-lambdas-2png&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As I am still oblivious to what has happened I pop in a &lt;code&gt;breakpoint()&lt;/code&gt; and quickly see that during the first run the dataset passed into &lt;code&gt;read_sql&lt;/code&gt; was &lt;code&gt;&amp;#39;inventory&amp;#39;&lt;/code&gt;, in fact, every single one was &lt;code&gt;&amp;#39;inventory&amp;#39;&lt;/code&gt;.  The lambda is just using the latest value of dataset from outside and has no &lt;code&gt;local&lt;/code&gt; &lt;code&gt;dataset&lt;/code&gt; attached to it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-simple-fix-httpsimageswaylonwalkercombind-dynamic-lambdas-3png&#34;&gt;&lt;a href=&#34;https://images.waylonwalker.com/bind-dynamic-lambdas-3.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/bind-dynamic-lambdas-3.png&#34; alt=&#34;The simple fix &#34;/ data-glightbox=&#34;description: The simple fix&#34;&gt;&lt;/a&gt; &lt;a href=&#34;#the-simple-fix-httpsimageswaylonwalkercombind-dynamic-lambdas-3png&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 👍 Much Better&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.pipeline&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;my_generic_project_lib&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;read_sql&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;datasets_to_read&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sales&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;production&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;inventory&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dataset&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datasets_to_clean&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;n&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;lambda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dataset&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dataset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;read_sql&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dataset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# dataset is now bound to the lambda ✨&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;dummy&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;n&#34;&gt;outputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;int_&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dataset&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;n&#34;&gt;tags&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;int&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dataset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;create_int_&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dataset&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;try-it-yourselfhttpsimageswaylonwalkercombind-dynamic-lambdas-4png&#34;&gt;&lt;a href=&#34;https://images.waylonwalker.com/bind-dynamic-lambdas-4.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/bind-dynamic-lambdas-4.png&#34; alt=&#34;Try it yourself&#34;/ data-glightbox=&#34;description: Try it yourself&#34;&gt;&lt;/a&gt; &lt;a href=&#34;#try-it-yourselfhttpsimageswaylonwalkercombind-dynamic-lambdas-4png&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I made a slightly more simple example so that you can try it and play with it yourself, edit it, share it with your friends, laugh at my mistake, whatever you like.&lt;/p&gt;&#xA;&lt;iframe height=&#34;400px&#34; width=&#34;100%&#34; src=&#34;https://replit.com/@WaylonWalker/BindDynamicLambdas?lite=true&#34; scrolling=&#34;no&#34; frameborder=&#34;no&#34; allowtransparency=&#34;true&#34; allowfullscreen=&#34;true&#34; sandbox=&#34;allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-modals&#34;&gt;&lt;/iframe&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>python-deepwatch</title>
    <id>https://waylonwalker.com/python-deepwatch/</id>
    <updated>2020-04-27T05:00:00Z</updated>
    <published>2020-04-27T05:00:00Z</published>
    <link href="https://waylonwalker.com/python-deepwatch/" rel="alternate" type="text/html"></link>
    <summary type="text">Is it possible to deep watch a single python function for changes?</summary>
    <content type="html">&lt;p&gt;Is it possible to deep watch a single python function for changes?&lt;/p&gt;&#xA;&lt;h2 id=&#34;shallow-watch&#34;&gt;Shallow Watch &lt;a href=&#34;#shallow-watch&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;keeping track of a python functions hash is quite simple. There is a&lt;code&gt;__hash__&lt;/code&gt; method attached to every python function. Calling it will return a hash of the function. If the function changes the hash will change.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;     &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;__hash__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;8760526380347&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;__hash__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;8760526380347&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;     &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hello world&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;__hash__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;8760525617988&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;     &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;fm&#34;&gt;__hash__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;7&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;8760526380491&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Using hashlib provides a consistent hash.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;inspect&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;hashlib&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;update&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;inspect&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getsource&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;encode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sha256&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HASH&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;object&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;0x7f7b7b70fde0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;19&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hexdigest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;19&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;1f2ff4c69eb69b545469686edd6f849136e104cd535785891586d90620328757&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;update&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;inspect&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getsource&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;encode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hexdigest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;93638f2c944f34a9069af9242657b7de556fcc63742f4c27c4c8deedeb976a5f&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hashlib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sha256&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;23&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;update&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;inspect&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getsource&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;encode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;24&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;update&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;inspect&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getsource&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;encode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;25&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hashlib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sha256&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;26&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;update&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;inspect&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getsource&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;encode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;27&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hexdigest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;27&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;1f2ff4c69eb69b545469686edd6f849136e104cd535785891586d90620328757&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;28&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;     &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hello world&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;29&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hashlib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sha256&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;update&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;inspect&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getsource&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;encode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;31&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hexdigest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;31&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;121fa3a3f295d49d4609505bc5e96d8b6a8ed3b496e4f3dc6c0ead73bef4e3c7&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;32&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;     &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;33&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hashlib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sha256&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;34&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;update&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;inspect&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getsource&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;encode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ins&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;In&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;35&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hexdigest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;35&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;1f2ff4c69eb69b545469686edd6f849136e104cd535785891586d90620328757&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now we have a consistent way to hash function code.&lt;/p&gt;&#xA;&lt;h2 id=&#34;deep-hashing&#34;&gt;Deep hashing &lt;a href=&#34;#deep-hashing&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;find-dependencies&#34;&gt;Find dependencies &lt;a href=&#34;#find-dependencies&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;setup a function in a module with a dependency&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;File&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;one&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;py&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;───────┼────────────────────────────────&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;   &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;one&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;   &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;     &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;   &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;   &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;two&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;   &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;     &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;one&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;one&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;one&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;one&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;one&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vm&#34;&gt;__code__&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;co_names&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;one&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;two&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vm&#34;&gt;__code__&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;co_names&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;one&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;create-generic-module-importer-by-filepath&#34;&gt;Create Generic module importer by filepath &lt;a href=&#34;#create-generic-module-importer-by-filepath&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;importlib&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;importlib.util&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;os&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;_import&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;verbose&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;dynamically imports module given a path&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;cwd&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getcwd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;chdir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# path = str(path).replace(str(directory) + &amp;#34;/&amp;#34;, &amp;#34;&amp;#34;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;path&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_make_path_relative&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;directory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;spec&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;importlib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;util&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;spec_from_file_location&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;module&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;importlib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;util&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;module_from_spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;spec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;loader&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exec_module&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;module&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;except&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;ne&#34;&gt;ModuleNotFoundError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;ValueError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;module&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_use_importmodule&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;replace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sep&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;replace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;.py&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;verbose&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;verbose&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;chdir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cwd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;module&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;_use_importmodule&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;verbose&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    relative imports do not work well with importlib.util.spec_from_file_location,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    and require a sys.path.append to be imported correctly.  For this reason&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    importlib.import_module is the second option.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# Not sure if this is needed, but it was never hit in a test&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# if path[0] == &amp;#34;.&amp;#34;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#     path = path[1:]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;sys&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getcwd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;mod&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;importlib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;import_module&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;sys&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pop&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# clean up path, do not permananatly change users path&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mod&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;get-code-of-dependency&#34;&gt;get code of dependency &lt;a href=&#34;#get-code-of-dependency&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;the inspect module can tell us the filename of our current module.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;inspect&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;module_path&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inspect&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getfile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;one&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;one&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;module&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_import&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;module_path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;now we can hash the dependency&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;nested_function&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;eval&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;module.&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;one&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;two&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vm&#34;&gt;__code__&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;co_names&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ stevekrenzel autoreload</title>
    <id>https://waylonwalker.com/stevekrenzel-autoreload/</id>
    <updated>2020-04-16T03:57:23Z</updated>
    <published>2020-04-16T03:57:23Z</published>
    <link href="https://waylonwalker.com/stevekrenzel-autoreload/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? autoreload by stevekrenzel.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/stevekrenzel/autoreload&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;autoreload&lt;/a&gt; by &lt;a href=&#34;https://github.com/stevekrenzel&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;stevekrenzel&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A small python script to watch a directory for changes and reload a process when a change is detected.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ madzak python-json-logger</title>
    <id>https://waylonwalker.com/madzak-python-json-logger/</id>
    <updated>2020-04-15T13:13:49Z</updated>
    <published>2020-04-15T13:13:49Z</published>
    <link href="https://waylonwalker.com/madzak-python-json-logger/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out madzak and their project python-json-logger.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/madzak&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;madzak&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/madzak/python-json-logger&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;python-json-logger&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Json Formatter for the standard python logger&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Four Github Actions for Python</title>
    <id>https://waylonwalker.com/four-github-actions-python/</id>
    <updated>2020-04-13T06:23:00Z</updated>
    <published>2020-04-13T06:23:00Z</published>
    <link href="https://waylonwalker.com/four-github-actions-python/" rel="alternate" type="text/html"></link>
    <summary type="text">If you are developing python packages and using GitHub here are four actions that you can use today to automate your release workflow. Since python tools...</summary>
    <content type="html">&lt;p&gt;If you are developing python packages and using GitHub here are four actions&#xA;that you can use today to automate your release workflow.  Since python tools&#xA;generally have such a simple cli I have opted to use the cli for most of these,&#xA;that way I know exactly what is happening and have more control over it if I&#xA;need.&lt;/p&gt;&#xA;&lt;style&gt;&#xA;h2 img { width: 100%; box-shadow: .5rem .5rem 3rem #141F2D, -.5rem -.5rem 3rem rgba(255,255,255,.1);}&#xA;img{ max-width: 100% !important;}&#xA;&lt;/style&gt;&#xA;&lt;p&gt;If you are developing python packages and using GitHub here are four actions that you can use today to automate your release workflow.  Since python tools generally have such a simple cli I have opted to use the cli for most of these, that way I know exactly what is happening and have more control over it if I need.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Lint&lt;/li&gt;&#xA;&lt;li&gt;Test&lt;/li&gt;&#xA;&lt;li&gt;Package&lt;/li&gt;&#xA;&lt;li&gt;Upload to PyPi&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;lint-with-flake8&#34;&gt;Lint With flake8 &lt;a href=&#34;#lint-with-flake8&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;flake8 is pythons quintessential linting tool to ensure that your code is up to the standards that you have set for the project, and to help prevent hidden bugs.  I am a heavy user of &lt;code&gt;black&lt;/code&gt; and &lt;code&gt;isort&lt;/code&gt; as well, but for ci flake8 is typically considered the gold standard. &lt;code&gt;black&lt;/code&gt; and &lt;code&gt;isort&lt;/code&gt; will help you automate many fixes suggested by flake8.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Lint with flake8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sd&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;        pip install flake8 isort black&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;        # stop the build if there are Python syntax errors or undefined names&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;        flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;        # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;        flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;testing-with-pytest&#34;&gt;Testing with pytest &lt;a href=&#34;#testing-with-pytest&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;pytest is such an amazing project, definitely one to check out and start using if you are not already doing so.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Test with pytest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sd&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;         pip install pytest&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;         pytest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;building-with-setuptools&#34;&gt;Building with setuptools &lt;a href=&#34;#building-with-setuptools&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I am still using the older, less hipster, setuptools to build my projects.  Primarily because I am used to to, partly because things such as editable installs are not possible with the newer build tools, and I am a &lt;strong&gt;HEAVY&lt;/strong&gt; user of editable installs.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;build&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sd&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;        pip install wheel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;        python setup.py sdist bdist_wheel&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;publishing-to-pypi&#34;&gt;Publishing to pypi &lt;a href=&#34;#publishing-to-pypi&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here I am going to use an amazing action from the GitHub marketplace by @webKnjaZ.  It is super simple.  First you need to log into your &lt;a href=&#34;https://pypi.org&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/pypi.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/pypi.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pypi.org&lt;/a&gt; account, go to account settings, enable 2FA, and add a Token, then paste that toke into a secret inside your repos settings.  Next just drop the name of that secret into the password field of the action and you are off.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;note&lt;/strong&gt;: I did put a check in to make sure that push event comes from main.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pypi-publish&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;github.ref == &amp;#39;refs/heads/main&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pypa/gh-action-pypi-publish@v1.1.0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# PyPI user&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Password for your PyPI user or an access token&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;password&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${{ secrets.pypi_password }}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# The repository URL to use&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# repository_url: # optional&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# The target directory for distribution&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# packages_dir: # optional, default is dist&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;thats-my-four-top-python-actions&#34;&gt;That’s my four top python actions &lt;a href=&#34;#thats-my-four-top-python-actions&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;These are the easiest and most basic four actions that every python project on GitHub should have.  Now that actions are available for free on any public repo there is no reason not to use GitHub Actions for any new project.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ justmarkham scikit-learn-tips</title>
    <id>https://waylonwalker.com/justmarkham-scikit-learn-tips/</id>
    <updated>2020-04-09T15:31:43Z</updated>
    <published>2020-04-09T15:31:43Z</published>
    <link href="https://waylonwalker.com/justmarkham-scikit-learn-tips/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out justmarkham and their project scikit-learn-tips.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/justmarkham&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;justmarkham&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/justmarkham/scikit-learn-tips&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;scikit-learn-tips&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;🤖⚡ 50 scikit-learn tips&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Textualize rich</title>
    <id>https://waylonwalker.com/textualize-rich/</id>
    <updated>2020-04-08T20:02:01Z</updated>
    <published>2020-04-08T20:02:01Z</published>
    <link href="https://waylonwalker.com/textualize-rich/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out Textualize and their project rich.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/Textualize&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Textualize&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/Textualize/rich&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rich&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Rich is a Python library for rich text and beautiful formatting in the terminal.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Variables names don&#39;t need their type</title>
    <id>https://waylonwalker.com/variable-names-don-t-need-their-type/</id>
    <updated>2020-04-08T11:03:00Z</updated>
    <published>2020-04-08T11:03:00Z</published>
    <link href="https://waylonwalker.com/variable-names-don-t-need-their-type/" rel="alternate" type="text/html"></link>
    <summary type="text">So often I see a variables inside of its name and it hurts me a little inside. Tell me I&#39;m right or prove me wrong below.</summary>
    <content type="html">&lt;p&gt;So often I see a variables &lt;code&gt;type()&lt;/code&gt; inside of its name and it hurts me a little&#xA;inside.  Tell me I’m right or prove me wrong below.&lt;/p&gt;&#xA;&lt;h2 id=&#34;examples&#34;&gt;Examples &lt;a href=&#34;#examples&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Pandas &lt;code&gt;DataFrames&lt;/code&gt; are probably the worst offender that I see&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# bad&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sales_df&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# good&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Sometimes vanilla structures too!&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# bad&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;items_list&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sneakers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pencils&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;paper&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# good&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;items&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sneakers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pencils&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;paper&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;edge-cases&#34;&gt;Edge Cases? &lt;a href=&#34;#edge-cases&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It’s so common when you need to get inside a data structure in a special way that itsn’t provided by the library…. I am not exactly sure of a good way around it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# bad ??&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sales_dict&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to_dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# good&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;🤷‍♀️&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;containers-are-plural&#34;&gt;Containers are plural &lt;a href=&#34;#containers-are-plural&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Always name your containers plural, so that naming while iterating is simple.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;prices&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;items&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sneakers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pencils&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;paper&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;item&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;prices&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_price&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Before I start fights 🥊 in code review, am I inline here or just being pedantic?&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ python cpython</title>
    <id>https://waylonwalker.com/python-cpython/</id>
    <updated>2020-04-07T21:23:01Z</updated>
    <published>2020-04-07T21:23:01Z</published>
    <link href="https://waylonwalker.com/python-cpython/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about cpython, an amazing project by python. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/python/cpython&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cpython&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/python&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;python&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;The Python programming language&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ scullyio scully</title>
    <id>https://waylonwalker.com/scullyio-scully/</id>
    <updated>2020-04-05T21:41:42Z</updated>
    <published>2020-04-05T21:41:42Z</published>
    <link href="https://waylonwalker.com/scullyio-scully/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered scully by scullyio, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/scullyio/scully&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;scully&lt;/a&gt; by &lt;a href=&#34;https://github.com/scullyio&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;scullyio&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;The Static Site Generator for Angular apps&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ lpellis pydevto</title>
    <id>https://waylonwalker.com/lpellis-pydevto/</id>
    <updated>2020-04-05T01:34:04Z</updated>
    <published>2020-04-05T01:34:04Z</published>
    <link href="https://waylonwalker.com/lpellis-pydevto/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across pydevto from lpellis, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/lpellis/pydevto&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pydevto&lt;/a&gt; from &lt;a href=&#34;https://github.com/lpellis&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lpellis&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;Unofficial dev.to api&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ brickfrog kedro-pandas-profiling</title>
    <id>https://waylonwalker.com/brickfrog-kedro-pandas-profiling/</id>
    <updated>2020-04-04T03:19:21Z</updated>
    <published>2020-04-04T03:19:21Z</published>
    <link href="https://waylonwalker.com/brickfrog-kedro-pandas-profiling/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about kedro-pandas-profiling, an amazing project by brickfrog. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/brickfrog/kedro-pandas-profiling&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-pandas-profiling&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/brickfrog&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;brickfrog&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;A simple wrapper to use Pandas Profiling easily in Kedro&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ gregives gregives.co.uk</title>
    <id>https://waylonwalker.com/gregives-gregives-co-uk/</id>
    <updated>2020-04-03T00:59:59Z</updated>
    <published>2020-04-03T00:59:59Z</published>
    <link href="https://waylonwalker.com/gregives-gregives-co-uk/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on gregives.co.uk by gregives.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/gregives/gregives.co.uk&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gregives.co.uk&lt;/a&gt; by &lt;a href=&#34;https://github.com/gregives&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gregives&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Personal site and portfolio of software engineer Greg Ives&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nektos act</title>
    <id>https://waylonwalker.com/nektos-act/</id>
    <updated>2020-04-01T12:27:41Z</updated>
    <published>2020-04-01T12:27:41Z</published>
    <link href="https://waylonwalker.com/nektos-act/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by act from nektos.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/nektos/act&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;act&lt;/a&gt; from &lt;a href=&#34;https://github.com/nektos&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nektos&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Run your GitHub Actions locally 🚀&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Send Emails with GitHub Actions</title>
    <id>https://waylonwalker.com/send-email-with-github-actions/</id>
    <updated>2020-03-31T03:39:00Z</updated>
    <published>2020-03-31T03:39:00Z</published>
    <link href="https://waylonwalker.com/send-email-with-github-actions/" rel="alternate" type="text/html"></link>
    <summary type="text">Here is one useful thing that you can do with GitHub actions no matter what language you use, send email. You might want to know right away when your ci...</summary>
    <content type="html">&lt;p&gt;Here is one useful thing that you can do with GitHub actions no matter what language you use, send email.  You might want to know right away when your ci passes.  You might want to give your team a nice pat on the back when a new release is deployed.  There might be subscribers wanting to see the latest release notes in their inbox as soon as the latest version is deployed.  Whatever it is, its pretty easy to do with an action right out of the actions marketplace.&lt;/p&gt;&#xA;&lt;h2 id=&#34;mail-on-star&#34;&gt;Mail on Star &lt;a href=&#34;#mail-on-star&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is a silly example that sends an email to yourself anytime someone stars your repo.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Mail on Star&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;watch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;types&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;started ]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# A workflow run is made up of one or more jobs that can run sequentially or in parallel&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;jobs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# This workflow contains a single job called &amp;#34;email&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;email&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# The type of runner that the job will run on&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;runs-on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;ubuntu-latest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Steps represent a sequence of tasks that will be executed as part of the job&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;steps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;✨ Send email, you star&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;dawidd6/action-send-mail@v1.3.0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;server_address&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;smtp.gmail.com&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;server_port&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;465&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;username&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;quadmx08&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;password&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${{ secrets.GMAIL_PASS }}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;subject&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Your a star ✨&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${{ github.actor }} just starred your mail-on-star repo!!! ${{ github.repository }}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${{ secrets.GMAIL_ADDRESS }}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${{ secrets.GMAIL_ADDRESS }}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ JackMcKew awesome-python-bytes</title>
    <id>https://waylonwalker.com/jackmckew-awesome-python-bytes/</id>
    <updated>2020-03-29T19:55:11Z</updated>
    <published>2020-03-29T19:55:11Z</published>
    <link href="https://waylonwalker.com/jackmckew-awesome-python-bytes/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about awesome-python-bytes, an amazing project by JackMcKew. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/JackMcKew/awesome-python-bytes&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;awesome-python-bytes&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/JackMcKew&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;JackMcKew&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;😎 🐍 Awesome lists about Python Bytes &lt;a href=&#34;https://pythonbytes.fm/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/pythonbytes.fm.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/pythonbytes.fm.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://pythonbytes.fm/&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ technote-space get-diff-action</title>
    <id>https://waylonwalker.com/technote-space-get-diff-action/</id>
    <updated>2020-03-22T20:42:47Z</updated>
    <published>2020-03-22T20:42:47Z</published>
    <link href="https://waylonwalker.com/technote-space-get-diff-action/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out get-diff-action by technote-space. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/technote-space/get-diff-action&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;get-diff-action&lt;/a&gt; by &lt;a href=&#34;https://github.com/technote-space&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;technote-space&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;GitHub Actions to get &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; diff&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ fkhadra react-toastify</title>
    <id>https://waylonwalker.com/fkhadra-react-toastify/</id>
    <updated>2020-03-18T19:37:01Z</updated>
    <published>2020-03-18T19:37:01Z</published>
    <link href="https://waylonwalker.com/fkhadra-react-toastify/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on react-toastify, created by fkhadra.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/fkhadra/react-toastify&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;react-toastify&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/fkhadra&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fkhadra&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;React notification made easy 🚀 !&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>What Are GitHub Actions</title>
    <id>https://waylonwalker.com/what-are-github-actions/</id>
    <updated>2020-03-16T05:00:00Z</updated>
    <published>2020-03-16T05:00:00Z</published>
    <link href="https://waylonwalker.com/what-are-github-actions/" rel="alternate" type="text/html"></link>
    <summary type="text">GitHub actions are an amazing tool that allows us to run code based on triggers inside of our repo. Their is a large and growing community of actions inside...</summary>
    <content type="html">&lt;p&gt;GitHub actions are an amazing tool that allows us to run code based on triggers&#xA;inside of our repo.  Their is a large and growing community of actions inside&#xA;the marketplace to use with very little effort.  Best of all they are free for&#xA;public repositories, and private repos have a very generous free tier.&lt;/p&gt;&#xA;&lt;style&gt;&#xA;h2 img { width: 100%; box-shadow: .5rem .5rem 3rem #141F2D, -.5rem -.5rem 3rem rgba(255,255,255,.1);}&#xA;img{ max-width: 100% !important;}&#xA;&lt;/style&gt;&#xA;&lt;p&gt;I have been diving deep into Github actions for about a month now and they are wicked good!  They allow you to run any sort of arbitrary code based on events in your repo, webhooks, or schedules.  They are very reasonably priced.  The interface that GitHub hs developed for them is top-notch!  It’s so good I have done 90% of my editing of them right from github.com.&lt;/p&gt;&#xA;&lt;h2 id=&#34;tldr&#34;&gt;TLDR &lt;a href=&#34;#tldr&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;some interaction to your repository &lt;strong&gt;triggers&lt;/strong&gt; code to run.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;online-editorhttpsimageswaylonwalkercomgh-actions-header-online-editorpng&#34;&gt;&lt;a href=&#34;https://images.waylonwalker.com/gh-actions-header-online-editor.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/gh-actions-header-online-editor.png&#34; alt=&#34;Online Editor&#34;/ data-glightbox=&#34;description: Online Editor&#34;&gt;&lt;/a&gt; &lt;a href=&#34;#online-editorhttpsimageswaylonwalkercomgh-actions-header-online-editorpng&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The online editor for actions is pretty amazing.  When creating a new workflow it automatically sets up a new blank workflow or a workflow from the marketplace for you in your &lt;code&gt;.github/workflows&lt;/code&gt; directory.  This is all it takes to get an action running, a &lt;code&gt;yaml&lt;/code&gt; or &lt;code&gt;yml&lt;/code&gt; file in the &lt;code&gt;.github/workflows&lt;/code&gt; directory.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/gh-actions-editor.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/gh-actions-editor.png&#34; alt=&#34;github actions online editor&#34; title=&#34;github actions online editor&#34;/ data-glightbox=&#34;description: github actions online editor&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;The editor does a great job of detecting syntax errors, misplaced keys.  It also does a great job at autocompletion.  As you type it will suggest keys that are accepted by the workflow syntax.  There is an embedded side pannel with docs and the marketplace to the right.&lt;/p&gt;&#xA;&lt;h2 id=&#34;event-triggeringhttpsimageswaylonwalkercomgh-actions-header-event-triggeringpng&#34;&gt;&lt;a href=&#34;https://images.waylonwalker.com/gh-actions-header-event-triggering.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/gh-actions-header-event-triggering.png&#34; alt=&#34;Event Triggering&#34;/ data-glightbox=&#34;description: Event Triggering&#34;&gt;&lt;/a&gt; &lt;a href=&#34;#event-triggeringhttpsimageswaylonwalkercomgh-actions-header-event-triggeringpng&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;see this article from GitHub for a full set of details: &lt;a href=&#34;https://help.github.com/en/actions/reference/events-that-trigger-workflows&#34; title=&#34;https://help.github.com/en/actions/reference/events-that-trigger-workflows&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/help.github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/help.github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://help.github.com/en/actions/reference/events-that-trigger-workflows&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;You can trigger actions to run based on about any interaction with the repo that you can imagine, push, PR, webhooks, follows, create a branch, delete a branch, deployment, fork, wiki, issues, comments, labels, milestones, just check out the GitHub article for the full list.&lt;/p&gt;&#xA;&lt;h3 id=&#34;pushprhttpsimageswaylonwalkercomgh-actions-header-push-prpng&#34;&gt;&lt;a href=&#34;https://images.waylonwalker.com/gh-actions-header-push-pr.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/gh-actions-header-push-pr.png&#34; alt=&#34;push/pr&#34;/ data-glightbox=&#34;description: push/pr&#34;&gt;&lt;/a&gt; &lt;a href=&#34;#pushprhttpsimageswaylonwalkercomgh-actions-header-push-prpng&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;The most common and default trigger you will come across is the &lt;code&gt;on push&lt;/code&gt;.  This means that on every push/pull_request the given action will run.  This is typically at the start of the file and will trigger the workflow for the whole file.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Trigger the workflow on push or pull request&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;l&#34;&gt;push, pull_request]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can also filter to only run on specific branches.  You probably only want to run your release workflow on the main branch, but want linting and testing on all branches.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;push&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;branches&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pull_request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;branches&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;schedulehttpsimageswaylonwalkercomgh-actions-header-schedulepng&#34;&gt;&lt;a href=&#34;https://images.waylonwalker.com/gh-actions-header-schedule.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/gh-actions-header-schedule.png&#34; alt=&#34;schedule&#34;/ data-glightbox=&#34;description: schedule&#34;&gt;&lt;/a&gt; &lt;a href=&#34;#schedulehttpsimageswaylonwalkercomgh-actions-header-schedulepng&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;It is also possible to set up your workflows to run on a schedule.  I have set a few of these up myself to do things such as updating/auditing npm dependencies and checking if the site is up.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;schedule&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# * is a special character in YAML so you have to quote this string&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;cron&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;*/15 * * * *&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;watchhttpsimageswaylonwalkercomgh-actions-header-watchpng&#34;&gt;&lt;a href=&#34;https://images.waylonwalker.com/gh-actions-header-watch.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/gh-actions-header-watch.png&#34; alt=&#34;watch&#34;/ data-glightbox=&#34;description: watch&#34;&gt;&lt;/a&gt; &lt;a href=&#34;#watchhttpsimageswaylonwalkercomgh-actions-header-watchpng&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;One issue that I have with GitHub actions is that there really isn’t a good way to manually run workflows.  A workaround I found is that you can run a workflow when the repo is starred.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;watch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;types&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;started ]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you have a public repo with some traction, you might want to avoid this hack, but if you did want to use it on a repo that may potentially get some stars randomly make sure that you filter to only your stars.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;watch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;types&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;started ]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;jobs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;run-on-star&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;runs-on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;ubuntu-latest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;steps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;✨ you starred your own repo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;github.actor == &amp;#39;WaylonWalker&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;free-for-public-repositorieshttpsimageswaylonwalkercomgh-actions-header-freepng&#34;&gt;&lt;a href=&#34;https://images.waylonwalker.com/gh-actions-header-free.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/gh-actions-header-free.png&#34; alt=&#34;Free for public repositories&#34;/ data-glightbox=&#34;description: Free for public repositories&#34;&gt;&lt;/a&gt; &lt;a href=&#34;#free-for-public-repositorieshttpsimageswaylonwalkercomgh-actions-header-freepng&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;GitHub offers quite a generous free tier to get you started.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/gh-actions-free-tier.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/gh-actions-free-tier.png&#34; alt=&#34;gh-actions-free-tier&#34; title=&#34;github actions free tier&#34;/ data-glightbox=&#34;description: gh-actions-free-tier&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;I think that GitHub’s pricing just shows its commitment to the open-source.  Any public repo has unlimited build minutes!  I believe this goes for not only Linux actions, but  the more expensive windows and mac actions as well.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/gh-actions-free--for-public.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/gh-actions-free--for-public.png&#34; alt=&#34;github actions free for public repos&#34; title=&#34;GitHub actions free for public repos&#34;/ data-glightbox=&#34;description: github actions free for public repos&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;secretshttpsimageswaylonwalkercomgh-actions-header-secretspng&#34;&gt;&lt;a href=&#34;https://images.waylonwalker.com/gh-actions-header-secrets.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/gh-actions-header-secrets.png&#34; alt=&#34;Secrets&#34;/ data-glightbox=&#34;description: Secrets&#34;&gt;&lt;/a&gt; &lt;a href=&#34;#secretshttpsimageswaylonwalkercomgh-actions-header-secretspng&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You will find that a lot of actions need things such as a GitHub personal access token.  You may even be hitting a third party API such as twitter or Gmail that require an API key.  These are things that need to be kept secret &lt;strong&gt;DO NOT&lt;/strong&gt; put these as raw text inside your action.  The first tutorial I followed to deploy to GitHub pages did this 🤦‍♂️ and I followed.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/gh-actions-built-in-secret-store.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/gh-actions-built-in-secret-store.png&#34; alt=&#34;github built-in secret store&#34; title=&#34;GitHub built-in secret store&#34;/ data-glightbox=&#34;description: github built-in secret store&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;GitHub offers a wonderful secrets manager.  From your repository go to settings &amp;gt; secrets.  You can just add settings/secrets to the URL of your repo to get there as well.  From there add a new secret.  Now your secret is accessible by secret key using &lt;code&gt;${{ secrets.&amp;lt;your-key&amp;gt; }}&lt;/code&gt; from anywhere in your workflows &lt;code&gt;yml&lt;/code&gt; file.&lt;/p&gt;&#xA;&lt;p&gt;GitHub has done an amazing job at hiding these secrets.  Anywhere that I have seen try to echo these secrets out into the console or anywhere just shows ***.  I am not sure if you can 100% rely on this, but they appear to have done a good job with it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;live-logshttpsimageswaylonwalkercomgh-actions-header-live-logspng&#34;&gt;&lt;a href=&#34;https://images.waylonwalker.com/gh-actions-header-live-logs.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/gh-actions-header-live-logs.png&#34; alt=&#34;Live Logs&#34;/ data-glightbox=&#34;description: Live Logs&#34;&gt;&lt;/a&gt; &lt;a href=&#34;#live-logshttpsimageswaylonwalkercomgh-actions-header-live-logspng&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;One great feature of actions is the live logs.  As you are developing them it is likely that you are anxiously watching them with anticipation.  Watching those logs go, and turn green is a great experience.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/gh-actions-live-logs.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/gh-actions-live-logs.png&#34; alt=&#34;github actions live logs&#34; title=&#34;github actions live logs&#34;/ data-glightbox=&#34;description: github actions live logs&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;marketplacehttpsimageswaylonwalkercomgh-actions-header-marketplacepng&#34;&gt;&lt;a href=&#34;https://images.waylonwalker.com/gh-actions-header-marketplace.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/gh-actions-header-marketplace.png&#34; alt=&#34;Marketplace&#34;/ data-glightbox=&#34;description: Marketplace&#34;&gt;&lt;/a&gt; &lt;a href=&#34;#marketplacehttpsimageswaylonwalkercomgh-actions-header-marketplacepng&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As with all things open source, much of the power of actions comes through the community and in actions case the marketplace.  Reusable actions can be deployed to the github marketplace.  Here they can be found from search, starred, and example workflows can be copied in one click.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/gh-actions-marketplace.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/gh-actions-marketplace.png&#34; alt=&#34;github actions marketplace&#34; title=&#34;github actions marketplace&#34;/ data-glightbox=&#34;description: github actions marketplace&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;I find that many times while I can write all of the code necessary in a shell script to do most of what I need, there is already an action in the marketplace that takes care of everything for me.  In fact there are usually several to choose from.&lt;/p&gt;&#xA;&lt;h2 id=&#34;discuss&#34;&gt;#Discuss &lt;a href=&#34;#discuss&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;What Actions are you excited about?&lt;/li&gt;&#xA;&lt;li&gt;Are you using actions today?&lt;/li&gt;&#xA;&lt;li&gt;What struggles have you encountered with actions?&lt;/li&gt;&#xA;&lt;li&gt;Do you like these silly image headers I used? Do they kill A11y? I attempted to use good alt text to counter.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Getting Started with GitHub Actions</title>
    <id>https://waylonwalker.com/github-actions-syntax/</id>
    <updated>2020-03-16T05:00:00Z</updated>
    <published>2020-03-16T05:00:00Z</published>
    <link href="https://waylonwalker.com/github-actions-syntax/" rel="alternate" type="text/html"></link>
    <summary type="text">Github actions are written in configuration files using the YAML syntax. YAML is a superset of JSON. Most YAML can be expressed inline with JSON syntax....</summary>
    <content type="html">&lt;p&gt;Github actions are written in configuration files using the YAML syntax.  YAML&#xA;is a superset of JSON.  Most YAML can be expressed inline with JSON syntax.&#xA;Similar to python YAML is whitespace driven by whitespace rather than brackets&#xA;tags.  The argument for using YAML for configuration files such as actions is&#xA;that it is more human-readable and editable.  It’s much easier to see the&#xA;whitespace layout than it is to get closing brackets correct.  For actions, I&#xA;believe this is mostly true.  I don’t see any use case to get past 3-5 indents,&#xA;which is completely manageable.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Can I just say that I learned more than I realized about YAML by writing this&#xA;article&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;arrays-and-objects&#34;&gt;Arrays and Objects &lt;a href=&#34;#arrays-and-objects&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;In YAML or JSON, the most basic containers for data are &lt;strong&gt;arrays&lt;/strong&gt;, a 1D list&#xA;of things, and &lt;strong&gt;objects&lt;/strong&gt;, for key-value pairs.&lt;/p&gt;&#xA;&lt;h3 id=&#34;arrays&#34;&gt;Arrays &lt;a href=&#34;#arrays&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;The start of an array container is signified with a leading &lt;code&gt;-&lt;/code&gt;.  This is&#xA;probably one of the big things I didn’t understand about YAML before writing&#xA;this post, but hats off to the GitHub actions editor as it took care of a lot&#xA;of my misunderstanding for me.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- &lt;span class=&#34;l&#34;&gt;one&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;two&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;three&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#39;one&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;&amp;#39;two&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;&amp;#39;three&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;objects&#34;&gt;Objects &lt;a href=&#34;#objects&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Objects are just &lt;code&gt;{key: &amp;#34;value&amp;#34;}&lt;/code&gt; pairs without any &lt;code&gt;-&lt;/code&gt; before them.  I find&#xA;that objects make 💯 sense to me.  Unlike arrays, they feel very intuitive.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;one&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;who&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;me&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;&amp;#39;name&amp;#39;:&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;&amp;#39;one&amp;#39;,&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;&amp;#39;who&amp;#39;:&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;&amp;#39;me&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;example-combining-arrays-and-objects&#34;&gt;Example Combining arrays and objects &lt;a href=&#34;#example-combining-arrays-and-objects&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let’s start writing something that looks a bit more like a GitHub action.&#xA;GitHub actions are built from an object containing name, on, jobs.  Where jobs&#xA;is a list of jobs, that contain a list of steps.  Simple actions will only need&#xA;a single job, but commonly a list of steps.&lt;/p&gt;&#xA;&lt;h4 id=&#34;shortlist-of-github-action-keys&#34;&gt;Shortlist of GitHub action keys &lt;a href=&#34;#shortlist-of-github-action-keys&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;These are the keys, with their parents, that I found most useful.  You can find&#xA;a complete list on&#xA;&lt;a href=&#34;https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/docs.github.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/docs.github.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;workflow-syntax-for-github-actions&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;name&lt;/li&gt;&#xA;&lt;li&gt;on&#xA;&lt;ul&gt;&#xA;&lt;li&gt;push&lt;/li&gt;&#xA;&lt;li&gt;pull_request&lt;/li&gt;&#xA;&lt;li&gt;schedule&lt;/li&gt;&#xA;&lt;li&gt;watch&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;env&lt;/li&gt;&#xA;&lt;li&gt;jobs&#xA;&lt;ul&gt;&#xA;&lt;li&gt;name&lt;/li&gt;&#xA;&lt;li&gt;needs&lt;/li&gt;&#xA;&lt;li&gt;env&lt;/li&gt;&#xA;&lt;li&gt;if&lt;/li&gt;&#xA;&lt;li&gt;steps&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;combining-arrays-and-objects&#34;&gt;Combining arrays and objects &lt;a href=&#34;#combining-arrays-and-objects&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Here is a very small example that contains an object with one key, &lt;code&gt;jobs&lt;/code&gt;.&#xA;That &lt;code&gt;jobs&lt;/code&gt; object contains one job called &lt;code&gt;build&lt;/code&gt; that contains a list of&#xA;&lt;code&gt;steps&lt;/code&gt;.  Notice the &lt;code&gt;-&lt;/code&gt; before each step, and how each &lt;code&gt;step&lt;/code&gt; repeats the same&#xA;object keys.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;jobs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;build&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;runs-on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;ubuntu-latest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;steps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;step-one&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;checkout&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;step-two&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;step-three&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;jobs&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;build&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;runs-on&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ubuntu-latest&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;steps&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;nt&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;step-one&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;nt&#34;&gt;&amp;#34;uses&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;checkout&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;nt&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;step-two&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;nt&#34;&gt;&amp;#34;uses&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;test&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;nt&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;step-three&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;nt&#34;&gt;&amp;#34;uses&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;package&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;multiline-strings&#34;&gt;Multiline Strings &lt;a href=&#34;#multiline-strings&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Multiline strings are super important in GitHub actions.  You will likely use&#xA;the &lt;code&gt;|&lt;/code&gt; to preserve newlines for shell scripts most commonly but may also have&#xA;some raw text fields that need to be concatenated without a newline character&#xA;using the &lt;code&gt;&amp;gt;&lt;/code&gt; operator.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;| preserves newlines&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;folds newlines&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;preserved&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sd&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;    cd my-dir&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;    ls&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;    mv public ../&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;folded&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;sd&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;    This is some long text&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;    that I do not want on&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;    one line, but it is&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;    really a one-liner&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;preserved&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;cd my-dir\nls\nmv public ../\n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;folded&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;This is some long text that I do not want on one line, but it is  really&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;   a one-liner&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;🔥 I always use &lt;code&gt;|&lt;/code&gt; for steps that are scripts&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/testproject-io-py-actions/&#34; class=&#34;wikilink&#34; data-title=&#34;Integration testing with Python, TestProject.io, and GitHub Actions&#34; data-description=&#34;!!! Caution None of the testproject.io urls resolve anymore in JAN 2025, I removed all of the broken links.&#34; data-date=&#34;2020-07-27&#34; data-preview=&#34;!!! Caution None of the testproject.io urls resolve anymore in JAN 2025, I removed all of the broken links.&#34;&gt;Integration testing with Python, TestProject.io, and GitHub Actions&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In 👆 This article you can see how I use the &lt;code&gt;|&lt;/code&gt; character to run some docker&#xA;compose commands in a GitHub action to run some integration tests wtih pytet,&#xA;testproject.io, a headless browser, and selenium.&lt;/p&gt;&#xA;&lt;h2 id=&#34;anchors-are-not-supported&#34;&gt;Anchors are not supported &lt;a href=&#34;#anchors-are-not-supported&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;YAML has this amazing feature for reducing repetative content called anchors.&#xA;You can save part of your configuration as a reusable variable in other&#xA;sections.  I see this being really cool if you had separate jobs that all&#xA;needed similar steps.  Look for this improvement in the future, for now just be&#xA;aware that it is part of the YAML syntax.&lt;/p&gt;&#xA;&lt;p&gt;See support ticket 👉&#xA;&lt;a href=&#34;https://github.community/t5/GitHub-Actions/Support-for-YAML-anchors/m-p/30336&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.community.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.community.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Support-for-YAML-anchors&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;secrets&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;&amp;amp;secrets&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;github-pat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${{ gh-pat }}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;gmail-pass&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${{ gmail-pass }}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;jobs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;build&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;step-one&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;checkout&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;*secrets&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;step-two&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;*secrets&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;step-three&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;*secrets&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Notice how the nice clean YAML syntax gets exploded with much more data in the&#xA;JSON format.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;secrets&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;github-pat&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;${{ gh-pat }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;gmail-pass&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;${{ gmail-pass }}&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;jobs&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;build&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;#34;github-pat&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;${{ gh-pat }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;#34;gmail-pass&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;${{ gmail-pass }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;step-one&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;#34;uses&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;checkout&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;#34;github-pat&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;${{ gh-pat }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;#34;gmail-pass&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;${{ gmail-pass }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;step-two&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;#34;uses&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;test&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;#34;github-pat&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;${{ gh-pat }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;#34;gmail-pass&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;${{ gmail-pass }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;step-three&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nt&#34;&gt;&amp;#34;uses&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;package&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;writing-an-action&#34;&gt;Writing an Action &lt;a href=&#34;#writing-an-action&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;With a basic understanding of YAML you can probably go to your repo and click&#xA;actions &amp;gt; new workflow &amp;gt; setup my own workflow right from the ui, and create&#xA;your own.  Or read through the official syntax docs for deeper information&#xA;&lt;a href=&#34;https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/help.github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/help.github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;workflow-syntax-for-github-actions&lt;/a&gt;.&#xA;Let’s finsh off with a really simple action, the default one from GitHub.&lt;/p&gt;&#xA;&lt;h3 id=&#34;important-first-step&#34;&gt;Important first step &lt;a href=&#34;#important-first-step&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;It is important to know that when running an action you will likely need access&#xA;to your code in order to lint, test, build, package, whatever you want to do&#xA;with it.  Your first step for any action requiring code from your repo is to&#xA;&lt;code&gt;checkout&lt;/code&gt; your repo.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;steps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;actions/checkout@v&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;default-example&#34;&gt;Default example &lt;a href=&#34;#default-example&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;This example runs a workflow called &lt;code&gt;CI&lt;/code&gt; on ubuntu on every push or PR to the&#xA;main branch.  Within the build job it does a checkout of the repo, then runs&#xA;two shell steps.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# This is a basic workflow to help you get started with Actions&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;CI&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Controls when the action will run. Triggers the workflow on push or pull request&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# events but only for the main branch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;push&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;branches&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;main ]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pull_request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;branches&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;main ]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# A workflow run is made up of one or more jobs that can run sequentially or in parallel&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;jobs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# This workflow contains a single job called &amp;#34;build&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;build&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# The type of runner that the job will run on&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;runs-on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;ubuntu-latest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Steps represent a sequence of tasks that will be executed as part of the job&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;steps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;actions/checkout@v2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Runs a single command using the runners shell&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Run a one-line script&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;echo Hello, world!&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Runs a set of commands using the runners shell&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Run a multi-line script&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sd&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;        echo Add other actions to build,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;        echo test, and deploy your project.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/four-github-actions-website/&#34; class=&#34;wikilink&#34; data-title=&#34;Four github actions for your website&#34; data-description=&#34;GitHub&amp;#39;s actions are a new GitHub feature that will trigger GitHub to spin up a virtual machine and run some tasks with some special access to your repo. It...&#34; data-date=&#34;2020-05-18&#34; data-preview=&#34;GitHub&amp;#39;s actions are a new GitHub feature that will trigger GitHub to spin up a virtual machine and run some tasks with some special access to your repo. It...&#34;&gt;Four github actions for your website&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;python&#34;&gt;Python &lt;a href=&#34;#python&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/four-github-actions-python/&#34; class=&#34;wikilink&#34; data-title=&#34;Four Github Actions for Python&#34; data-description=&#34;If you are developing python packages and using GitHub here are four actions that you can use today to automate your release workflow. Since python tools...&#34; data-date=&#34;2020-04-13&#34; data-preview=&#34;If you are developing python packages and using GitHub here are four actions that you can use today to automate your release workflow. Since python tools...&#34;&gt;Four Github Actions for Python&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you are a python deveoper like me you will likely want to use GitHub actions&#xA;to Lint, Test, Package, and deploy your python projects. 👆 This article covers just that.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ wobsoriano poke95</title>
    <id>https://waylonwalker.com/wobsoriano-poke95/</id>
    <updated>2020-03-14T16:47:27Z</updated>
    <published>2020-03-14T16:47:27Z</published>
    <link href="https://waylonwalker.com/wobsoriano-poke95/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out poke95 by wobsoriano. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/wobsoriano/poke95&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;poke95&lt;/a&gt; by &lt;a href=&#34;https://github.com/wobsoriano&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;wobsoriano&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;🚀 A Windows 95 style Pokédex built with React.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ sharadcodes img-resizer</title>
    <id>https://waylonwalker.com/sharadcodes-img-resizer/</id>
    <updated>2020-03-07T21:50:18Z</updated>
    <published>2020-03-07T21:50:18Z</published>
    <link href="https://waylonwalker.com/sharadcodes-img-resizer/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? img-resizer by sharadcodes.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/sharadcodes/img-resizer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;img-resizer&lt;/a&gt; by &lt;a href=&#34;https://github.com/sharadcodes&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sharadcodes&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;An action for resizing images&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ScottBrenner generate-changelog-action</title>
    <id>https://waylonwalker.com/scottbrenner-generate-changelog-action/</id>
    <updated>2020-03-06T12:28:49Z</updated>
    <published>2020-03-06T12:28:49Z</published>
    <link href="https://waylonwalker.com/scottbrenner-generate-changelog-action/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out generate-changelog-action by ScottBrenner. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/ScottBrenner/generate-changelog-action&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;generate-changelog-action&lt;/a&gt; by &lt;a href=&#34;https://github.com/ScottBrenner&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ScottBrenner&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;GitHub Actions Hackathon 2020 winner -  lob/generate-changelog Action&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Today I learned `git diff feature..main`</title>
    <id>https://waylonwalker.com/git-diff-branches/</id>
    <updated>2020-03-03T11:58:00Z</updated>
    <published>2020-03-03T11:58:00Z</published>
    <link href="https://waylonwalker.com/git-diff-branches/" rel="alternate" type="text/html"></link>
    <summary type="text">Sometimes we get a little happy and mistakenly commit something that we just cant figure out. This is a good way to figure out what the heck has changed on the current branch compared to any other branch.</summary>
    <content type="html">&lt;p&gt;Today I learned how to diff between two branches.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;git diff feature..main&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Sometimes we get a little &lt;code&gt;git add . &amp;amp;&amp;amp; git commit -m &amp;#34;WIP&amp;#34;&lt;/code&gt; happy and mistakenly commit something that we just can’t figure out. This is a good way to figure out what the heck has changed on the current branch compared to any other branch.&lt;/p&gt;&#xA;&lt;h2 id=&#34;example&#34;&gt;Example &lt;a href=&#34;#example&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let’s create a new directory, initialize &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; and toss some content into a readme.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir git-diff&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git init&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hello there&amp;#34;&lt;/span&gt; &amp;gt; readme.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add . &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;hello there&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat readme.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;After all of that, we have a git repository on our local machine with a single file &lt;code&gt;readme.md&lt;/code&gt; that contains the following.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hello there&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;create-a-branch-and--edit&#34;&gt;Create a branch and ✍ edit &lt;a href=&#34;#create-a-branch-and--edit&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let’s checkout a new branch called Waylon and change the word &lt;code&gt;there&lt;/code&gt; to &lt;code&gt;Waylon&lt;/code&gt; in our &lt;code&gt;readme.md&lt;/code&gt; file, then diff it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout -b Waylon&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hello Waylon&amp;#34;&lt;/span&gt; &amp;gt; readme.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add . &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;hello Waylon&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git diff&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;- hello there&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+ hello waylon&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;At this point we have one commit.  Things are really straightforward, and our diff will be the same between the last commit and the main branch since.  Let’s make another commit by adding the date.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hello waylon\n\n&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;date&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt; readme.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat readme.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git diff&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hello Waylon&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+ Fri 13 Mar 2020 04:23:21 PM DST&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;👆 At this point, our diff doesn’t tell us the whole story between our current state and main, only between our current state and our last commit.  Let’s commit our changes and compare our branch to main.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add . &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;add date&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git diff main..waylon&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;- hello there&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;&lt;/span&gt;&lt;span class=&#34;gi&#34;&gt;+ hello Waylon&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+ Fri 13 Mar 2020 03:43:21 PM DST&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;git-is-powerful&#34;&gt;Git is powerful &lt;a href=&#34;#git-is-powerful&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I learn small tricks like this often with git.  Many times I forget about it and have to come back to re-learn. Sharing my thoughts gives me a better chance of remembering.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Create New Kedro Project</title>
    <id>https://waylonwalker.com/create-new-kedro-project/</id>
    <updated>2020-03-02T12:09:00Z</updated>
    <published>2020-03-02T12:09:00Z</published>
    <link href="https://waylonwalker.com/create-new-kedro-project/" rel="alternate" type="text/html"></link>
    <summary type="text">This is a quickstart to getting a new kedro pipeline up and running. After this article you should be able to understand how to get started with kedro. You...</summary>
    <content type="html">&lt;p&gt;This is a quickstart to getting a new &lt;a href=&#34;https://kedro.readthedocs.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro&lt;/a&gt;&#xA;pipeline up and running.  After this article you should be able to understand&#xA;how to get started with &lt;a href=&#34;https://kedro.readthedocs.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro&lt;/a&gt;.  You can learn&#xA;more about this &lt;a href=&#34;https://kedro.readthedocs.io/en/stable/02_get_started/03_hello_kedro.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Hello World&#xA;Example&lt;/a&gt;&#xA;in the&#xA;&lt;a href=&#34;https://kedro.readthedocs.io/en/stable/02_get_started/03_hello_kedro.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;docs&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;🧹 Install &lt;a href=&#34;https://kedro.readthedocs.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Kedro&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;🛢 Create the Example Pipeline&lt;/p&gt;&#xA;&lt;p&gt;💨 Run the example&lt;/p&gt;&#xA;&lt;p&gt;📉 Show the pipeline visualization&lt;/p&gt;&#xA;&lt;h2 id=&#34;create-a-virtual-environment&#34;&gt;Create a &lt;a href=&#34;/virtual-environment/&#34; class=&#34;glossary-term&#34; title=&#34;Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...&#34;&gt;Virtual Environment&lt;/a&gt; &lt;a href=&#34;#create-a-virtual-environment&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I use conda to control my virtual environments and will create a new environment called &lt;code&gt;kedro_iris&lt;/code&gt; with the following command.  &lt;strong&gt;note&lt;/strong&gt; the latest compatible version of python is 3.7.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt;: as of kedro 0.16.0 kedro supports up to 3.8&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda create -n kedro_iris &lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;3.8 -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/conda-create-kedro-iris.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/conda-create-kedro-iris.gif&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Options&lt;/p&gt;&#xA;&lt;h2 id=&#34;activate-your-conda-environment&#34;&gt;Activate your conda environment &lt;a href=&#34;#activate-your-conda-environment&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I try to keep my base environment as clean as possible.  I have ran into too many issues installing things in the base environment.  Almost always its some dependency that starts causing issues making it even harder to realize where its coming from as I never even installed it in base.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; activate kedro_iris&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;install-kedrohttpskedroreadthedocsio&#34;&gt;Install &lt;a href=&#34;https://kedro.readthedocs.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Kedro&lt;/a&gt; &lt;a href=&#34;#install-kedrohttpskedroreadthedocsio&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Currently &lt;code&gt;kedro==0.15.5&lt;/code&gt; is available on pypi and can be pip installed.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;EDIT&lt;/strong&gt; kedro is up to &lt;a href=&#34;https://pypi.org/project/kedro/&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://badge.fury.io/py/kedro.svg&#34; alt=&#34;PyPI version&#34;/ data-glightbox=&#34;description: PyPI version&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install kedro&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;make-sure-you-are-in-the-directory-that-you-want-your-project-in&#34;&gt;Make sure you are in the directory that you want your project in &lt;a href=&#34;#make-sure-you-are-in-the-directory-that-you-want-your-project-in&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /mnt/c/temp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;create-a-new-kedrohttpskedroreadthedocsio-project&#34;&gt;Create a new &lt;a href=&#34;https://kedro.readthedocs.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Kedro&lt;/a&gt; project &lt;a href=&#34;#create-a-new-kedrohttpskedroreadthedocsio-project&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro new&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; kedro-iris&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git init&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/kedro-new-iris.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/kedro-new-iris.gif&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;run-the-pipeline&#34;&gt;Run the pipeline &lt;a href=&#34;#run-the-pipeline&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This will tell kedro to run your pipeline.  It will look at all of your nodes and determine the correct execution order for you, then run each one of them.  You can do this from a python script, python terminal session, or from the &lt;a href=&#34;https://kedro.readthedocs.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro&lt;/a&gt; cli.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;✨ It will look at all of your nodes and determine the correct execution order for you&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Lets run from the cli while in the same directory as kedro-iris&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro run&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/kedro-new-iris.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/kedro-new-iris.gif&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;viz&#34;&gt;Viz &lt;a href=&#34;#viz&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/kedro-org/kedro-viz&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-viz&lt;/a&gt; is a priceless feature of &lt;a href=&#34;https://kedro.readthedocs.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro&lt;/a&gt;.  It’s like x-ray vision into your pipeline.  I can’t imagine working without it after having it over the past year.  Unlike traditional documentation &lt;a href=&#34;https://github.com/kedro-org/kedro-viz&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-viz&lt;/a&gt; cannot lie to you.  It will help guarantee your changes line up properly, plan out adding nodes, and identify dependencies of deprecating nodes.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Unlike traditional documentation &lt;a href=&#34;https://github.com/kedro-org/kedro-viz&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-viz&lt;/a&gt; cannot lie to you.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;install-kedro-vizhttpsgithubcomkedro-orgkedro-viz&#34;&gt;Install &lt;a href=&#34;https://github.com/kedro-org/kedro-viz&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-viz&lt;/a&gt; &lt;a href=&#34;#install-kedro-vizhttpsgithubcomkedro-orgkedro-viz&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/kedro-org/kedro-viz&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-viz&lt;/a&gt; is also on pypi and can be installed just like any other python package with &lt;code&gt;pip&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install kedro-viz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;visualize-the-pipeline&#34;&gt;Visualize the pipeline &lt;a href=&#34;#visualize-the-pipeline&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/kedro-org/kedro-viz&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-viz&lt;/a&gt; is ran from the command line in the same directory as your kedro project.  There are ways to store your pipeline data as json, then load them from outside your project, but we will follow the standard practice for now.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro viz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/kedro-viz-iris.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/kedro-viz-iris.gif&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;-docker&#34;&gt;🏗 Docker &lt;a href=&#34;#-docker&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There is another package that makes creating docker images from kedro projects super simple &lt;a href=&#34;https://github.com/kedro-org/kedro-docker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-docker&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;If you dont already have docker installed on your machine, feel free to skip this section.&lt;/p&gt;&#xA;&lt;h3 id=&#34;install-kedro-dockerhttpsgithubcomkedro-orgkedro-docker&#34;&gt;install &lt;a href=&#34;https://github.com/kedro-org/kedro-docker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-docker&lt;/a&gt; &lt;a href=&#34;#install-kedro-dockerhttpsgithubcomkedro-orgkedro-docker&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install kedro-docker&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;build-the-image&#34;&gt;build the image &lt;a href=&#34;#build-the-image&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro docker build&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;run-the-image&#34;&gt;run the image &lt;a href=&#34;#run-the-image&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro docker run&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;simple-huh&#34;&gt;Simple Huh &lt;a href=&#34;#simple-huh&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Getting up and going with a brand new &lt;a href=&#34;https://kedro.readthedocs.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro&lt;/a&gt; project is super simple, thanks to the help of the &lt;code&gt;kedro new&lt;/code&gt; command.  The ability to add an example pipeline from the start makes it that much easier to get going and have a template to follow for your own projects.&lt;/p&gt;&#xA;&lt;h2 id=&#34;recap&#34;&gt;Recap &lt;a href=&#34;#recap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda create -n kedro_iris &lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;3.7 -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; activate kedro_iris&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install kedro&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /mnt/c/temp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro new&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# give it a project name Kedro Iris&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# accept default package name kedro_iris&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# addept default directory name kedro-iris&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# yes for an example pipeline&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; kedro-iris&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git init&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;initialized new kedro project&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro run&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install kedro-viz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro viz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install kedro-docker&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro docker build&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro docker run&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;other-resources&#34;&gt;Other resources &lt;a href=&#34;#other-resources&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://kedro.readthedocs.io/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro docs&lt;/a&gt; have a ton of great resources.  They are searchable, but can be a bit of an overwhelming amount of data.&lt;/p&gt;&#xA;&lt;p&gt;I keep adding to my &lt;a href=&#34;https://waylonwalker.com/notes/kedro/&#34;&gt;kedro notes&lt;/a&gt; as I find new and interesting things.&lt;/p&gt;&#xA;&lt;p&gt;I tweet out most of those snippets as I add them, you can find them all here &lt;a href=&#34;https://twitter.com/search?q=%23kedrotips&#34;&gt;#kedrotips&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;more-to-come&#34;&gt;More to come &lt;a href=&#34;#more-to-come&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I am planning to do more articles like this, you can stay up to date with them&#xA;by following me on &lt;a href=&#34;https://dev.to/waylonwalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/dev.to.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/dev.to.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dev.to&lt;/a&gt;, subscribing to my&#xA;&lt;a href=&#34;https://waylonwalker.com/rss.xml&#34;&gt;rss feed&lt;/a&gt;.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ DesktopECHO xWSL</title>
    <id>https://waylonwalker.com/desktopecho-xwsl/</id>
    <updated>2020-03-01T23:51:16Z</updated>
    <published>2020-03-01T23:51:16Z</published>
    <link href="https://waylonwalker.com/desktopecho-xwsl/" rel="alternate" type="text/html"></link>
    <summary type="text">DesktopECHO has done a fantastic job with xWSL. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/DesktopECHO&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;DesktopECHO&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/DesktopECHO/xWSL&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;xWSL&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Installer script for Ubuntu 22.04 / 24.04 with XFCE 4.18 on WSL.  Does not require hypervisor, container, or X11 server.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>What is YOUR Advice for New Data Scientists</title>
    <id>https://waylonwalker.com/data-scientist-advice/</id>
    <updated>2020-02-26T12:55:00Z</updated>
    <published>2020-02-26T12:55:00Z</published>
    <link href="https://waylonwalker.com/data-scientist-advice/" rel="alternate" type="text/html"></link>
    <summary type="text">Learn Git * Keep Learning</summary>
    <content type="html">&lt;ul&gt;&#xA;&lt;li&gt;Learn the business&lt;/li&gt;&#xA;&lt;li&gt;Learn &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;Git&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Your code does not need to be amazing&lt;/li&gt;&#xA;&lt;li&gt;Keep Learning&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;learn-git&#34;&gt;Learn Git &lt;a href=&#34;#learn-git&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You dont have to start out as a git wizard with the cleanest possible commit history.  At first dont let yourself get too wrapped up in it, the most important part is that you make commits.  You will find needs for more advanced stuff later.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;FEAT added new function to calculate revenue by product family&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git push&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Get comfortable with this, then learn how to &lt;code&gt;branch&lt;/code&gt;, &lt;code&gt;rebase&lt;/code&gt;, &lt;code&gt;stash&lt;/code&gt;, etc…&lt;/p&gt;&#xA;&lt;h2 id=&#34;your-code-does-not-need-to-be-amazing&#34;&gt;Your code does not need to be amazing &lt;a href=&#34;#your-code-does-not-need-to-be-amazing&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Get the job done.  Keep it in small bite size pieces.  Make readable function definitions and variable names.  You will thank yourself for naming things well later.  Readability counts more than performance in most cases of data science.  If it gets the job done try not to over worry about things like performance.  A few extra seconds to clean a dataset or build a model is not worth hours of your time.  As you go you will have cases that performance is more critical and you will learn what to do from the start to avoid them.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ fastai fastpages</title>
    <id>https://waylonwalker.com/fastai-fastpages/</id>
    <updated>2020-02-26T05:06:16Z</updated>
    <published>2020-02-26T05:06:16Z</published>
    <link href="https://waylonwalker.com/fastai-fastpages/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on fastpages by fastai.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/fastai/fastpages&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fastpages&lt;/a&gt; by &lt;a href=&#34;https://github.com/fastai&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fastai&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;An easy to use blogging platform, with enhanced support for Jupyter Notebooks.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Do You Hoist</title>
    <id>https://waylonwalker.com/do-you-hoist/</id>
    <updated>2020-02-25T12:52:00Z</updated>
    <published>2020-02-25T12:52:00Z</published>
    <link href="https://waylonwalker.com/do-you-hoist/" rel="alternate" type="text/html"></link>
    <summary type="text">Do you have any use cases that you use hoising? Why? It seems like a really cool feature in any language that uses it, but I dont really notice it in use.</summary>
    <content type="html">&lt;p&gt;I am working through Wes Bos’s&#xA;&lt;a href=&#34;https://beginnerjavascript.com/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/beginnerjavascript.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/beginnerjavascript.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;beginnerjavascript.com/&lt;/a&gt; I just hit module 18&#xA;on hoisting.  It’s something that I always knew was there, Its not something I&#xA;typically see used or use myself.&lt;/p&gt;&#xA;&lt;h2 id=&#34;do-you-hoist&#34;&gt;Do you Hoist? &lt;a href=&#34;#do-you-hoist&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Do you have any use cases that you use hoising?  Why?  It seems like a really cool feature in any language that uses it, but I dont really notice it in use.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-hoising&#34;&gt;What is Hoising &lt;a href=&#34;#what-is-hoising&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There are many articles that cover this in far more depth, but its the idea that variable declarations and functions are defined before they are executed.  This means that it doesnt matter if you call a function before or after it is defined.&lt;/p&gt;&#xA;&lt;h2 id=&#34;hoisting&#34;&gt;Hoisting &lt;a href=&#34;#hoisting&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`Hello &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getUser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;getUser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Waylon&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Running this code will log out “Waylon”&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-about-variable-hoisting&#34;&gt;What about variable hoisting &lt;a href=&#34;#what-about-variable-hoisting&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I am most familiar with python which does not variable hoist so this one kinda confused me at first.  It only hoists the variable declaration not the value of the variable.  It defines whether the variable is going to be &lt;code&gt;var&lt;/code&gt;, &lt;code&gt;let&lt;/code&gt;, or &lt;code&gt;const&lt;/code&gt; and sets it to undefined.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It only hoists the variable declaration not the value of the variable.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;name: &amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;firstName: &amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;firstName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Waylon&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This code will log out &lt;code&gt;name: undefined&lt;/code&gt; followed by an &lt;code&gt;Uncaught ReferenceError: firstName is not defined&lt;/code&gt; since &lt;code&gt;name&lt;/code&gt; has been decalared and &lt;code&gt;firstName&lt;/code&gt; has not been decalred.&lt;/p&gt;&#xA;&lt;h2 id=&#34;i-dont-hoist&#34;&gt;I don’t Hoist &lt;a href=&#34;#i-dont-hoist&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Really it feels weird to call function definitions before using them.  I really dont have a better reason.  It just feels more natural to do so.&lt;/p&gt;&#xA;&lt;h2 id=&#34;is-hoisting-more-readable&#34;&gt;Is hoisting more readable? &lt;a href=&#34;#is-hoisting-more-readable&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I kinda like the idea of putting the 🥩 meat of the file up at the top so that someone reading it will see the good stuff first, then can optionally dig into the weeds if they need to.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>What is Kedro</title>
    <id>https://waylonwalker.com/what-is-kedro-1/</id>
    <updated>2020-02-24T12:48:00Z</updated>
    <published>2020-02-24T12:48:00Z</published>
    <link href="https://waylonwalker.com/what-is-kedro-1/" rel="alternate" type="text/html"></link>
    <summary type="text">what-is-kedro</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;/what-is-kedro/&#34; class=&#34;wikilink&#34; data-title=&#34;What is Kedro&#34; data-description=&#34;Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...&#34; data-date=&#34;2021-08-17&#34; data-preview=&#34;Kedro is an unopinionated Data Engineering framework that comes with a somewhat opinionated template. It gives the user a way to build pipelines that...&#34;&gt;What is Kedro&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This is my original what-is-kedro article.  There is a brand new one&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;Kedro is an open source data pipeline framework.  It provides guardrails to set&#xA;your project up right from the start without needing to know deeply how to&#xA;setup your own python library for data pipelining.  It includes really great&#xA;ways to manipulate &lt;code&gt;catalogs&lt;/code&gt; and &lt;code&gt;pipelines&lt;/code&gt;.  This article will cover the 10K&#xA;view of kedro, future articles will dive deper into each one.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://kedro.readthedocs.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro&lt;/a&gt; is an open-source data pipeline framework.  It provides guardrails to set your project up right from the start without needing to know deeply how to set up your own python library for data pipelining.  It includes great ways to manipulate &lt;code&gt;catalogs&lt;/code&gt; and &lt;code&gt;pipelines&lt;/code&gt;.  This article will cover the 10K view of &lt;a href=&#34;https://kedro.readthedocs.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro&lt;/a&gt;, future articles will dive deeper into each one.&lt;/p&gt;&#xA;&lt;!-- {% slideshare DAZrqvJmuUUfFF %} --&gt;&#xA;&lt;h2 id=&#34;libraries&#34;&gt;Libraries &lt;a href=&#34;#libraries&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Currently, &lt;a href=&#34;https://kedro.readthedocs.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro&lt;/a&gt; is broken down into 3 different libraries.&lt;/p&gt;&#xA;&lt;p&gt;💎 &lt;a href=&#34;https://kedro.readthedocs.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;📉 &lt;a href=&#34;https://github.com/kedro-org/kedro-viz&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-viz&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;🏗 &lt;a href=&#34;https://github.com/kedro-org/kedro-docker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-docker&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;kedrohttpskedroreadthedocsio&#34;&gt;&lt;a href=&#34;https://kedro.readthedocs.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro&lt;/a&gt; &lt;a href=&#34;#kedrohttpskedroreadthedocsio&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/68747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f7175616e74756d626c61636b6c6162732f6b6564726f2f6d61737465722f696d672f6b6564726f5f62616e6e65722e6a7067.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/68747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f7175616e74756d626c61636b6c6162732f6b6564726f2f6d61737465722f696d672f6b6564726f5f62616e6e65722e6a7067.jpg&#34; alt=&#34;kedro logo&#34;/ data-glightbox=&#34;description: kedro logo&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://kedro.readthedocs.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro&lt;/a&gt; is the core of the ecosystem.  It provides the docs, getting started, &lt;code&gt;kedro new&lt;/code&gt; templates, and the core library including the catalog and pipeline.&lt;/p&gt;&#xA;&lt;h3 id=&#34;catalog&#34;&gt;Catalog &lt;a href=&#34;#catalog&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dev-to-uploads.s3.amazonaws.com/i/trzfj86dbq0ronis26x1.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dev-to-uploads.s3.amazonaws.com/i/trzfj86dbq0ronis26x1.jpg&#34; alt=&#34;catalogs&#34;/ data-glightbox=&#34;description: catalogs&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Inside this core library is a data catalog object.  This allows you to specify attributes about your data, then load and save it without ever writing a single line of read/write code, which can become very cumbersome.  Older versions would load this into the io variable, currently it loads into the catalog.  The power of the catalog is that it allows you to read and write data by just referencing its name.  Typically this is done inside of a YAML file, but can be done in python.&lt;/p&gt;&#xA;&lt;p&gt;Here is an example of a CSV dataset stored locally&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Example 1: Loads a local csv file&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;bikes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;CSVLocalDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;data/01_raw/bikes.csv&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This dataset can be loaded by name&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;bikes&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Though it’s not typical practice it is possible to save data to a catalog entry ad-hoc.  Typically the pipeline is used to run functions and save data for you.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pandas&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pd&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;bikes_df&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataFrame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bikes_data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;...&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datasets&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bikes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;save&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bikes_df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;pipeline&#34;&gt;Pipeline &lt;a href=&#34;#pipeline&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/roman-pentin-T5QT2bmiD4E-unsplash.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/roman-pentin-T5QT2bmiD4E-unsplash.jpg&#34; alt=&#34;building pipelines&#34;/ data-glightbox=&#34;description: building pipelines&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;The pipeline object is the brains of &lt;a href=&#34;https://kedro.readthedocs.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro&lt;/a&gt;.  When working with &lt;a href=&#34;https://kedro.readthedocs.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro&lt;/a&gt; you simply define functions that take in data as arguments, manipulate it, and return a new dataset.  The pipeline will decide what order to execute these functions ini based on their dependencies.  It will then work with the catalog to load the data from the catalog pass it to your function, the save the returned data in the catalog.&lt;/p&gt;&#xA;&lt;p&gt;Here is an example pipeline from the docs.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pandas&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pd&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;numpy&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;np&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.pipeline&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.pipeline&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;clean_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataFrame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;n&#34;&gt;boats&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataFrame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataFrame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cars_df&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cars&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dropna&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;boats_df&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;boats&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dropna&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;halve_dataframe&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataFrame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;List&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataFrame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;array_split&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;clean_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;cars2017&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;boats2017&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;n&#34;&gt;outputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cars_df&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;clean_cars2017&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                      &lt;span class=&#34;n&#34;&gt;boats_df&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;clean_boats2017&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;halve_dataframe&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;s1&#34;&gt;&amp;#39;clean_cars2017&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;train_cars2017&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;test_cars2017&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;halve_dataframe&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;nb&#34;&gt;dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;clean_boats2017&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;train_boats2017&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;test_boats2017&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;kedro-vizhttpsgithubcomkedro-orgkedro-viz&#34;&gt;&lt;a href=&#34;https://github.com/kedro-org/kedro-viz&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-viz&lt;/a&gt; &lt;a href=&#34;#kedro-vizhttpsgithubcomkedro-orgkedro-viz&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/kedro-org/kedro-viz&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-viz&lt;/a&gt; is a priceless component to the &lt;a href=&#34;https://kedro.readthedocs.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro&lt;/a&gt; ecosystem.  It gives you x-ray vision into your project.  You can see exactly how data flows through your pipeline.  Since it is fully automated it is always up to date and never lies to you.  &lt;a href=&#34;https://github.com/kedro-org/kedro-viz&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-viz&lt;/a&gt; is an integral part of my daily debugging and refactoring toolbelt.&lt;/p&gt;&#xA;&lt;p&gt;Starting the viz from the command line is super easy&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; my-kedro-project&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro viz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/pipeline_visualisation.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/pipeline_visualisation.png&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;kedro-dockerhttpsgithubcomkedro-orgkedro-docker&#34;&gt;&lt;a href=&#34;https://github.com/kedro-org/kedro-docker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-docker&lt;/a&gt; &lt;a href=&#34;#kedro-dockerhttpsgithubcomkedro-orgkedro-docker&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/kedro-org/kedro-docker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-docker&lt;/a&gt; is a simple way to set up your project for production.  It provides a few simple cli commands&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; my-kedro-project&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro docker build&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kedro docker run&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;other-resources&#34;&gt;Other resources &lt;a href=&#34;#other-resources&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;https://kedro.readthedocs.io/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro docs&lt;/a&gt; have a ton of great resources.  They are searchable, but can be a bit of an overwhelming amount of data.&lt;/p&gt;&#xA;&lt;p&gt;I keep adding to my &lt;a href=&#34;https://waylonwalker.com/kedro/&#34;&gt;kedro notes&lt;/a&gt; as I find new and interesting things.&lt;/p&gt;&#xA;&lt;p&gt;I tweet out most of those snippets as I add them, you can find them all here &lt;a href=&#34;https://twitter.com/search?q=%23kedrotips&#34;&gt;#kedrotips&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;more-to-come&#34;&gt;More to come &lt;a href=&#34;#more-to-come&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I am planning to do more articles like this, you can stay up to date with them&#xA;by following me on &lt;a href=&#34;https://dev.to/waylonwalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/dev.to.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/dev.to.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dev.to&lt;/a&gt;, subscribing to my&#xA;&lt;a href=&#34;https://waylonwalker.com/rss.xml&#34;&gt;rss feed&lt;/a&gt;.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ines termynal</title>
    <id>https://waylonwalker.com/ines-termynal/</id>
    <updated>2020-02-24T02:44:53Z</updated>
    <published>2020-02-24T02:44:53Z</published>
    <link href="https://waylonwalker.com/ines-termynal/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? termynal by ines.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/ines/termynal&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;termynal&lt;/a&gt; by &lt;a href=&#34;https://github.com/ines&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ines&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;⬛️ Lightweight and modern terminal animations using async/await&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ forem forem</title>
    <id>https://waylonwalker.com/forem-forem/</id>
    <updated>2020-02-22T03:04:11Z</updated>
    <published>2020-02-22T03:04:11Z</published>
    <link href="https://waylonwalker.com/forem-forem/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? forem by forem.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/forem/forem&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;forem&lt;/a&gt; by &lt;a href=&#34;https://github.com/forem&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;forem&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;For empowering community 🌱&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ fastapi typer</title>
    <id>https://waylonwalker.com/fastapi-typer/</id>
    <updated>2020-02-22T02:33:06Z</updated>
    <published>2020-02-22T02:33:06Z</published>
    <link href="https://waylonwalker.com/fastapi-typer/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred typer by fastapi. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/fastapi/typer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;typer&lt;/a&gt; by &lt;a href=&#34;https://github.com/fastapi&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fastapi&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;Typer, build great CLIs. Easy to code. Based on Python type hints.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Custom Scrollbar Design</title>
    <id>https://waylonwalker.com/custom-scrollbar-design/</id>
    <updated>2020-02-21T12:11:00Z</updated>
    <published>2020-02-21T12:11:00Z</published>
    <link href="https://waylonwalker.com/custom-scrollbar-design/" rel="alternate" type="text/html"></link>
    <summary type="text">Getting a custom scrollbar on your site makes it stand out a bit compared to the very plain stock one that are on most sites. This is how I set mine up on my...</summary>
    <content type="html">&lt;p&gt;Getting a custom scrollbar on your site makes it stand out a bit compared to&#xA;the very plain stock one that are on most sites.  This is how I set mine up on&#xA;my gatsby site.&lt;/p&gt;&#xA;&lt;p&gt;Inspired by Wes Bos’s new &lt;a href=&#34;https://uses.tech&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/uses.tech.svg&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/uses.tech.svg&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;uses.tech&lt;/a&gt; I wanted a custom&#xA;scrollbar on my personal site.  I had tried to do it in the past, but gave up&#xA;after it was not working.&lt;/p&gt;&#xA;&lt;h2 id=&#34;looking-at-the-source&#34;&gt;Looking at the Source &lt;a href=&#34;#looking-at-the-source&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Since &lt;a href=&#34;https://uses.tech&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/uses.tech.svg&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/uses.tech.svg&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;uses.tech&lt;/a&gt; is open source I jumped on github, searched for scroll and found this &lt;a href=&#34;https://github.com/wesbos/awesome-uses/blob/124bdd64345bc64eb84879929f0e57cbb8752e34/src/components/layout.js#L74&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;layout.js&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;copy-it-to-my-own-component&#34;&gt;Copy it to my own component &lt;a href=&#34;#copy-it-to-my-own-component&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;My first step was to take his css and copy it into a styled component for my entire layout, but it failed.  I do not fully understand why.  None of the custom style came through at all.  If you know please leave me a comment.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/why-wont-you-work.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/why-wont-you-work.jpg&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;I suspect for some reason it has to do with attatching to the &lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;html&lt;/a&gt; element inside of a styled-component.  I think wes was able to get around this by using &lt;code&gt;createGlobalStyle&lt;/code&gt;.  But I was still using much of the default gatsby template, so I did not have a &lt;code&gt;createGlobalStyle&lt;/code&gt; element, but I did have a layout.css.&lt;/p&gt;&#xA;&lt;h2 id=&#34;scrollcss&#34;&gt;scroll.css &lt;a href=&#34;#scrollcss&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I added &lt;code&gt;scroll.css&lt;/code&gt; to my static directory, then imported it into &lt;code&gt;gatsby-browser.js&lt;/code&gt; in order to get it loaded onto the page.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;c&#34;&gt;/* static/scroll.css */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;-webkit-scrollbar&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;html&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;scroll-behavior&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;smooth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;scrollbar-width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;thin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;scrollbar-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#5651B7&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;-webkit-scrollbar-track&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#392E3D&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;-webkit-scrollbar-thumb&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#5651B7&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;border-radius&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;.5&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;112&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;107&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;208&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;linear-gradient&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;180&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;deg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgba&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;112&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;107&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;208&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgba&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;86&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;81&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;183&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;border&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;solid&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgba&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;86&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;81&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;183&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;.5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// gatsby-browser.js&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;scroll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;css&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;it-works&#34;&gt;It works &lt;a href=&#34;#it-works&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It was a bit finicky for me to find the right place to put everything, but this is the final result.  I found out that you can have a gradient on your &lt;code&gt;scrollbar-thumb&lt;/code&gt;, but the &lt;code&gt;scrollbar-track&lt;/code&gt; cannot, it also cannot be transparent.  I picked a color that matched my background the best for most use cases, but when the screen gets really narrow a line starts to appear.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/custom-scrollbar-with-css.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/custom-scrollbar-with-css.gif&#34; alt=&#34;My final result&#34; title=&#34;my final result, an example give of the final result live on waylonwalker.com&#34;/ data-glightbox=&#34;description: My final result&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;My final result&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;resources&#34;&gt;Resources &lt;a href=&#34;#resources&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;uses.tech layout.js: &lt;a href=&#34;https://github.com/wesbos/awesome-uses/blob/124bdd64345bc64eb84879929f0e57cbb8752e34/src/components/layout.js#L74&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;layout.js&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;css-trick article: &lt;a href=&#34;https://css-tricks.com/almanac/properties/s/scrollbar/&#34; title=&#34;css tricks scrollbar article&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/css-tricks.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/css-tricks.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;scrollbar&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ localstack localstack</title>
    <id>https://waylonwalker.com/localstack-localstack/</id>
    <updated>2020-02-19T22:18:45Z</updated>
    <published>2020-02-19T22:18:45Z</published>
    <link href="https://waylonwalker.com/localstack-localstack/" rel="alternate" type="text/html"></link>
    <summary type="text">localstack by localstack is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/localstack/localstack&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;localstack&lt;/a&gt; by &lt;a href=&#34;https://github.com/localstack&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;localstack&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;💻 A fully functional local AWS cloud stack. Develop and test your cloud &amp;amp; Serverless apps offline&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Don’t waste your time learning everything</title>
    <id>https://waylonwalker.com/don-t-waste-your-time-learning-everything/</id>
    <updated>2020-02-19T06:00:00Z</updated>
    <published>2020-02-19T06:00:00Z</published>
    <link href="https://waylonwalker.com/don-t-waste-your-time-learning-everything/" rel="alternate" type="text/html"></link>
    <summary type="text">Stick to what you know, and learn a little bit of something new every day.</summary>
    <content type="html">&lt;blockquote&gt;&#xA;&lt;p&gt;“Don’t waste your time learning everything.”&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/dont-waste-your-time-learning-everythign-post.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/dont-waste-your-time-learning-everythign-post.png&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Inspired by this &lt;a href=&#34;https://www.linkedin.com/posts/activity-6633818327070326784--Ksl&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.linkedin.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.linkedin.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;linkedIn post&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I felt that this comment was very powerful. Here are my 2 cents.&lt;/p&gt;&#xA;&lt;h2 id=&#34;be-productive&#34;&gt;Be Productive &lt;a href=&#34;#be-productive&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Stick to what you know, and learn a little bit of something new every day. If what you know is how to use Excel like a boss, don’t fee ashamed that you are missing something. Be proud and use what you know.&lt;/p&gt;&#xA;&lt;h2 id=&#34;dont-stagnate&#34;&gt;Don’t Stagnate &lt;a href=&#34;#dont-stagnate&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Take small steps enhance what you know now with something new that you get you closer to where you want to be. If you need something that sci-py offers learn how to load in data and use that part. If your sick of waiting for IT to pull data out of the database so you can use it, learn that.&lt;/p&gt;&#xA;&lt;h2 id=&#34;dont-overwhelm-yourself&#34;&gt;Dont Overwhelm Yourself &lt;a href=&#34;#dont-overwhelm-yourself&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you try to drop everything you know now and jump whole hog into these new flashy things its not going to work. Learn what you need to know.  New things crop up very often.  They will come and go.  Some things will get traction, some will never get much traction past an impressive hello world example.&lt;/p&gt;&#xA;&lt;h2 id=&#34;keep-your-finger-on-new-tech&#34;&gt;Keep your finger on new tech &lt;a href=&#34;#keep-your-finger-on-new-tech&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Its important to keep your finger on the state of technology, but dont Overwhelm yourself learning every new thing that comes out.  Make silly hello world examples in these new things and walk away.  When its time to implement something new into a real project you will be ready and understand how to do it.  If that thing dies its good that you didn’t waste a lot of time on it, but chances are it inspired the thing that actually takes off.  Then you will have some understanding of what the next thing is doing ahead of everyone else who missed out on the original.&lt;/p&gt;&#xA;&lt;h2 id=&#34;ill-leave-you-with-this-inspirational-video-by-kitze&#34;&gt;I’ll leave you with this inspirational video by Kitze &lt;a href=&#34;#ill-leave-you-with-this-inspirational-video-by-kitze&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=_kVxXV0TQ7M&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;![](https://images.waylonwalker.com/2020-02-16 09-57-03_Microsoft Text Input Application.png)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=_kVxXV0TQ7M&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Navigating the hype-driven frontend development world without going insane - KITZE&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Canop broot</title>
    <id>https://waylonwalker.com/canop-broot/</id>
    <updated>2020-02-19T04:50:22Z</updated>
    <published>2020-02-19T04:50:22Z</published>
    <link href="https://waylonwalker.com/canop-broot/" rel="alternate" type="text/html"></link>
    <summary type="text">Canop has done a fantastic job with broot. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/Canop&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Canop&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/Canop/broot&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;broot&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;A new way to see and navigate directory trees : &lt;a href=&#34;https://dystroy.org/broot&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/dystroy.org.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/dystroy.org.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://dystroy.org/broot&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ calebporzio gitdown</title>
    <id>https://waylonwalker.com/calebporzio-gitdown/</id>
    <updated>2020-02-18T02:43:59Z</updated>
    <published>2020-02-18T02:43:59Z</published>
    <link href="https://waylonwalker.com/calebporzio-gitdown/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by gitdown from calebporzio.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/calebporzio/gitdown&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gitdown&lt;/a&gt; from &lt;a href=&#34;https://github.com/calebporzio&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;calebporzio&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A simple package to parse Github Flavored Markdown in PHP&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ benawad destiny</title>
    <id>https://waylonwalker.com/benawad-destiny/</id>
    <updated>2020-02-17T23:32:00Z</updated>
    <published>2020-02-17T23:32:00Z</published>
    <link href="https://waylonwalker.com/benawad-destiny/" rel="alternate" type="text/html"></link>
    <summary type="text">I like benawad&#39;s project destiny.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/benawad&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;benawad’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/benawad/destiny&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;destiny&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Prettier for File Structures&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2020 waylonwalker.com rebrand</title>
    <id>https://waylonwalker.com/2020-rebrand/</id>
    <updated>2020-02-17T13:02:00Z</updated>
    <published>2020-02-17T13:02:00Z</published>
    <link href="https://waylonwalker.com/2020-rebrand/" rel="alternate" type="text/html"></link>
    <summary type="text">I documented the story of my 2020 waylonwalker.com redesign on my blog. This post walks through the tools and inspiration for the card design.</summary>
    <content type="html">&lt;p&gt;Moving into 2020 I have been really leaning on using purple as my theme color&#xA;everywhere more and more.   Its time for an update to my personal site, not&#xA;just because it feels plain, not just because the cover art I am using for&#xA;dev.to doesn’t fit my current card layout, but because I feel &lt;strong&gt;inspired&lt;/strong&gt; and&#xA;I &lt;strong&gt;want&lt;/strong&gt; to.&lt;/p&gt;&#xA;&lt;h2 id=&#34;starting-point&#34;&gt;Starting point &lt;a href=&#34;#starting-point&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;![This is what we are working with.](&lt;a href=&#34;https://images.waylonwalker.com/2020-02-10&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/images.waylonwalker.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/images.waylonwalker.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://images.waylonwalker.com/2020-02-10&lt;/a&gt; 12-17-43_Start.png)&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;This is what we are working with.  It has been my card design for at least a&#xA;year now.  Its not bad but, its a bit play, doesnt fit my new cover art style,&#xA;and that date is not working over top of the cover art text.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;plain&lt;/li&gt;&#xA;&lt;li&gt;cover art does not fit&lt;/li&gt;&#xA;&lt;li&gt;I am not digging the date on cover art that also has text&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;colors&#34;&gt;Colors &lt;a href=&#34;#colors&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have been really into using a deep purple lately.  It is a neutral color that&#xA;does not get enough respect, i.e. it’s not used as frequently and kinda stands&#xA;out when used.&lt;/p&gt;&#xA;&lt;h3 id=&#34;how-i-pick-colors&#34;&gt;How I pick colors &lt;a href=&#34;#how-i-pick-colors&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;I am really bad at picking colors that go well together so for this I punt to&#xA;utilizing others who have a better eye for this.  I commonly used the&#xA;&lt;a href=&#34;https://instant-eyedropper.com/&#34; title=&#34;instant-eyedropper&#xA;website&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/instant-eyedropper.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/instant-eyedropper.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;instant-eyedropper&lt;/a&gt; desktop app to pick colors out of my text editor theme or colors that&#xA;&lt;a href=&#34;https://canva.com&#34; title=&#34;Canva&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/canva.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/canva.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;canva&lt;/a&gt; recommends.  Really just find soemthing that&#xA;seems to match up with your taste, goes well with a color that you want to&#xA;highlight or anything that inspires you.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/how-i-pick-colors.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/how-i-pick-colors.gif&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;tweaking-colors&#34;&gt;Tweaking colors &lt;a href=&#34;#tweaking-colors&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Once I get a couple of colors working well together its very common that I need&#xA;to tweak them slightly.  Generally I hold the hue and change only the&#xA;saturation and lightness.  It would probably make more sense for me to use&#xA;hsla, but for some reason I always end up with a messy pallet trying to use&#xA;numbers.  I typically just google color picker and use the one built into&#xA;google search.  There are probably ones built into vscode now, but I have been&#xA;doing this for years now.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/how-i-adjust-colors.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/how-i-adjust-colors.gif&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;gradient-editor&#34;&gt;Gradient editor &lt;a href=&#34;#gradient-editor&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I heavily used &lt;a href=&#34;https://cssgradient.io/&#34; title=&#34;https://cssgradient.io/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/cssgradient.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/cssgradient.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cssgradient.io/&lt;/a&gt; to tweak in all of the very subtle gradients it was&#xA;very common for me to put the same color on both sides and slightly pulling the&#xA;color a bit darker or lighter until I liked the look.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/how-i-create-gradients.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/how-i-create-gradients.gif&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;matching-gradients&#34;&gt;Matching Gradients &lt;a href=&#34;#matching-gradients&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;I had a couple of places that needed to but up gradients against each other&#xA;seemlessly.  I am sure there are better ways to do it.  I would likerally take&#xA;instant eyedropper, get the color right on the border, then plug that into&#xA;cssgradient.io.&lt;/p&gt;&#xA;&lt;h2 id=&#34;progress&#34;&gt;Progress &lt;a href=&#34;#progress&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;So far I have swapped out my card colors, and some of the text colors.  I also&#xA;moved the date off of the cover image as I have been putting text on my cover&#xA;images since starting to cross post to dev.to.  I did not like how they clashed&#xA;and moved the text.   I also swapped over from gatsby fixed and gatsby fluid to&#xA;make sure that the cover art always fits the card correctly.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;![](&lt;a href=&#34;https://images.waylonwalker.com/2020-02-15&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/images.waylonwalker.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/images.waylonwalker.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://images.waylonwalker.com/2020-02-15&lt;/a&gt; 09-36-31_Start.png)&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;feeling-inspired&#34;&gt;Feeling Inspired &lt;a href=&#34;#feeling-inspired&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Having gradients everywhere has been becoming very popular again.  Not the&#xA;heavy highly saturated gradients from 00’s presentation software. Gentle barely&#xA;noticeable gradients, and soft gradients that flow smoothly from one color to&#xA;the next.  So many splash screens and logos include these now.&lt;/p&gt;&#xA;&lt;p&gt;I have been really inspired by the &lt;strong&gt;sick&lt;/strong&gt; lighting that has been hot on youtube and twitch lately.  As I was gearing up to re-design my cards I saw this post by &lt;a href=&#34;https://twitter.com/chrisbiscardi&#34; title=&#34;@chrisbiscardi on twitter&#34;&gt;@chrisbiscardi&lt;/a&gt; and knew right then that I needed to do a similar lighting effect on my redesign!  This was literally my jumping off point at which I started the re-design.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/inspiration-for-new-post-card-2020-Chris-Biscardi.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/inspiration-for-new-post-card-2020-Chris-Biscardi.png&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;shadows&#34;&gt;Shadows &lt;a href=&#34;#shadows&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;For this step I did not use any tooling, though I found some that could have&#xA;been helpful later.  I literally just started stacking up different colors of&#xA;box shadow, pulling a big blur, shifting them around, and adjusting the color&#xA;opacity until everything looks just right.  Again I went really subtle here,&#xA;comparing back to Chris’s backdrop I am a bit more subtle than even that.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;box-shadow&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nt&#34;&gt;-8rem&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;-6rem&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;8rem&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;-6rem&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;rgba&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;253&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;221&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;88&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nt&#34;&gt;4rem&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;8rem&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;rgba&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;88&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;82&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;185&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;2rem&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;2rem&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;1rem&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;rgba&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;complete-format&#34;&gt;Complete format &lt;a href=&#34;#complete-format&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/new-post-card-2020.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/new-post-card-2020.png&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;a-few-days-too-late&#34;&gt;A few days too late &lt;a href=&#34;#a-few-days-too-late&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;A few days later I saw this thread of tweets by&#xA;&lt;a href=&#34;https://twitter.com/sarah_edo&#34;&gt;@sarah_edo&lt;/a&gt; and&#xA;&lt;a href=&#34;https://twitter.com/swyx&#34;&gt;&lt;/a&gt;&lt;a href=&#34;https://www.swyx.io&#34; class=&#34;mention  has-avatar has-avatar-before&#34; data-name=&#34;swyx&#34; data-bio=&#34;The official site of Shawn @swyx Wang, a technologist and recovering finance geek.&#34; data-avatar=&#34;https://www.swyx.io/swyx-ski.jpeg&#34; data-handle=&#34;@swyx&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.swyx.io.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.swyx.io.png&#34;&gt;@swyx&lt;/a&gt; and realized that this style is called&#xA;&lt;strong&gt;neomorphism&lt;/strong&gt;.  There are some sweet tools referenced here, check&#xA;the&lt;a href=&#34;https://images.waylonwalker.com/2020-rebrand-1.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/2020-rebrand-1.png&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;m out if you are&#xA;going for this design style.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://twitter.com/sarah_edo/status/1227694049118679040?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1227694049118679040&amp;amp;ref_url=http%3A%2F%2F127.0.0.1%3A5500%2Findex.html&#34; title=&#34;neomorphism.io tweet from Sarah Drasner&#34;&gt;![](https://images.waylonwalker.com/2020-02-15 11-05-55_Microsoft Text Input Application.png)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://twitter.com/swyx/status/1227697956587032576&#34; title=&#34;follow up list of resources from Shawn swyx Wang&#34;&gt;![](https://images.waylonwalker.com/2020-02-15 11-06-16_Start.png)&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;tool-links&#34;&gt;Tool Links &lt;a href=&#34;#tool-links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Links to all of the tools referenced in this article.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://instant-eyedropper.com/&#34; title=&#34;instant-eyedropper&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/instant-eyedropper.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/instant-eyedropper.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://instant-eyedropper.com/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://cssgradient.io/&#34; title=&#34;https://cssgradient.io/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/cssgradient.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/cssgradient.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cssgradient.io/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://neumorphism.io/&#34; title=&#34;https://neumorphism.io/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/neumorphism.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/neumorphism.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://neumorphism.io/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/sw-yx/spark-joy/blob/master/README.md#pure-css-tricks&#34; title=&#34;https://github.com/sw-yx/spark-joy/blob/master/README.md#pure-css-tricks&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/sw-yx/spark-joy/blob/master/README.md#pure-css-tricks&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://t.co/EFSSIiSrFj?amp=1&#34; title=&#34;https://card.surge.sh/&#34;&gt;card.surge.sh&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://t.co/0yyw6wMuGO?amp=1&#34; title=&#34;https://brumm.af/shadows&#34;&gt;brumm.af/shadows&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://t.co/tQ9NijDzUI?amp=1&#34; title=&#34;https://components.ai/box-shadows&#34;&gt;components.ai/box-shadows&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;shameless-&#34;&gt;Shameless 🔌 &lt;a href=&#34;#shameless-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I just started a newsletter&#xA;&lt;a href=&#34;https://emailoctopus.com/lists/b194a4af-9875-11ea-a3d0-06b4694bee2a/forms/subscribe&#34; title=&#34;https://waylonwalker.com/newsletter/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/emailoctopus.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/emailoctopus.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Join-Here&lt;/a&gt; and lets start the discussion.  I want&#xA;to know about my audience and what they want to hear about from me.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>I just added react-headroom to my site</title>
    <id>https://waylonwalker.com/react-headroom/</id>
    <updated>2020-02-11T12:57:00Z</updated>
    <published>2020-02-11T12:57:00Z</published>
    <link href="https://waylonwalker.com/react-headroom/" rel="alternate" type="text/html"></link>
    <summary type="text">It was so easy to get a professional looking navbar with just 3 lines of code. This package seriously is so usable on mobile it is ridiculous. I found this...</summary>
    <content type="html">&lt;p&gt;It was so easy to get a professional looking navbar with just 3 lines of code.&#xA;This package seriously is so usable on mobile it is ridiculous.  I found this&#xA;package from&#xA;&lt;a href=&#34;https://www.gatsbyjs.org/blog/100days/react-component/?utm_campaign=100%20Days%20of%20Gatsby&amp;amp;utm_source=hs_email&amp;amp;utm_medium=email&amp;amp;utm_content=82376619&amp;amp;_hsenc=p2ANqtz-_DBh1A1A-GEy2TujddXq_H1de5wGZ_X6jIqB2wv_PE7QgUk40pfi64jbSVHv-S3bfzKZOQywtoTuup2aeO0o_KpeiF8w&amp;amp;_hsmi=82376619&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.gatsbyjs.org.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.gatsbyjs.org.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;day-4&lt;/a&gt;&#xA;of the 100 days of gatsby challenge.  It is by the wonderful man who brought us&#xA;gatsbyjs Kyle Mathews, so you know its gotta be good.&lt;/p&gt;&#xA;&lt;h2 id=&#34;install-react-headroom&#34;&gt;install react-headroom &lt;a href=&#34;#install-react-headroom&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;installation is easy&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm i react-headroom&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;import-headroom&#34;&gt;Import Headroom &lt;a href=&#34;#import-headroom&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There was no instructions for es6 style imports that are common with gatsbyjs&#xA;sites like mine, but it was intuitive to figure out.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Headroom&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;react-headroom&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;using-headroom&#34;&gt;Using Headroom &lt;a href=&#34;#using-headroom&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Simply wrap your existing content, Nav in my case, with the &lt;code&gt;&amp;lt;Headroom /&amp;gt;&lt;/code&gt;&#xA;component and your off to the races.  The content will pop back into view when&#xA;you scroll past then back up.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;Headroom&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;--&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;Your&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;content&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;goes&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;here&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;Headroom&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;see-it-in-action&#34;&gt;See it in action &lt;a href=&#34;#see-it-in-action&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I think this simple package completely changes the ux of your site on mobile.&#xA;You can get that sticky nav out of the way, but its still right there with just&#xA;a little bit of a scroll up.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/react-headroom-b.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/react-headroom-b.gif&#34; alt=&#34;showing it in action on waylonwalker.com&#34;/ data-glightbox=&#34;description: showing it in action on waylonwalker.com&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Here it is on &lt;a href=&#34;https://waylonwalker.com&#34;&gt;waylonwalker.com&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;configurable&#34;&gt;Configurable &lt;a href=&#34;#configurable&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;react-headroom&lt;/code&gt; is configurable, but I did not find it necessary.  I really&#xA;like the simplicity that it brought by just adding the &lt;code&gt;&amp;lt;Headroom\&amp;gt;&lt;/code&gt; component.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/react-headroom-docs.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/react-headroom-docs.png&#34; alt=&#34;react-headroom docs&#34;/ data-glightbox=&#34;description: react-headroom docs&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;links&#34;&gt;Links &lt;a href=&#34;#links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Check out the relavant links for more details.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href=&#34;https://github.com/KyleAMathews/react-headroom&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/KyleAMathews/react-headroom&lt;/a&gt;&#xA;&lt;strong&gt;Demo Site&lt;/strong&gt;: &lt;a href=&#34;https://kyleamathews.github.io/react-headroom/&#34;&gt;https://kyleamathews.github.io/react-headroom/&lt;/a&gt;&#xA;&lt;strong&gt;Docs&lt;/strong&gt;: &lt;a href=&#34;https://kyleamathews.github.io/react-headroom/&#34;&gt;https://kyleamathews.github.io/react-headroom/&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Serverless things to investigate</title>
    <id>https://waylonwalker.com/serverless-things-to-investigate/</id>
    <updated>2020-02-10T15:00:00Z</updated>
    <published>2020-02-10T15:00:00Z</published>
    <link href="https://waylonwalker.com/serverless-things-to-investigate/" rel="alternate" type="text/html"></link>
    <summary type="text">Free - only one step is free - can take rss to social</summary>
    <content type="html">&lt;h2 id=&#34;social-automation&#34;&gt;Social Automation &lt;a href=&#34;#social-automation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;zappier&#34;&gt;Zappier &lt;a href=&#34;#zappier&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Free&lt;/li&gt;&#xA;&lt;li&gt;only one step is free&lt;/li&gt;&#xA;&lt;li&gt;can take rss to social&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;automateio&#34;&gt;Automate.io &lt;a href=&#34;#automateio&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;form-submission&#34;&gt;Form submission &lt;a href=&#34;#form-submission&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://getform.io/&#34; title=&#34;https://getform.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/getform.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/getform.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://getform.io&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Free to get started&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://formkeep.com/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/formkeep.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/formkeep.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://formkeep.com/?#pricing&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Free 7 day trial $4.99 cheapest after&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>I finally fixed my Styled-Components in gatsby.js</title>
    <id>https://waylonwalker.com/fix-styled-components-in-gatsby/</id>
    <updated>2020-02-08T15:07:00Z</updated>
    <published>2020-02-08T15:07:00Z</published>
    <link href="https://waylonwalker.com/fix-styled-components-in-gatsby/" rel="alternate" type="text/html"></link>
    <summary type="text">I finally fixed my Styled-Components in gatsby.js. I am starting a redesign of my website. I have started cross posting to dev.to more regularly. With that I...</summary>
    <content type="html">&lt;p&gt;I finally fixed my Styled-Components in gatsby.js. I am starting a redesign of&#xA;my website.  I have started cross posting to &lt;a href=&#34;https://dev.to&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/dev.to.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/dev.to.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dev.to&lt;/a&gt; more&#xA;regularly.  With that I have been making more detailed cover images at the&#xA;recommended &lt;code&gt;1000x420&lt;/code&gt;.  These images get cut off on my own site, which is a&#xA;bit ridiculous to have my own content not look right on my own site.  But&#xA;before we start a heavy redesign I have a small issue that has plagued the site&#xA;for at least a year!&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I have a small issue that has plagued the site for at least a year!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I have been using styled components in my gatsby.js site for about a year now.  And it has been plagued by styled-components not being in the ssr causing some jank in the styles being loaded.  You can see it in the lighthouse performance report below.  It generally loads super quick, and is only caused on first load.  Anything using the gatsby &lt;code&gt;&amp;lt;Link/&amp;gt;&lt;/code&gt; component typically is fine and unaffected by the issue.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-fix&#34;&gt;The fix &lt;a href=&#34;#the-fix&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The fix was so simple it was only 2 lines total. One to install &lt;code&gt;gatsby-plugin-styled-components&lt;/code&gt; and one to use it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm i gatsby-plugin-styled-components&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;plugins:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;err&#34;&gt;&amp;#39;gatsby-plugin-styled-components&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;before&#34;&gt;Before &lt;a href=&#34;#before&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/80cb807b-f84d-4649-88bd-44c5867b0352.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/80cb807b-f84d-4649-88bd-44c5867b0352.png&#34; alt=&#34;2020-02-06 15-27-45_Start.png&#34;/ data-glightbox=&#34;description: 2020-02-06 15-27-45_Start.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;after&#34;&gt;After &lt;a href=&#34;#after&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/7e38cf4c-e69c-4df3-b8f1-14aa023c9c38.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/7e38cf4c-e69c-4df3-b8f1-14aa023c9c38.png&#34; alt=&#34;2020-02-07 17-20-31_Start.png&#34;/ data-glightbox=&#34;description: 2020-02-07 17-20-31_Start.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;why-did-it-take-so-long-to-fix&#34;&gt;Why did it take so long to Fix? &lt;a href=&#34;#why-did-it-take-so-long-to-fix&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The real issue here was that I really didn’t understand the problem as I described it above until I found the fix. It really did seem random that at odd times the styles would seem to vanish.  Sometimes never fully rehydrating at all.  Well actually I had fixed some production sites at work with it, but had no idea why it worked and therefore could not remember how I had fixed it, and google searched yielded no help.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/the-moment-i-realized-the-true-problem-1.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/the-moment-i-realized-the-true-problem-1.png&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;After re-watching Wes Bos’s Advanced react course where he describes how to fix this issue for &lt;code&gt;next.js&lt;/code&gt; sites it became clear that the problem was not random at all.  It was that they do not get statically rendered and are only on the page after react is re-hydrated.  The moment I realized the &lt;strong&gt;true&lt;/strong&gt; problem I knew how to google it and quickly found there was a plugin for this.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ kedro-org kedro-community</title>
    <id>https://waylonwalker.com/kedro-org-kedro-community/</id>
    <updated>2020-02-07T18:48:59Z</updated>
    <published>2020-02-07T18:48:59Z</published>
    <link href="https://waylonwalker.com/kedro-org-kedro-community/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out kedro-org and their project kedro-community.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/kedro-org&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-org&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/kedro-org/kedro-community&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-community&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Examples of data science projects created with Kedro.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ kedro-org kedro-viz</title>
    <id>https://waylonwalker.com/kedro-org-kedro-viz/</id>
    <updated>2020-02-07T18:48:32Z</updated>
    <published>2020-02-07T18:48:32Z</published>
    <link href="https://waylonwalker.com/kedro-org-kedro-viz/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by kedro-viz from kedro-org.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/kedro-org/kedro-viz&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-viz&lt;/a&gt; from &lt;a href=&#34;https://github.com/kedro-org&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-org&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Visualise your Kedro data and machine-learning pipelines and track your experiments.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Should I switch to Zeit Now</title>
    <id>https://waylonwalker.com/should-i-switch-to-zeit-now/</id>
    <updated>2020-02-06T22:38:00Z</updated>
    <published>2020-02-06T22:38:00Z</published>
    <link href="https://waylonwalker.com/should-i-switch-to-zeit-now/" rel="alternate" type="text/html"></link>
    <summary type="text">Should I switch to Zeit Now. Netlify build times are starting to creep in.</summary>
    <content type="html">&lt;h2 id=&#34;netlify&#34;&gt;Netlify &lt;a href=&#34;#netlify&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have happily had my personal site &lt;a href=&#34;https://waylonwalker.com&#34;&gt;waylonwalker.com&lt;/a&gt; hosted on netlify for nearly 2 years now.  In fact I have hosted about a dozen different toy projects to play with on there, 4 of which have gone far enough to get a custom domain name.  They are fast to deploy and consistently do so on every &lt;code&gt;git push&lt;/code&gt; to main.&lt;/p&gt;&#xA;&lt;h2 id=&#34;zeit&#34;&gt;Zeit &lt;a href=&#34;#zeit&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have recently started playing with zeit again.  I really like their cli tool, its dead simple and makes sense.  I tried the netlify one early on and dont think I really gave it much of a chance. I was able to backup a site we were modifying by saving everything locally (literally control+s) and running &lt;code&gt;now&lt;/code&gt; in the command line.&lt;/p&gt;&#xA;&lt;p&gt;While I was on the site I realized that when switching to gatsby v2 I had deployed it to now.sh while testing, before cutting over to the updated one on netlify.  It has been building every version since without issue!&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It has been building every version since without issue!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;what-i-am-using&#34;&gt;What I am using &lt;a href=&#34;#what-i-am-using&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;gatsby&lt;/li&gt;&#xA;&lt;li&gt;forestry.io&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I am using gatsby to build my site, and I do use forestry.io as a cms to be able to edit/manage posts online.  I think forestry is part of my problem in that it has added extra builds.  Every time I upload an image or save a post, even a draft, it pushes to production.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-switch&#34;&gt;Why Switch &lt;a href=&#34;#why-switch&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is just a side hobby for me.  I do not make any $$ off of it, and I do not want to pay for anything I do not have to.  As I am stepping up my blogging I have already hit 50% of my build quota only 1 week into the month on netlify.  I really like what netlify is doing for the JAMstack community, but I would rather build everything locally and push to GHPages for this project than have to pay for it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-are-your-suggestions&#34;&gt;What Are your suggestions &lt;a href=&#34;#what-are-your-suggestions&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Do you use Zeit?&lt;/p&gt;&#xA;&lt;p&gt;Where do you host your gatsby.js site?&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>git push without setting upstream</title>
    <id>https://waylonwalker.com/git-push-without-setting-upstream/</id>
    <updated>2020-02-04T12:18:00Z</updated>
    <published>2020-02-04T12:18:00Z</published>
    <link href="https://waylonwalker.com/git-push-without-setting-upstream/" rel="alternate" type="text/html"></link>
    <summary type="text">Finally after years of hand typing out a full I found there is a setting to automatcally push to the current branch. More realisitically I just did a let git...</summary>
    <content type="html">&lt;p&gt;Finally after years of hand typing out a full &lt;code&gt;git push --upstream my_really_long_and_descriptive_branch_name&lt;/code&gt; I found there is a setting to&#xA;automatcally push to the current branch. More realisitically I just did a &lt;code&gt;git push&lt;/code&gt; let &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; yell at me, and copying the suggestion.&lt;/p&gt;&#xA;&lt;h2 id=&#34;git-config&#34;&gt;git config &lt;a href=&#34;#git-config&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config --global push.default current&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This one setting will now &lt;code&gt;git push&lt;/code&gt; to the current branch without yelling at&#xA;you that your upstream does not match your current branch.  This helps me ship&#xA;chnages faster as I am constantly chnaging projects and branches.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Out of Space</title>
    <id>https://waylonwalker.com/out-of-space/</id>
    <updated>2020-02-01T06:00:00Z</updated>
    <published>2020-02-01T06:00:00Z</published>
    <link href="https://waylonwalker.com/out-of-space/" rel="alternate" type="text/html"></link>
    <summary type="text">Out of Space! How to remove 65 conda environments in one command.</summary>
    <content type="html">&lt;p&gt;This morning I logged into my machine and was nearly out of space&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;64GB miniconda3!&lt;/li&gt;&#xA;&lt;li&gt;5GB conda cache&lt;/li&gt;&#xA;&lt;li&gt;4GM pip cache&lt;/li&gt;&#xA;&lt;li&gt;34GB docker&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;find-it&#34;&gt;Find it &lt;a href=&#34;#find-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/1214e7fb-6806-44cf-8712-c98685fb2e1d.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img src=&#34;https://dropper.waylonwalker.com/api/file/1214e7fb-6806-44cf-8712-c98685fb2e1d.png&#34; alt=&#34;screenshot-2025-02-12T22-32-14-298Z.png&#34; class=&#34;more-cinematic glightbox&#34;/ data-glightbox=&#34;description: screenshot-2025-02-12T22-32-14-298Z.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;These are the commands that I often use to reclaim space.  Its so easy to fill&#xA;up small vm’s in the cloud, or in my case today let your dev machine go way too&#xA;long without a good cleanup.&lt;/p&gt;&#xA;&lt;h3 id=&#34;show-remaining-space-on-drives&#34;&gt;Show Remaining Space on Drives &lt;a href=&#34;#show-remaining-space-on-drives&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;This shows us where to start and gives a baseline of how much space we have&#xA;reclaimed.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;df -h&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;show-largest-files-in-current-directory&#34;&gt;show largest files in current directory &lt;a href=&#34;#show-largest-files-in-current-directory&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Next keep drilling into directories that are big and running this command to&#xA;see whats big inside of it.  When you find somethign that you are willing to&#xA;part with &lt;code&gt;rm -rf &amp;lt;directory&amp;gt;&lt;/code&gt; it and check &lt;code&gt;df -h&lt;/code&gt; to see if you have enough&#xA;reclaimed yet.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;du . -h --max-depth&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Honestly I rarely bother unless the directory is in the GB’s of space.  A super&#xA;simple filter for that is to just grep for G.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;du . -h --max-depth&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep G&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;conda&#34;&gt;conda &lt;a href=&#34;#conda&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;how-many&#34;&gt;How Many? &lt;a href=&#34;#how-many&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;As a first baseline lets see how many enviroments we are starting with. I&#xA;started with 71. Yeah I have had this machine for 2 years, and dont regularly&#xA;remove them.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda info --envs &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tail -n +2 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; wc -l&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;bash&lt;/p&gt;&#xA;&lt;h3 id=&#34;lets-batch-it-out&#34;&gt;Lets batch it out &lt;a href=&#34;#lets-batch-it-out&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;We are devs here surely we can automate this issue! The following four lines&#xA;will generate a list of existing conda environments, edit them with vim, remove&#xA;the remaining ones, then remove the text file we created to remove from.&lt;/p&gt;&#xA;&lt;p&gt;Make sure that you only keep names of environments that you want to &lt;strong&gt;remove&lt;/strong&gt;&#xA;in &lt;code&gt;conda_envs_to_remove.txt&lt;/code&gt; and delete the environment names you want to&#xA;keep.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda info --envs &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tail -n +2 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; cut -d &lt;span class=&#34;s1&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt; -f1 &amp;gt; conda_envs_to_remove.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim conda_envs_to_remove.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat ~/.conda_envs_remove &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tr &lt;span class=&#34;s1&#34;&gt;&amp;#39;\n&amp;#39;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;\0&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -l -0 conda remove --all -y -n&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm conda_envs_to_remove.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;-side-note&#34;&gt;📝 Side note &lt;a href=&#34;#-side-note&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;When I am creating one of these complicated bash pipelines including xargs I&#xA;generally print out the command first and make sure that it does what I want.&#xA;The following command will test the above script before doing dangerous things!&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat ~/.conda_envs_remove &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tr &lt;span class=&#34;s1&#34;&gt;&amp;#39;\n&amp;#39;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;\0&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -l -0 &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;conda remove --all -y -n &amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;cache&#34;&gt;Cache &lt;a href=&#34;#cache&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If your feeling really strained for space, you can &lt;code&gt;rm -rf ~/.cache&lt;/code&gt;.&#xA;Personally I like the improved speed of installing everything… obviously I&#xA;install a lot of new environments.&lt;/p&gt;&#xA;&lt;h2 id=&#34;docker&#34;&gt;Docker &lt;a href=&#34;#docker&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/1c81ce90-4f54-4267-8bb4-88e708131803.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img src=&#34;https://dropper.waylonwalker.com/api/file/1c81ce90-4f54-4267-8bb4-88e708131803.png&#34; alt=&#34;screenshot-2025-02-12T22-35-00-679Z.png&#34; class=&#34;more-cinematic glightbox&#34;/ data-glightbox=&#34;description: screenshot-2025-02-12T22-35-00-679Z.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;For more information read this article,&#xA;&lt;a href=&#34;https://docs.docker.com/config/pruning/&#34; title=&#34;https://docs.docker.com/config/pruning/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/docs.docker.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/docs.docker.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://docs.docker.com/config/pruning/&lt;/a&gt;. I have all of the images that I&#xA;want pushed remotely so I just dumped everything with the following command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker system prune&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker system prune --volumes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Running these two sets of commands cleared up about &lt;strong&gt;70GB&lt;/strong&gt; of space for me&#xA;with very little effort on my behalf. I hope others find the first command&#xA;helpful to batch remove many conda environments at once.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>simple click</title>
    <id>https://waylonwalker.com/simple-click/</id>
    <updated>2020-01-29T06:00:00Z</updated>
    <published>2020-01-29T06:00:00Z</published>
    <link href="https://waylonwalker.com/simple-click/" rel="alternate" type="text/html"></link>
    <summary type="text">Add helpful cli to your python libraries... All of them!</summary>
    <content type="html">&lt;p&gt;cli tools are super handy and easy to add to your python libraries to supercharge them. Even if your library is not a cli tool there are a number of things that a cli can do to your library.&lt;/p&gt;&#xA;&lt;h2 id=&#34;example-ideas&#34;&gt;Example Ideas &lt;a href=&#34;#example-ideas&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Things a cli can do to enhance your library.&lt;/p&gt;&#xA;&lt;p&gt;🆚 print version&#xA;🕶 print readme&#xA;📝 print changelog&#xA;📃 print config&#xA;✏ change config&#xA;👩‍🎓 run a tutorial&#xA;🏗 scaffold a project with cookiecutter&lt;/p&gt;&#xA;&lt;h2 id=&#34;-clickhttpsclickpalletsprojectscom&#34;&gt;🖱 &lt;a href=&#34;https://click.palletsprojects.com/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/click.palletsprojects.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/click.palletsprojects.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Click&lt;/a&gt; &lt;a href=&#34;#-clickhttpsclickpalletsprojectscom&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://click.palletsprojects.com/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/click.palletsprojects.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/click.palletsprojects.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Click&lt;/a&gt; is the most popular python cli tool framework for python. There are others, some old, some new comers that make take the crown. For now &lt;a href=&#34;https://click.palletsprojects.com/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/click.palletsprojects.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/click.palletsprojects.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Click&lt;/a&gt; is the gold standard if you want to make a powerful cli quickly. If you are dependency conscious and dont need a lot of tooling, use &lt;a href=&#34;https://docs.python.org/3/library/argparse.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/docs.python.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/docs.python.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;argparse&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;project-structure&#34;&gt;Project Structure &lt;a href=&#34;#project-structure&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre&gt;&lt;code&gt;.&#xA;├── setup.py&#xA;└── simple_click&#xA;    ├── cli.py&#xA;    └── __init__.py&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;-clipy&#34;&gt;❯ cli.py &lt;a href=&#34;#-clipy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# simple_click/cli.py&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;click&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;__version__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;1.0.0&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@click.group&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;cli&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;pass&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@cli.command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;prints project version&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;click&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__version__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;vm&#34;&gt;__name__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;cli&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;-initpy&#34;&gt;✨ &lt;strong&gt;init&lt;/strong&gt;.py &lt;a href=&#34;#-initpy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;For our simple_click library &lt;code&gt;__init__.py__&lt;/code&gt; can be left empty. It is here purely to signify that simple_click is a library. It is likely that you will import other modules here that need to reside at the top level of your library api, your cli does not need to be at the top of of your api.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# __init__.py&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;-entry-points&#34;&gt;🚪 Entry Points &lt;a href=&#34;#-entry-points&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Entry points are the magic that make python cli tools available as their own command without having python before it or the file extension.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# setup.py&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;setuptools&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;setup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;find_packages&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# this is the 🥩 meat of this snippet&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# simple_click is the command name&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# = simple_click is the library name&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# .cli is the cli.py file&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# :cli is the cli function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# the second item is a shorthand alias to the main command&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;entry_points&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;s2&#34;&gt;&amp;#34;simple_click = simple_click.cli:cli&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;s2&#34;&gt;&amp;#34;scli         = simple_click.cli:cli&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;setup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;simple_click&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;1.0.0&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https://github.com/mypackage.git&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;packages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;find_packages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;entry_points&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;console_scripts&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;entry_points&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;-see-it-in-action&#34;&gt;🕶 See it in action &lt;a href=&#34;#-see-it-in-action&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/simple_click3.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/simple_click3.gif&#34; alt=&#34;Simple-click-in-action&#34;/ data-glightbox=&#34;description: Simple-click-in-action&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;-discuss&#34;&gt;📢 Discuss &lt;a href=&#34;#-discuss&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;What do You wish more python libraries included in their cli?  &lt;a href=&#34;https://twitter.com/intent/tweet?text=@_waylonwalker%20More%20libraries%20should%20...%0A%0Awaylonwalker.com/b/scli&#34;&gt;Tweet it @_waylonwalker&lt;/a&gt;&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://twitter.com/intent/tweet?text=@_waylonwalker%20More%20libraries%20should%20...%0A%0Awaylonwalker.com/b/scli&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://twitter.com/intent/tweet?text=@_waylonwalker%20More%20libraries%20should%20...%0A%0Awaylonwalker.com/b/scli&#34; alt=&#34;Tweet it @_waylonwalker&#34;/ data-glightbox=&#34;description: Tweet it @_waylonwalker&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Personal URL shortener with Netlify Redirects</title>
    <id>https://waylonwalker.com/personal-url-shortener/</id>
    <updated>2020-01-29T06:00:00Z</updated>
    <published>2020-01-29T06:00:00Z</published>
    <link href="https://waylonwalker.com/personal-url-shortener/" rel="alternate" type="text/html"></link>
    <summary type="text">Personal URL shortener with Netlify Redirects</summary>
    <content type="html">&lt;p&gt;I love using URL shorteners to easily share links without hitting character&#xA;limits, but they loose their meaning. Services like bit.ly will save my links&#xA;for me so that I can find them, but I would rather them to be easy to remember.&#xA;&lt;a href=&#34;https://bit.ly/2ruLwQz&#34; title=&#34;https://bit.ly/2ruLwQz&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/bit.ly.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/bit.ly.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://bit.ly/2ruLwQz&lt;/a&gt; does&#xA;not roll of the tongue so well.&lt;/p&gt;&#xA;&lt;h2 id=&#34;301-&#34;&gt;301 🤸‍♀️ &lt;a href=&#34;#301-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I recently discovered a really cool feature of netlify that I have always looked past, &lt;code&gt;_redirects&lt;/code&gt;. It is so simple cool and powerful, every netlify site should do this!&lt;/p&gt;&#xA;&lt;h2 id=&#34;but-how-&#34;&gt;But how 🤷‍♀️ &lt;a href=&#34;#but-how-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;simply add a &lt;code&gt;_redirects&lt;/code&gt; file to the root of your your published site with the following format. The trick I found with my gatsby site was that it needed to be in my static directory &lt;code&gt;/static/_redirects&lt;/code&gt;, not root. Next you just put space separated links on separate lines. #’s can be used for comments.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;# netlify redirects&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;# from_url to_url&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;# Short-Blog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/blog/scli         /blog/simple-click/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/blog/cmdt         /blog/cmd-exe-tips/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;# splats&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/b*             /blog/:splat&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/n*             /notes/:splat&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;# External&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/twitter        https://twitter.com/_WaylonWalker&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/github         https://github.com/WaylonWalker&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/devto          https://dev.to/waylonwalker/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;-share-those-short-links&#34;&gt;🙌 Share those short links &lt;a href=&#34;#-share-those-short-links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now with shorter links we have more space for our content without needing to use a service like bit.ly that makes our links unreadable.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;![url shortener](&lt;a href=&#34;https://images.waylonwalker.com/URL&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/images.waylonwalker.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/images.waylonwalker.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://images.waylonwalker.com/URL&lt;/a&gt; shortener.png)&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ szsdk quick</title>
    <id>https://waylonwalker.com/szsdk-quick/</id>
    <updated>2020-01-28T16:50:39Z</updated>
    <published>2020-01-28T16:50:39Z</published>
    <link href="https://waylonwalker.com/szsdk-quick/" rel="alternate" type="text/html"></link>
    <summary type="text">szsdk has done a fantastic job with quick. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/szsdk&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;szsdk&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/szsdk/quick&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;quick&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;A real QUICK Qt5 based gUI generator for ClicK&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>cmd.exe tips</title>
    <id>https://waylonwalker.com/cmd-exe-tips/</id>
    <updated>2020-01-23T15:18:45Z</updated>
    <published>2020-01-23T15:18:45Z</published>
    <link href="https://waylonwalker.com/cmd-exe-tips/" rel="alternate" type="text/html"></link>
    <summary type="text">cmd.exe tips</summary>
    <content type="html">&lt;p&gt;I spend a lot of my time at the terminal for my daily work, mostly in Linux or wsl.  One big reason for using wsl over cmd.exe is the ease of walking through history that fzf provides.  This week we had a windows bug in a cli and I was stuck in vanilla cmd.exe 😭&lt;/p&gt;&#xA;&lt;h2 id=&#34;-cmder&#34;&gt;&amp;gt; Cmder &lt;a href=&#34;#-cmder&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/main.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/main.png&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;First off if you are stuck using cmd.exe, do yourself a favor and get cmder.  It makes life just a bit easier.  It is super confugurable and comes with several power ups that make it a bit more enjoyable than cmd.exe.&lt;/p&gt;&#xA;&lt;h2 id=&#34;history&#34;&gt;History &lt;a href=&#34;#history&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;F7&lt;/strong&gt; - Scroll through history&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;F8&lt;/strong&gt; - Search history based&lt;/p&gt;&#xA;&lt;h2 id=&#34;example&#34;&gt;Example &lt;a href=&#34;#example&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/cmd_exe_history_2.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/cmd_exe_history_2.gif&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;bat&#34;&gt;.bat &lt;a href=&#34;#bat&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The next simple technique is to save your commands into a .bat file. Any valid command ran with cmd.exe can be saved into a bat file and called again later by running it in the terminal.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;save your command&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;use f7/f8 to get your command back add &lt;code&gt;&amp;gt; filename.bat&lt;/code&gt; at the end, hit the home key and add echo to the front.  &lt;strong&gt;Do not&lt;/strong&gt; wrap with quotes.  This is not bash.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; python cmd_example.py &amp;gt; cmd_example.bat&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;» append&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; python cmd_example2.py &amp;gt;&amp;gt; cmd_example.bat&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;type-not-cat&#34;&gt;type not cat &lt;a href=&#34;#type-not-cat&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;To ensure that you got the command right… and didn’t forget that you were in cmd.exe instead of bash and add quotes. you will want to see the file contents. For this reach for &lt;strong&gt;type&lt;/strong&gt; not &lt;strong&gt;cat&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;type&lt;/span&gt; cmd_example.bat&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;results&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python cmd_example.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python cmd_example2.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;your-quick-tips&#34;&gt;Your quick tips &lt;a href=&#34;#your-quick-tips&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;let me know what quick cmd.exe tips you have.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://twitter.com/intent/tweet?text=@waylonwalker%20my%20favorite%20cmd.exe%20tip%20is%20...%20https%3A//waylonwalker.com/blog/cmd-exe-tips/&#34; title=&#34;tweet your tip&#34;&gt;![tweet your tip](https://images.waylonwalker.com/2020-01-27 06-32-34_Microsoft Text Input Application.png “tweet your tip”)&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ wfxr forgit</title>
    <id>https://waylonwalker.com/wfxr-forgit/</id>
    <updated>2020-01-22T13:23:07Z</updated>
    <published>2020-01-22T13:23:07Z</published>
    <link href="https://waylonwalker.com/wfxr-forgit/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on forgit, created by wfxr.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/wfxr/forgit&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;forgit&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/wfxr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;wfxr&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;💤 A utility tool powered by fzf for using &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; interactively.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ grantjenks python-c2f</title>
    <id>https://waylonwalker.com/grantjenks-python-c2f/</id>
    <updated>2020-01-19T13:15:53Z</updated>
    <published>2020-01-19T13:15:53Z</published>
    <link href="https://waylonwalker.com/grantjenks-python-c2f/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about python-c2f, an amazing project by grantjenks. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/grantjenks/python-c2f&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;python-c2f&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/grantjenks&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;grantjenks&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Cython for All with GitHub Actions&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ wesbos beginner-javascript</title>
    <id>https://waylonwalker.com/wesbos-beginner-javascript/</id>
    <updated>2020-01-13T19:54:42Z</updated>
    <published>2020-01-13T19:54:42Z</published>
    <link href="https://waylonwalker.com/wesbos-beginner-javascript/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out wesbos and their project beginner-javascript.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/wesbos&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;wesbos&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/wesbos/beginner-javascript&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;beginner-javascript&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Slam Dunk JavaScript&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ brillout awesome-react-components</title>
    <id>https://waylonwalker.com/brillout-awesome-react-components/</id>
    <updated>2020-01-12T14:49:08Z</updated>
    <published>2020-01-12T14:49:08Z</published>
    <link href="https://waylonwalker.com/brillout-awesome-react-components/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on awesome-react-components, created by brillout.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/brillout/awesome-react-components&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;awesome-react-components&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/brillout&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;brillout&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Curated List of React Components &amp;amp; Libraries.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>What is something you should have learned or understood earlier?</title>
    <id>https://waylonwalker.com/learn-early/</id>
    <updated>2020-01-10T06:00:00Z</updated>
    <published>2020-01-10T06:00:00Z</published>
    <link href="https://waylonwalker.com/learn-early/" rel="alternate" type="text/html"></link>
    <summary type="text">What is something that you recently learned that you wish you would have learned or understood earlier?</summary>
    <content type="html">&lt;p&gt;Mine is the python debugger. I was a long holdout thinking that print statements were sufficient. That was untill I started having errors crop up in functions that took minutes to run. The thing that I most notably wish I would have known about is post_mortem.&lt;/p&gt;&#xA;&lt;h2 id=&#34;example&#34;&gt;Example &lt;a href=&#34;#example&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre&gt;&lt;code&gt;[ins] In [4]: def repeater(msg, repeats=1):&#xA;         ...:     &amp;#34;repeats messages {repeats} number of times&amp;#34;&#xA;         ...:     print(f&amp;#39;{msg}\n&amp;#39; * repeats)&#xA;&#xA;[ins] In [5]: repeater(&amp;#39;hi&amp;#39;, 3)&#xA;hi&#xA;hi&#xA;hi&#xA;&#xA;[ins] In [6]: repeater(&amp;#39;hi&amp;#39;, &amp;#39;a&amp;#39;)&#xA;---------------------------------------------------------------------------&#xA;TypeError                                 Traceback (most recent call last)&#xA;&amp;lt;ipython-input-6-0ec595774c81&amp;gt; in &amp;lt;module&amp;gt;&#xA;----&amp;gt; 1 repeater(&amp;#39;hi&amp;#39;, &amp;#39;a&amp;#39;)&#xA;&#xA;&amp;lt;ipython-input-4-530890de75cd&amp;gt; in repeater(msg, repeats)&#xA;      1 def repeater(msg, repeats=1):&#xA;      2     &amp;#34;repeats messages {repeats} number of times&amp;#34;&#xA;----&amp;gt; 3     print(f&amp;#39;{msg}\n&amp;#39; * repeats)&#xA;      4&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h1 id=&#34;debug-with-ipythonjupyter&#34;&gt;Debug with iPython/Jupyter&lt;/h1&gt;&#xA;&lt;pre&gt;&lt;code&gt;%debug&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;vanilla-debug&#34;&gt;Vanilla Debug &lt;a href=&#34;#vanilla-debug&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre&gt;&lt;code&gt;import pdb&#xA;import sys&#xA;&#xA;pdb.post_mortem(sys.last_traceback)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;more&#34;&gt;More &lt;a href=&#34;#more&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;For more information about the debugger checkout the real python article. &lt;a href=&#34;https://realpython.com/python-debugging-pdb/&#34; title=&#34;https://realpython.com/python-debugging-pdb/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/realpython.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/realpython.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://realpython.com/python-debugging-pdb/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Also keep a bookmark of the table of pdb commands from the article &lt;a href=&#34;https://realpython.com/python-debugging-pdb/#essential-pdb-commands&#34; title=&#34;https://realpython.com/python-debugging-pdb/#essential-pdb-commands&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/realpython.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/realpython.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://realpython.com/python-debugging-pdb/#essential-pdb-commands&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;debug-session&#34;&gt;Debug Session&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://res.cloudinary.com/practicaldev/image/fetch/s--ShQ3NN06--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/1tnri6wdwimwk7i83cvg.png&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://res.cloudinary.com/practicaldev/image/fetch/s--ShQ3NN06--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/1tnri6wdwimwk7i83cvg.png&#34; alt=&#34;debug session&#34;/ data-glightbox=&#34;description: debug session&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Supercharge Zsh Startup</title>
    <id>https://waylonwalker.com/supercharge-zsh-startup/</id>
    <updated>2020-01-03T06:00:00Z</updated>
    <published>2020-01-03T06:00:00Z</published>
    <link href="https://waylonwalker.com/supercharge-zsh-startup/" rel="alternate" type="text/html"></link>
    <summary type="text">I have been using oh-my-zsh successfully for about 2 years now. But lately my startup time has been really bothersome. It has grown to the point where it was...</summary>
    <content type="html">&lt;p&gt;I have been using oh-my-zsh successfully for about 2 years now. But lately my&#xA;startup time has been really bothersome. It has grown to the point where it was&#xA;taking about &lt;strong&gt;5.5s&lt;/strong&gt; to startup a shell!  This is ok if I am going to spend&#xA;some time in here for awhile and do some work that benefits from all of the&#xA;autocompletions, plugins, and shortcuts that oh-my-zsh brings.  But to only&#xA;jump in to run a handful of commands is infuriating.&lt;/p&gt;&#xA;&lt;h3 id=&#34;-my-setup&#34;&gt;📑 My Setup &lt;a href=&#34;#-my-setup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;I believe the real issue is io speed on wsl.  I have some remote servers with&#xA;similar configs that are 10x faster or more, loading in 100s of milliseconds&#xA;rather than seconds.  Sourcing all of the individual plugin files are just too&#xA;much for it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;-how-fast-can-it-be&#34;&gt;💨 How Fast can it be &lt;a href=&#34;#-how-fast-can-it-be&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Quick side note: your zsh config is controled by your ~/.zshrc file.  This&#xA;file can source other files, load plugins, or run literally anything.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Time the &lt;strong&gt;initial&lt;/strong&gt; time&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;time&lt;/span&gt; zsh -c &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Move your &lt;strong&gt;~/.zshrc&lt;/strong&gt; config file.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv ~/.zshrc ~/.zshrc-back&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Time the fastest startup possible with nothing in your &lt;strong&gt;~/.zshrc&lt;/strong&gt; config file.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;time&lt;/span&gt; zsh -c &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Move your &lt;strong&gt;~/.zshrc&lt;/strong&gt; back&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv ~/.zshrc-back ~/.zshrc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;profile-your-startup-time&#34;&gt;🕵️‍♂️Profile your startup time &lt;a href=&#34;#profile-your-startup-time&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It is possible to profile your zsh startup time by adding &lt;code&gt;zmodload zsh/zprof&lt;/code&gt;&#xA;to the start of your &lt;code&gt;~/.zshrc&lt;/code&gt; file and &lt;code&gt;zprof&lt;/code&gt; at the end.  This was&#xA;unsuccessfull for me.  I ended up just backing up &lt;code&gt;~/.zshrc&lt;/code&gt; file, then&#xA;deleting half of it to see where the hot spots were.  I found that two places&#xA;that were really hot for me.  One I was inadvertantly setting &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; and npm&#xA;settings everytime that didn’t need to be set everytime.  That was an easy 2s&#xA;gain.  Another easy 3s gain was removing oh-my-zsh.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ~/.zshrc&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;zmodload zsh/zprof&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;..&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;zprof&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;but-i-really-like-oh-my-zsh&#34;&gt;😭But I really like oh-my-zsh &lt;a href=&#34;#but-i-really-like-oh-my-zsh&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;without all the bells and whistle that oh-my-zsh provided zsh became lightning fast to load, but incredibly boring.  It was also very painful to manually type out everything that it autocompleted or aliased all the time.  Next I headed down a path to get all of that functionality back without sacrificing load time.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Without oh-my-zsh, zsh became incredibly boring.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;-plugin-managers&#34;&gt;🔌 Plugin Managers &lt;a href=&#34;#-plugin-managers&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/steve-johnson-ZUabNmumOcA-unsplash.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/steve-johnson-ZUabNmumOcA-unsplash.jpg&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Photo by &lt;a href=&#34;https://unsplash.com/@steve_j?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/unsplash.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/unsplash.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Steve Johnson&lt;/a&gt; on &lt;a href=&#34;https://unsplash.com/s/photos/plug?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/unsplash.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/unsplash.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;oh-my-zsh&lt;/li&gt;&#xA;&lt;li&gt;zplugin&lt;/li&gt;&#xA;&lt;li&gt;zgen&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;There are a number of plugin managers for zsh, I tried each of the ones listed above, but found that as I approached a nice setup that I liked the load time would creep up &lt;strong&gt;above the 2s&lt;/strong&gt; &lt;strong&gt;mark&lt;/strong&gt; each time. I would turn certain plugins on and off, try different plugin managers, before realizing that I had spent enough time on this problem and it was going to be time to settle on fast startup or functionality.&lt;/p&gt;&#xA;&lt;h2 id=&#34;-finding-balance&#34;&gt;⚖ Finding Balance &lt;a href=&#34;#-finding-balance&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Semi-lazy loading&lt;/em&gt;&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/jeppe-hove-jensen-b3eaH1hguOA-unsplash.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/jeppe-hove-jensen-b3eaH1hguOA-unsplash.jpg&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Photo by Jeppe Hove Jensen on &lt;a href=&#34;https://unsplash.com/s/photos/balance?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/unsplash.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/unsplash.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;After struggling to get all of the features I wanted with a fast load time, I decided to only load what I needed upon startup.  Next I created a simple alias that loads in zgen and all of the plugins I want. By doing this I get two main benefits.  Obviously I get a faster starup time by loading less.  I got my startup time down to about 0.25s.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ~/.zshrc&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;p &lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;zgen load zsh-users/zsh-autosuggestions&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;....&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;..&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;-fast-loading&#34;&gt;⚡ Fast Loading &lt;a href=&#34;#-fast-loading&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;I really like the fast startup time, because sometimes I am only loading up zsh to run a handful of commands that dont need much in the way of plugins&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;simple commands that need 💨 blazing start speed&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;any single easy to type command, these are my common commands that I will open a terminal in my editor and just need to run quick.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;vim&lt;/li&gt;&#xA;&lt;li&gt;git add . &amp;amp;&amp;amp; git commit &amp;amp;&amp;amp; git push&lt;/li&gt;&#xA;&lt;li&gt;sh my_script.sh&lt;/li&gt;&#xA;&lt;li&gt;make build&lt;/li&gt;&#xA;&lt;li&gt;bake build&lt;/li&gt;&#xA;&lt;li&gt;pytest&lt;/li&gt;&#xA;&lt;li&gt;gatsby develop&lt;/li&gt;&#xA;&lt;li&gt;npm i&lt;/li&gt;&#xA;&lt;li&gt;npm update&lt;/li&gt;&#xA;&lt;li&gt;pip install&lt;/li&gt;&#xA;&lt;li&gt;ipython&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The second benefit was that I can continue typing while plugins are loading.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://waylonwalker.com/type-while-loading-plugins.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://waylonwalker.com/type-while-loading-plugins.gif&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;prompt&#34;&gt;&amp;gt;Prompt &lt;a href=&#34;#prompt&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;After removing oh-my-zsh the first thing that I missed was the themes that it provided.  I went through a number of them and the one that seemed to have the smallest effect on performance and everything I needed was &lt;a href=&#34;https://starship.rs/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/starship.rs.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/starship.rs.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;starship&lt;/a&gt;.  It’s a really fast prompt written in rust.  The biggest thing that I needed to have that other prompts were misssing was conda environments.  I live much of my work life running python from various conda environments and it is crutial that I can see what environment I am in at all times.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/08d01b82-df3d-4695-bad1-39acd8961707.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/08d01b82-df3d-4695-bad1-39acd8961707.png&#34; alt=&#34;2020-01-04 12-36-31_Cortana.png&#34;/ data-glightbox=&#34;description: 2020-01-04 12-36-31_Cortana.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;-bonus&#34;&gt;💰 Bonus &lt;a href=&#34;#-bonus&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I applied the same logic to neovim and achieved similar results.  Again it just had too many plugins loading on startup for simple tasks.  I ended up taking a shortcut and load any heavy plugins upon NerdTreeToggle.  I dont really use NERDTree that much, but when I do its for more than just a quick edit.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ~/.config/nvim/init.vim&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Plug &lt;span class=&#34;s1&#34;&gt;&amp;#39;valloric/youcompleteme&amp;#39;&lt;/span&gt;, &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;do&amp;#39;&lt;/span&gt;: &lt;span class=&#34;s1&#34;&gt;&amp;#39;./install.py&amp;#39;&lt;/span&gt;, &lt;span class=&#34;s1&#34;&gt;&amp;#39;on&amp;#39;&lt;/span&gt;: &lt;span class=&#34;s1&#34;&gt;&amp;#39;NERDTreeToggle&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Keep Location List Closed</title>
    <id>https://waylonwalker.com/keep-location-list-closed/</id>
    <updated>2020-01-01T00:00:00Z</updated>
    <published>2020-01-01T00:00:00Z</published>
    <link href="https://waylonwalker.com/keep-location-list-closed/" rel="alternate" type="text/html"></link>
    <summary type="text">Vim&#39;s (neovim in my case) location list can provide some very useful information while developing. Mine gives me information about linting and type checking...</summary>
    <content type="html">&lt;p&gt;Vim’s (neovim in my case) location list can provide some very useful information while developing.  Mine gives me information about linting and type checking errors with fairly little config.  Generally, it sits nicely at the bottom of the screen and barely affects me.  Other times, especially while zoomed way in during a presentation, it just gets in the way.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/location-list-eats-screen.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/location-list-eats-screen.png&#34; alt=&#34;location list eats the screen&#34;/ data-glightbox=&#34;description: location list eats the screen&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Location List eating up the screen while I am zoomed in and trying to live code&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;toggling-the-location-list&#34;&gt;Toggling the location list &lt;a href=&#34;#toggling-the-location-list&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Through some google search I found the culprit was syntastic.  It has an &lt;code&gt;auto_loc_list&lt;/code&gt; feature.  We can turn it off by setting&#xA;&lt;code&gt;syntastic_auto_loc_list=0&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;syntastic_auto_loc_list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;keybindings&#34;&gt;Keybindings &lt;a href=&#34;#keybindings&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I want to keep the location list open automatically most of the time, but when I don’t want it to keep opening it’s generally detrimental.  Trying to live code while the location list keeps taking up the whole screen is not cool.&lt;/p&gt;&#xA;&lt;p&gt;First, create a function that will toggle both the location list and syntactic together.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt;:&lt;span class=&#34;nx&#34;&gt;syntastic_auto_loc_list&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;!&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt;:&lt;span class=&#34;nx&#34;&gt;ToggleLocationList&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt;:&lt;span class=&#34;nx&#34;&gt;syntastic_auto_loc_list&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt;:&lt;span class=&#34;nx&#34;&gt;syntastic_auto_loc_list&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;syntastic_auto_loc_list&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        :&lt;span class=&#34;nx&#34;&gt;lclose&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt;:&lt;span class=&#34;nx&#34;&gt;syntastic_auto_loc_list&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;syntastic_auto_loc_list&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        :&lt;span class=&#34;nx&#34;&gt;lopen&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;endif&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;endfunction&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This binding will allow me to use &lt;code&gt;gtl&lt;/code&gt; from normal mode to toggle the location list.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;!&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ToggleLocationList&lt;/span&gt; :&lt;span class=&#34;nx&#34;&gt;call&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt;:&lt;span class=&#34;nx&#34;&gt;ToggleLocationList&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;nnoremap&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;gtl&lt;/span&gt; :&lt;span class=&#34;nx&#34;&gt;ToggleLocationList&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;CR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I am starting a set of &lt;strong&gt;toggle&lt;/strong&gt; keymaps under the &lt;code&gt;gt&lt;/code&gt; keybinding, this one is the second one after a keybinding made to toggle paste mode.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>SqlAlchemy Models</title>
    <id>https://waylonwalker.com/sqlalchemy-models/</id>
    <updated>2019-12-21T05:00:00Z</updated>
    <published>2019-12-21T05:00:00Z</published>
    <link href="https://waylonwalker.com/sqlalchemy-models/" rel="alternate" type="text/html"></link>
    <summary type="text">My Notes about using sqlalchemy models</summary>
    <content type="html">&lt;h2 id=&#34;make-a-connection&#34;&gt;Make a connection &lt;a href=&#34;#make-a-connection&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;sqlalchemy&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;create_engine&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_engine&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;create_engine&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;sqlite:///mode_examples.sqlite&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;make-a-session&#34;&gt;Make a session &lt;a href=&#34;#make-a-session&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;sqlalchemy.orm&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sessionmaker&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_session&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;con&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_engine&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;Base&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bind&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;con&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;Base&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;create_all&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;Session&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sessionmaker&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bind&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;con&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;session&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Session&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;session&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;make-a-base-class&#34;&gt;Make a Base Class &lt;a href=&#34;#make-a-base-class&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;sqlalchemy.ext.declarative&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;declarative_base&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Base&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;declarative_base&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Base&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;metadata&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bind&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_engine&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;make-your-first-model&#34;&gt;Make your First Model &lt;a href=&#34;#make-your-first-model&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;User&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Base&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;__tablename__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;users&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;username&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Column&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;username&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;firstname&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Column&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;firstname&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;lastname&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Column&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;lastname&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;make-your-own-base-class-to-inherit-from&#34;&gt;Make your own Base Class to inherit From &lt;a href=&#34;#make-your-own-base-class-to-inherit-from&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;MyBaseHelper&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;to_dict&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;v&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vm&#34;&gt;__dict__&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;k&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;_&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;update&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;attrs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;attrs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;hasattr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nb&#34;&gt;setattr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;use-the-custom-base-class&#34;&gt;Use the Custom Base Class &lt;a href=&#34;#use-the-custom-base-class&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;User&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Base&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;MyBaseHelper&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;__tablename__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;users&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;username&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Column&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;username&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;firstname&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Column&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;firstname&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;lastname&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Column&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;lastname&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ carykh jumpcutter</title>
    <id>https://waylonwalker.com/carykh-jumpcutter/</id>
    <updated>2019-12-04T04:26:25Z</updated>
    <published>2019-12-04T04:26:25Z</published>
    <link href="https://waylonwalker.com/carykh-jumpcutter/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across jumpcutter from carykh, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/carykh/jumpcutter&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jumpcutter&lt;/a&gt; from &lt;a href=&#34;https://github.com/carykh&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;carykh&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;Automatically edits vidx. Explanation here: &lt;a href=&#34;https://www.youtube.com/watch?v=DQ8orIurGxw&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://www.youtube.com/watch?v=DQ8orIurGxw&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ great-expectations great_expectations</title>
    <id>https://waylonwalker.com/great-expectations-great_expectations/</id>
    <updated>2019-12-02T21:20:06Z</updated>
    <published>2019-12-02T21:20:06Z</published>
    <link href="https://waylonwalker.com/great-expectations-great_expectations/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out great-expectations and their project great_expectations.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/great-expectations&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;great-expectations&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/great-expectations/great_expectations&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;great_expectations&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Always know what to expect from your data.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ alyssaxuu flowy</title>
    <id>https://waylonwalker.com/alyssaxuu-flowy/</id>
    <updated>2019-11-28T04:54:32Z</updated>
    <published>2019-11-28T04:54:32Z</published>
    <link href="https://waylonwalker.com/alyssaxuu-flowy/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by flowy from alyssaxuu.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/alyssaxuu/flowy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;flowy&lt;/a&gt; from &lt;a href=&#34;https://github.com/alyssaxuu&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;alyssaxuu&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The minimal javascript library to create flowcharts ✨&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ blocks blocks</title>
    <id>https://waylonwalker.com/blocks-blocks/</id>
    <updated>2019-11-27T04:26:06Z</updated>
    <published>2019-11-27T04:26:06Z</published>
    <link href="https://waylonwalker.com/blocks-blocks/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across blocks from blocks, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/blocks/blocks&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;blocks&lt;/a&gt; from &lt;a href=&#34;https://github.com/blocks&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;blocks&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;A JSX-based page builder for creating beautiful websites without writing code&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ asmeurer removestar</title>
    <id>https://waylonwalker.com/asmeurer-removestar/</id>
    <updated>2019-11-21T15:01:49Z</updated>
    <published>2019-11-21T15:01:49Z</published>
    <link href="https://waylonwalker.com/asmeurer-removestar/" rel="alternate" type="text/html"></link>
    <summary type="text">I like asmeurer&#39;s project removestar.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/asmeurer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;asmeurer’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/asmeurer/removestar&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;removestar&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Tool to automatically replace ‘import *’ in Python files with explicit imports&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ lolcommits lolcommits</title>
    <id>https://waylonwalker.com/lolcommits-lolcommits/</id>
    <updated>2019-11-17T19:51:49Z</updated>
    <published>2019-11-17T19:51:49Z</published>
    <link href="https://waylonwalker.com/lolcommits-lolcommits/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out lolcommits and their project lolcommits.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/lolcommits&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lolcommits&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/lolcommits/lolcommits&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lolcommits&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;📷 &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt;-based selfies for software developers&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ jacobdeichert mask</title>
    <id>https://waylonwalker.com/jacobdeichert-mask/</id>
    <updated>2019-11-14T12:20:58Z</updated>
    <published>2019-11-14T12:20:58Z</published>
    <link href="https://waylonwalker.com/jacobdeichert-mask/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about mask, an amazing project by jacobdeichert. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/jacobdeichert/mask&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mask&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/jacobdeichert&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jacobdeichert&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;🎭 A CLI task runner defined by a simple markdown file&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pyjanitor-devs pandas_flavor</title>
    <id>https://waylonwalker.com/pyjanitor-devs-pandas_flavor/</id>
    <updated>2019-11-13T02:44:04Z</updated>
    <published>2019-11-13T02:44:04Z</published>
    <link href="https://waylonwalker.com/pyjanitor-devs-pandas_flavor/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out pyjanitor-devs and their project pandas_flavor.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/pyjanitor-devs&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pyjanitor-devs&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/pyjanitor-devs/pandas_flavor&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pandas_flavor&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The easy way to write your own flavor of Pandas&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tj go-termd</title>
    <id>https://waylonwalker.com/tj-go-termd/</id>
    <updated>2019-11-12T13:05:00Z</updated>
    <published>2019-11-12T13:05:00Z</published>
    <link href="https://waylonwalker.com/tj-go-termd/" rel="alternate" type="text/html"></link>
    <summary type="text">I like tj&#39;s project go-termd.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/tj&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tj’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/tj/go-termd&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;go-termd&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Package termd provides terminal markdown rendering, with code block syntax highlighting support.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Building Cli apps in Python</title>
    <id>https://waylonwalker.com/building-cli-apps-in-python/</id>
    <updated>2019-11-11T06:00:00Z</updated>
    <published>2019-11-11T06:00:00Z</published>
    <link href="https://waylonwalker.com/building-cli-apps-in-python/" rel="alternate" type="text/html"></link>
    <summary type="text">learning about building cli apps in python</summary>
    <content type="html">&lt;h2 id=&#34;packages&#34;&gt;Packages &lt;a href=&#34;#packages&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;clickhttpsclickpalletsprojectscomen7x-click&#34;&gt;&lt;a href=&#34;https://click.palletsprojects.com/en/7.x/&#34; title=&#34;Click&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/click.palletsprojects.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/click.palletsprojects.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Click&lt;/a&gt; &lt;a href=&#34;#clickhttpsclickpalletsprojectscomen7x-click&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;inputs&#34;&gt;Inputs &lt;a href=&#34;#inputs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Click primarily takes two forms of inputs Options and arguments. I think of options as keyword argument and arguments as regular positional arguments.&lt;/p&gt;&#xA;&lt;h4 id=&#34;option&#34;&gt;Option &lt;a href=&#34;#option&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;typically aliased with a shorthand (’-v’, ‘–verbose’)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;**From the &lt;a href=&#34;https://click.palletsprojects.com/en/7.x/options/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/click.palletsprojects.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/click.palletsprojects.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Docs&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;To get the Python argument name, the chosen name is converted to lower case, up to two dashes are removed as the prefix, and other dashes are converted to underscores.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@click.command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@click.option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;-s&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;--string-to-echo&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string_to_echo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;click&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string_to_echo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@click.command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@click.option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;-s&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;--string-to-echo&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;string&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;click&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;hr/&gt;&#xA;&lt;h4 id=&#34;argument&#34;&gt;Argument &lt;a href=&#34;#argument&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;positional&lt;/li&gt;&#xA;&lt;li&gt;required&lt;/li&gt;&#xA;&lt;li&gt;no help text supplied by click&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;yaspinhttpspypiorgprojectyaspin-yaspin&#34;&gt;&lt;a href=&#34;https://pypi.org/project/yaspin/&#34; title=&#34;Yaspin&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/pypi.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/pypi.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Yaspin&lt;/a&gt; &lt;a href=&#34;#yaspinhttpspypiorgprojectyaspin-yaspin&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/yaspin-demo.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/yaspin-demo.gif&#34; alt=&#34;Yaspin Gif&#34;/ data-glightbox=&#34;description: Yaspin Gif&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;click-help-colorshttpsgithubcomclick-contribclick-help-colors&#34;&gt;&lt;a href=&#34;https://github.com/click-contrib/click-help-colors&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Click Help Colors&lt;/a&gt; &lt;a href=&#34;#click-help-colorshttpsgithubcomclick-contribclick-help-colors&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;click-help-colors-examplehttpsrawgithubusercontentcomr-m-nclick-help-colorsmasterexamples1png&#34;&gt;&lt;a href=&#34;https://raw.githubusercontent.com/r-m-n/click-help-colors/master/examples/1.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://raw.githubusercontent.com/r-m-n/click-help-colors/master/examples/1.png&#34; alt=&#34;Click Help Colors Example&#34;/ data-glightbox=&#34;description: Click Help Colors Example&#34;&gt;&lt;/a&gt; &lt;a href=&#34;#click-help-colors-examplehttpsrawgithubusercontentcomr-m-nclick-help-colorsmasterexamples1png&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;coloramahttpsgithubcomtartleycolorama-colorama&#34;&gt;&lt;a href=&#34;https://github.com/tartley/colorama&#34; title=&#34;colorama&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Colorama&lt;/a&gt; &lt;a href=&#34;#coloramahttpsgithubcomtartleycolorama-colorama&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/tartley/colorama/raw/master/screenshots/ubuntu-demo.png&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Colorama Example&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;click-didyoumeanhttpsgithubcomclick-contribclick-didyoumean&#34;&gt;&lt;a href=&#34;https://github.com/click-contrib/click-didyoumean&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Click DidYouMean&lt;/a&gt; &lt;a href=&#34;#click-didyoumeanhttpsgithubcomclick-contribclick-didyoumean&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pomber git-history</title>
    <id>https://waylonwalker.com/pomber-git-history/</id>
    <updated>2019-11-10T03:20:42Z</updated>
    <published>2019-11-10T03:20:42Z</published>
    <link href="https://waylonwalker.com/pomber-git-history/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered git-history by pomber, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/pomber/git-history&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;git-history&lt;/a&gt; by &lt;a href=&#34;https://github.com/pomber&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pomber&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;Quickly browse the history of a file from any &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; repository&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ csurfer pypette</title>
    <id>https://waylonwalker.com/csurfer-pypette/</id>
    <updated>2019-11-07T17:12:56Z</updated>
    <published>2019-11-07T17:12:56Z</published>
    <link href="https://waylonwalker.com/csurfer-pypette/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out csurfer and their project pypette.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/csurfer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;csurfer&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/csurfer/pypette&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pypette&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Ridiculously simple flow controller for building complex pipelines&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Kedro</title>
    <id>https://waylonwalker.com/kedro/</id>
    <updated>2019-11-02T05:00:00Z</updated>
    <published>2019-11-02T05:00:00Z</published>
    <link href="https://waylonwalker.com/kedro/" rel="alternate" type="text/html"></link>
    <summary type="text">My Notes about using kedro</summary>
    <content type="html">&lt;p&gt;See all of my kedro related posts in [[ tag/kedro ]].&lt;/p&gt;&#xA;&lt;h2 id=&#34;kedrotipshttpstwittercomsearchq23kedrotipsflive&#34;&gt;&lt;a href=&#34;https://twitter.com/search?q=%23kedrotips&amp;amp;f=live&#34;&gt;#kedrotips&lt;/a&gt; &lt;a href=&#34;#kedrotipshttpstwittercomsearchq23kedrotipsflive&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I am tweeting out most of these snippets as I add them, you can find them all&#xA;here &lt;a href=&#34;https://twitter.com/search?q=%23kedrotips&#34;&gt;#kedrotips&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;-heads-up&#34;&gt;🗣 Heads up &lt;a href=&#34;#-heads-up&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Below are some quick snippets/notes for when using kedro to build data&#xA;pipelines. So far I am just compiling snippets. Eventually I will create&#xA;several posts on kedro. These are mostly things that I use In my everyday with&#xA;kedro. Some are a bit more essoteric. Some are helpful when writing production&#xA;code, some are useful more usefule for exploration.&lt;/p&gt;&#xA;&lt;h2 id=&#34;-catalog&#34;&gt;📚 Catalog &lt;a href=&#34;#-catalog&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/jesse-orrico-h6xNSDlgciU-unsplash.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/jesse-orrico-h6xNSDlgciU-unsplash.jpg&#34; alt=&#34;catalogs&#34;/ data-glightbox=&#34;description: catalogs&#34;&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;&lt;em&gt;Photo by jesse orrico on Unsplash&lt;/em&gt;&lt;/p&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;csvlocaldataset&#34;&gt;CSVLocalDataSet &lt;a href=&#34;#csvlocaldataset&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;python&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pandas&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pd&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;iris&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read_csv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https://raw.githubusercontent.com/kedro-org/kedro/d3218bd89ce8d1148b1f79dfe589065f47037be6/kedro/template/%7B%7B&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%20c&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;ookiecutter.repo_name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%20%&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;7D%7D/data/01_raw/iris.csv&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;data_set&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CSVLocalDataSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;test.csv&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                 &lt;span class=&#34;n&#34;&gt;load_args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                 &lt;span class=&#34;n&#34;&gt;save_args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;index&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;iris_data_set&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;save&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;iris&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;reloaded_iris&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;iris_data_set&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;yaml&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;test_data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;CSVLocalDataset&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;test.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;load_args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;save_args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;csvhttpdataset&#34;&gt;CSVHTTPDataSet &lt;a href=&#34;#csvhttpdataset&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cities&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CSVHTTPDataSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;fileurl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://raw.githubusercontent.com/kedro-org/kedro/d3218bd89ce8d1148b1f79dfe589065f47037be6/kedro/template/%7B%7B&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%20c&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;ookiecutter.repo_name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%20%&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;7D%7D/data/01_raw/iris.csv&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;load_args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;iris&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;iris_data_set&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;cities&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;CSVHTTPDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;fileurl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://people.sc.fsu.edu/~jburkardt/data/csv/cities.csv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;auth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;load_args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;hdflocaldataset&#34;&gt;HDFLocalDataSet &lt;a href=&#34;#hdflocaldataset&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pandas&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pd&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.io&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HDFLocalDataSet&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;iris&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read_csv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https://raw.githubusercontent.com/kedro-org/kedro/d3218bd89ce8d1148b1f79dfe589065f47037be6/kedro/template/%7B%7B&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%20c&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;ookiecutter.repo_name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%20%&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;7D%7D/data/01_raw/iris.csv&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;iris_data_set&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HDFLocalDataSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;iris.hdf&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                           &lt;span class=&#34;n&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;test_hdf_key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                           &lt;span class=&#34;n&#34;&gt;load_args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                           &lt;span class=&#34;n&#34;&gt;save_args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;iris_data_set&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;save&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;iris&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;reloaded_iris&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;iris_data_set&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;cars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;HDFLocalDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;test.hdf&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;test_hdf_key&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;hdfs3localdataset&#34;&gt;HDFS3LocalDataSet &lt;a href=&#34;#hdfs3localdataset&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pandas&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pd&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.io&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HDFS3DataSet&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;iris&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read_csv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https://raw.githubusercontent.com/kedro-org/kedro/d3218bd89ce8d1148b1f79dfe589065f47037be6/kedro/template/%7B%7B&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%20c&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;ookiecutter.repo_name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%20%&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;7D%7D/data/01_raw/iris.csv&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;iris_data_set&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;HDFS3DataSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;iris.hdf&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;n&#34;&gt;bucket_name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;bucket-us-west-1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;n&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;test_hdf_key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;n&#34;&gt;load_args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;n&#34;&gt;save_args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;iris_data_set&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;save&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;iris&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;reloaded_iris&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;iris_data_set&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;cars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;HDFS3DataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;cars.hdf&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;bucket_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;bucket-us-west-1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;test_hdf_key&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;jsonlocaldataset&#34;&gt;JSONLocalDataSet &lt;a href=&#34;#jsonlocaldataset&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pandas&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pd&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.io&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;JSONLocalDataSet&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;iris&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read_csv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https://raw.githubusercontent.com/kedro-org/kedro/d3218bd89ce8d1148b1f79dfe589065f47037be6/kedro/template/%7B%7B&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%20c&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;ookiecutter.repo_name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%20%&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;7D%7D/data/01_raw/iris.csv&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cars&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;JSONLocalDataSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;iris.json&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;n&#34;&gt;load_args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;n&#34;&gt;save_args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;iris_data_set&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;save&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;iris&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;reloaded_iris&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;iris_data_set&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;cars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;JSONLocalDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;iris.json&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;parquetlocaldataset&#34;&gt;ParquetLocalDataSet &lt;a href=&#34;#parquetlocaldataset&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pandas&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pd&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.io&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ParquetLocalDataSet&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;iris&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read_csv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https://raw.githubusercontent.com/kedro-org/kedro/d3218bd89ce8d1148b1f79dfe589065f47037be6/kedro/template/%7B%7B&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%20c&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;ookiecutter.repo_name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%20%&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;7D%7D/data/01_raw/iris.csv&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;iris_data_set&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ParquetLocalDataSet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;iris&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                           &lt;span class=&#34;n&#34;&gt;engine&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;auto&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                           &lt;span class=&#34;n&#34;&gt;load_args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                           &lt;span class=&#34;n&#34;&gt;save_args&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                           &lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;None&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;iris_data_set&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;save&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;iris&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;reloaded_iris&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;iris_data_set&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;cars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;JSONLocalDataSet&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;cars&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;PickleS3DataSet&lt;/p&gt;&#xA;&lt;p&gt;SQLTableDataSet&lt;/p&gt;&#xA;&lt;p&gt;SQLQueryDataSet&lt;/p&gt;&#xA;&lt;p&gt;TextLocalDataSet&lt;/p&gt;&#xA;&lt;p&gt;ExcelLocalDataSet&lt;/p&gt;&#xA;&lt;h2 id=&#34;-loading-data&#34;&gt;⏳ Loading Data &lt;a href=&#34;#-loading-data&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/battlecreek-coffee-roasters-eg6OUchGCsw-unsplash.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/battlecreek-coffee-roasters-eg6OUchGCsw-unsplash.jpg&#34; alt=&#34;loading data&#34;/ data-glightbox=&#34;description: loading data&#34;&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;&lt;em&gt;Photo by Battlecreek Coffee Roasters on Unsplash&lt;/em&gt;&lt;/p&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;simple-loading&#34;&gt;Simple Loading &lt;a href=&#34;#simple-loading&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;cars&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;list-all-datasets&#34;&gt;list all datasets &lt;a href=&#34;#list-all-datasets&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;saving-data&#34;&gt;Saving Data &lt;a href=&#34;#saving-data&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;save&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;cars&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;-finding-data&#34;&gt;🔍 Finding data &lt;a href=&#34;#-finding-data&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;simple keyword search&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;query&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;raw&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;query&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;see on&lt;/em&gt; &lt;a href=&#34;https://twitter.com/_WaylonWalker/status/1197130980659732480?s=20&#34;&gt;&lt;em&gt;#kedrotips&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;multi keyword serch&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;query&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;raw sales&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;data_sets&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;word&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;split&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;n&#34;&gt;data_sets&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data_sets&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;query&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;see on&lt;/em&gt; &lt;a href=&#34;https://twitter.com/_WaylonWalker/status/1197528461587419139?s=20&#34;&gt;&lt;em&gt;#kedrotips&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;🐒 monkey patch it&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;search_terms&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;n&#34;&gt;data_sets&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;search&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;search_terms&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;n&#34;&gt;data_sets&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data_sets&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;search&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;         &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data_sets&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;query&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;_see on &lt;a href=&#34;https://twitter.com/_WaylonWalker/status/1197855759507300352?s=20&#34;&gt;#kedrotips&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;-yolo&#34;&gt;🤙 YOLO &lt;a href=&#34;#-yolo&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;You Only Load Once&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;simple&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;c_pri&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;cars&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;more refined&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;c_pri&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;cars&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;🍷 refined like a fine wine&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;types&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SimpleNamespace&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SimpleNamespace&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;c_pri&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;cars&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;🧀 Make it a function&lt;/strong&gt;&#xA;&lt;em&gt;getting funcy&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;types&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SimpleNamespace&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;yolo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;search_terms&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;you only load once&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;   using query method from previous tip&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SimpleNamespace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;n&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;load&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;d&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;search_terms&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;all_pri&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;yolo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;c_pri&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;🐒 monkey patch it&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;functools&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;partial&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yolo&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;yolo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yolo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vm&#34;&gt;__doc__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;you only load once&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;all_pri&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;catalog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yolo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;c_pri&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;adding-catalogs-together&#34;&gt;adding catalogs together &lt;a href=&#34;#adding-catalogs-together&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.io&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;DataCatalog&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;DataCatalog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cat1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vm&#34;&gt;__dict__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;_data_sets&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cat2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;vm&#34;&gt;__dict__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;_data_sets&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;-building-pipelines&#34;&gt;🛢 Building pipelines &lt;a href=&#34;#-building-pipelines&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/roman-pentin-T5QT2bmiD4E-unsplash.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/roman-pentin-T5QT2bmiD4E-unsplash.jpg&#34; alt=&#34;building pipelines&#34;/ data-glightbox=&#34;description: building pipelines&#34;&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;&lt;em&gt;Photo by roman pentin on Unsplash&lt;/em&gt;&lt;/p&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;-creating-nodes&#34;&gt;📍 Creating Nodes &lt;a href=&#34;#-creating-nodes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.pipeline&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;node&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;lambda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dropna&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;raw_cars&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;outputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;int_cars&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.pipeline&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;drop_columns&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;columns&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;column&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;columns&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;df&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;drop&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;columns&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;column&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;node&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;lambda&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;drop_columns&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;vs&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;am&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;gear&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;carb&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;int_cars&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;outputs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;pri_cars&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;-creating-a-pipeline&#34;&gt;🛢 Creating a pipeline &lt;a href=&#34;#-creating-a-pipeline&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;dont-be-so-verbose&#34;&gt;Don’t be so verbose &lt;a href=&#34;#dont-be-so-verbose&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Create similar nodes dynamically&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;halve_dataframe&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataFrame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;List&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataFrame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34; splits a dataframe in half &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;np&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;array_split&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;datasets&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;s1&#34;&gt;&amp;#39;cars&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;trucks&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;boats&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;motorcycles&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;planes&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;s1&#34;&gt;&amp;#39;ships&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;busses&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;trains&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;subways&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# creates a pipeline node for every dataset in the datasets list&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dataset&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datasets&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;halve_dataframe&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;e_modin_&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{dataset}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;train_&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{dataset}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;test_&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{dataset}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;-running-pipelines&#34;&gt;🏃‍♂️ Running Pipelines &lt;a href=&#34;#-running-pipelines&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/rodion-kutsaev-xNdPWGJ6UCQ-unsplash.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/rodion-kutsaev-xNdPWGJ6UCQ-unsplash.jpg&#34; alt=&#34;running pipelines&#34;/ data-glightbox=&#34;description: running pipelines&#34;&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;&lt;em&gt;Photo by Rodion Kutsaev on Unsplash&lt;/em&gt;&lt;/p&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;&lt;strong&gt;🔖 filter by tags&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;only_nodes_with_tags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;cars&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;see on&lt;/em&gt; &lt;a href=&#34;https://twitter.com/_WaylonWalker/status/1195319044808888321?s=20&#34;&gt;&lt;em&gt;#kedrotips&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;filter by node&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;only_nodes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;b_int_cars&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;_see on &lt;a href=&#34;https://twitter.com/_WaylonWalker/status/1196406204479737856?s=20&#34;&gt;#kedrotips&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;filter nodes like&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;query_string&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;cars&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;query_string&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;only_nodes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;see on&lt;/em&gt; &lt;a href=&#34;https://twitter.com/_WaylonWalker/status/1196813895228428288?s=20&#34;&gt;&lt;em&gt;#kedrotips&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;only nodes with tags&lt;/strong&gt; &lt;em&gt;or&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;only_nodes_with_tags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;cars&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;trains&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;only nodes with tags&lt;/strong&gt; &lt;em&gt;and&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;raw_nodes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;only_nodes_with_tags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;raw&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;car_nodes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;only_nodes_with_tags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;cars&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;raw_car_nodes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;raw_nodes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;car_nodes&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;raw_nodes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;only_nodes_with_tags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;raw&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;only_nodes_with_tags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;cars&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;add pipelines&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;car_nodes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;only_nodes_with_tags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;cars&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;train_nodes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;only_nodes_with_tags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;trains&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;transportation_nodes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;car_nodes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;train_nodes&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;ensure nodes are attached&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cars_attached&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;len&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;only_nodes_with_tags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;cars&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;grouped_nodes&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;-pipeline-decorators&#34;&gt;🎂 Pipeline Decorators &lt;a href=&#34;#-pipeline-decorators&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://kedro.readthedocs.io/en/latest/_modules/kedro/pipeline/decorators.html#log_time&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/kedro.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/kedro.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;example - log_time&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.pipeline.decorators&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;log_time&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;mem_profile&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;decorate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;log_running_time&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;pipeline-io&#34;&gt;Pipeline IO &lt;a href=&#34;#pipeline-io&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;pipleine.all_inputs()&lt;/code&gt; and &lt;code&gt;pipeline.all_outputs()&lt;/code&gt; return sets of pipeline inputs and outputs and you can do set operations on them.  This is particularly useful to find the upper and lower edges of your pipeline or subset of pipeline.  The pipeline object here is any &lt;code&gt;kedro&lt;/code&gt; pipeline including a filtered subset.&lt;/p&gt;&#xA;&lt;h3 id=&#34;find-all-raw-data&#34;&gt;Find all raw data &lt;a href=&#34;#find-all-raw-data&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;all_inputs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;all_outputs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;find-all-final-data&#34;&gt;Find all final data &lt;a href=&#34;#find-all-final-data&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;all_outputs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;all_inputs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;find-all-nodes-that-do-not-raw&#34;&gt;Find all nodes that do not raw &lt;a href=&#34;#find-all-nodes-that-do-not-raw&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;This one is probably one that is pushing the limits of what I would do in a list comprehension that I use in prod or even put into a text editor, but I commonly use ipython for my adhoc work and keeping it all in one line is very handy.  Complex list comprehensions kinda start becoming like regex in a way that they are really easy to write and really hard to read.  I don’t think this one quite hits that point but its getting close.&lt;/p&gt;&#xA;&lt;p&gt;I find this one super useful to help me either move data beween environments, or avoid unnecessary database calls.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;raw_inputs&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;all_inputs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;all_outputs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;raw_nodes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;node&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;node&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;raw_inputs&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;inputs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ psf requests</title>
    <id>https://waylonwalker.com/psf-requests/</id>
    <updated>2019-10-29T16:37:59Z</updated>
    <published>2019-10-29T16:37:59Z</published>
    <link href="https://waylonwalker.com/psf-requests/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out requests by psf. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/psf/requests&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;requests&lt;/a&gt; by &lt;a href=&#34;https://github.com/psf&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;psf&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;A simple, yet elegant, HTTP library.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nitayneeman vscode-git-semantic-commit</title>
    <id>https://waylonwalker.com/nitayneeman-vscode-git-semantic-commit/</id>
    <updated>2019-10-28T00:59:44Z</updated>
    <published>2019-10-28T00:59:44Z</published>
    <link href="https://waylonwalker.com/nitayneeman-vscode-git-semantic-commit/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out vscode-git-semantic-commit by nitayneeman. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/nitayneeman/vscode-git-semantic-commit&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vscode-git-semantic-commit&lt;/a&gt; by &lt;a href=&#34;https://github.com/nitayneeman&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nitayneeman&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;💬 A Visual Studio Code extension which enables to commit simply by the semantic message conventions&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ MarcSkovMadsen awesome-streamlit</title>
    <id>https://waylonwalker.com/marcskovmadsen-awesome-streamlit/</id>
    <updated>2019-10-19T04:05:32Z</updated>
    <published>2019-10-19T04:05:32Z</published>
    <link href="https://waylonwalker.com/marcskovmadsen-awesome-streamlit/" rel="alternate" type="text/html"></link>
    <summary type="text">awesome-streamlit by MarcSkovMadsen is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/MarcSkovMadsen/awesome-streamlit&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;awesome-streamlit&lt;/a&gt; by &lt;a href=&#34;https://github.com/MarcSkovMadsen&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;MarcSkovMadsen&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;The purpose of this project is to share knowledge on how awesome Streamlit is and can be&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ bencoder js13k-2019</title>
    <id>https://waylonwalker.com/bencoder-js13k-2019/</id>
    <updated>2019-10-18T23:21:34Z</updated>
    <published>2019-10-18T23:21:34Z</published>
    <link href="https://waylonwalker.com/bencoder-js13k-2019/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by js13k-2019 from bencoder.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/bencoder/js13k-2019&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;js13k-2019&lt;/a&gt; from &lt;a href=&#34;https://github.com/bencoder&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;bencoder&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;xx142-b2.exe. An entry for js13kgames 2019&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ gabLaroche death-to-ie11</title>
    <id>https://waylonwalker.com/gablaroche-death-to-ie11/</id>
    <updated>2019-10-15T14:01:10Z</updated>
    <published>2019-10-15T14:01:10Z</published>
    <link href="https://waylonwalker.com/gablaroche-death-to-ie11/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred death-to-ie11 by gabLaroche. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/gabLaroche/death-to-ie11&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;death-to-ie11&lt;/a&gt; by &lt;a href=&#34;https://github.com/gabLaroche&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gabLaroche&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;Countdown for IE11 end of support&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>📝 Packages to Investigate Notes</title>
    <id>https://waylonwalker.com/packages-to-investigate/</id>
    <updated>2019-10-14T05:00:00Z</updated>
    <published>2019-10-14T05:00:00Z</published>
    <link href="https://waylonwalker.com/packages-to-investigate/" rel="alternate" type="text/html"></link>
    <summary type="text">Tabnine</summary>
    <content type="html">&lt;ul&gt;&#xA;&lt;li&gt;jmespath&lt;/li&gt;&#xA;&lt;li&gt;Tabnine&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;bulwark&#34;&gt;Bulwark &lt;a href=&#34;#bulwark&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;|-|-|&#xA;|github: |&lt;a href=&#34;https://github.com/zaxr/bulwark&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/zaxr/bulwark&lt;/a&gt;|&lt;/p&gt;&#xA;&lt;p&gt;I definitely want to try this out with kedro.&lt;/p&gt;&#xA;&lt;p&gt;Bulwark is a package for convenient property-based testing of pandas dataframes, supported for Python 3.5+.&lt;/p&gt;&#xA;&lt;h2 id=&#34;example&#34;&gt;Example &lt;a href=&#34;#example&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre&gt;&lt;code&gt;    import bulwark.decorators as dc&#xA;&#xA;    @dc.IsShape((-1, 10))&#xA;    @dc.IsMonotonic(strict=True)&#xA;    @dc.HasNoNans()&#xA;    def compute(df):&#xA;        # complex operations to determine result&#xA;        ...&#xA;    return result_df&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ igorbarinov awesome-data-engineering</title>
    <id>https://waylonwalker.com/igorbarinov-awesome-data-engineering/</id>
    <updated>2019-10-06T02:07:42Z</updated>
    <published>2019-10-06T02:07:42Z</published>
    <link href="https://waylonwalker.com/igorbarinov-awesome-data-engineering/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across awesome-data-engineering from igorbarinov, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/igorbarinov/awesome-data-engineering&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;awesome-data-engineering&lt;/a&gt; from &lt;a href=&#34;https://github.com/igorbarinov&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;igorbarinov&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;A curated list of data engineering tools for software developers&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ microsoft vscode-python</title>
    <id>https://waylonwalker.com/microsoft-vscode-python/</id>
    <updated>2019-10-03T00:16:48Z</updated>
    <published>2019-10-03T00:16:48Z</published>
    <link href="https://waylonwalker.com/microsoft-vscode-python/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about vscode-python, an amazing project by microsoft. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/microsoft/vscode-python&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vscode-python&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/microsoft&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;microsoft&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Python extension for Visual Studio Code&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Debugging Python</title>
    <id>https://waylonwalker.com/debugging-python/</id>
    <updated>2019-10-01T05:00:00Z</updated>
    <published>2019-10-01T05:00:00Z</published>
    <link href="https://waylonwalker.com/debugging-python/" rel="alternate" type="text/html"></link>
    <summary type="text">Debugging Python</summary>
    <content type="html">&lt;h2 id=&#34;using-pdb&#34;&gt;Using pdb &lt;a href=&#34;#using-pdb&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Just Use Pathlib</title>
    <id>https://waylonwalker.com/just-use-pathlib/</id>
    <updated>2019-09-26T05:00:00Z</updated>
    <published>2019-09-26T05:00:00Z</published>
    <link href="https://waylonwalker.com/just-use-pathlib/" rel="alternate" type="text/html"></link>
    <summary type="text">Pathlib is an amazing cross-platform path tool.</summary>
    <content type="html">&lt;p&gt;Pathlib is an amazing cross-platform path tool.&lt;/p&gt;&#xA;&lt;h2 id=&#34;import&#34;&gt;Import &lt;a href=&#34;#import&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pathlib&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;create-path-object&#34;&gt;Create path object &lt;a href=&#34;#create-path-object&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Current Directory&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cwd&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;.&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;absolute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Users Home Directory&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;home&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;home&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;module directory&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;module_path&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;vm&#34;&gt;__file__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Others&lt;/strong&gt;&#xA;Let’s create a path relative to our current module.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;data_path&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;vm&#34;&gt;__file__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;data&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;check-if-files-exist&#34;&gt;Check if files exist &lt;a href=&#34;#check-if-files-exist&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;make-directories&#34;&gt;Make Directories &lt;a href=&#34;#make-directories&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;data_path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mkdir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parents&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;exists_ok&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;rename-files&#34;&gt;rename files &lt;a href=&#34;#rename-files&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data_path&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;example.csv&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rename&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;real.csv&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;list-files&#34;&gt;List files &lt;a href=&#34;#list-files&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;glob-files&#34;&gt;Glob Files &lt;a href=&#34;#glob-files&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;data_path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;glob&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;*.csv&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;recursively&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;data_path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rglob&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;*.csv&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;write&#34;&gt;Write &lt;a href=&#34;#write&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data_path&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;meta.txt&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;write_text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;created on &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;today&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Custom Python Exceptions</title>
    <id>https://waylonwalker.com/custom-python-exceptions/</id>
    <updated>2019-09-25T05:00:00Z</updated>
    <published>2019-09-25T05:00:00Z</published>
    <link href="https://waylonwalker.com/custom-python-exceptions/" rel="alternate" type="text/html"></link>
    <summary type="text">Custom Python Exceptions</summary>
    <content type="html">&lt;h2 id=&#34;custom-exceptions&#34;&gt;Custom Exceptions &lt;a href=&#34;#custom-exceptions&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre&gt;&lt;code&gt;class ProjectNameError(NameError):&#xA;    pass&#xA;&#xA;&#xA;class UserNameError(NameError):&#xA;    pass&#xA;&#xA;&#xA;class CondaEnvironmentError(RuntimeError):&#xA;    pass&#xA;&#xA;&#xA;class BucketNotDefinedError(NameError):&#xA;    pass&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Filtering Pandas</title>
    <id>https://waylonwalker.com/filtering-pandas/</id>
    <updated>2019-09-24T05:00:00Z</updated>
    <published>2019-09-24T05:00:00Z</published>
    <link href="https://waylonwalker.com/filtering-pandas/" rel="alternate" type="text/html"></link>
    <summary type="text">Filtering pandas DataFrames many different ways.</summary>
    <content type="html">&lt;h2 id=&#34;query&#34;&gt;query &lt;a href=&#34;#query&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Good for method chaining, i.e. adding more methods or filters without assigning a new variable.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# is&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;skus&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;AVAILABILITY == &amp;#34; AVAILABLE&amp;#34;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# is not&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;skus&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;AVAILABILITY != &amp;#34; AVAILABLE&amp;#34;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;masking&#34;&gt;masking &lt;a href=&#34;#masking&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;general purpose, this is probably the most common method you see in training/examples&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# is&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;skus&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;skus&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;AVAILABILITY&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;AVAILABLE&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# is not&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;skus&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;~&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;skus&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;AVAILABILITY&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;AVAILABLE&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;isin&#34;&gt;isin &lt;a href=&#34;#isin&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;capable of including multiple strings to include&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;# is in&#xA;df[df.AVAILABILITY.isin([&amp;#39;AVAILABLE&amp;#39;, &amp;#39;AVL&amp;#39;])]&#xA;# is not in&#xA;df[~df.AVAILABILITY.isin([&amp;#39;AVAILABLE&amp;#39;, &amp;#39;AVL&amp;#39;])]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;contains&#34;&gt;contains &lt;a href=&#34;#contains&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Good For partial matches&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;# contains&#xA;df[df.AVAILABILITY.str.contains(&amp;#39;AVA&amp;#39;)]&#xA;# not contains&#xA;df[~df.AVAILABILITY.str.contains(&amp;#39;AVA&amp;#39;)]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;masks&#34;&gt;MASKS &lt;a href=&#34;#masks&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;anything that we put inside of square brackets can be set as a variable then passed in.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;service_mask = skus[&amp;#39;AVAILABILITY&amp;#39;] == &amp;#39;AVAILABLE&amp;#39;&#xA;name_mask = skus[&amp;#39;NAME&amp;#39;] == &amp;#39;Dell chromebook 11&amp;#39;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3 id=&#34;operators&#34;&gt;Operators &lt;a href=&#34;#operators&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&amp;amp; - and&#xA;~ - not&#xA;| - or&lt;/p&gt;&#xA;&lt;h3 id=&#34;available-and-name&#34;&gt;AVAILABLE and NAME &lt;a href=&#34;#available-and-name&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre&gt;&lt;code&gt;df[service_mask &amp;amp; name_mask]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3 id=&#34;available-or-name&#34;&gt;AVAILABLE or NAME &lt;a href=&#34;#available-or-name&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre&gt;&lt;code&gt;df[service_mask | name_mask]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3 id=&#34;available-and-not-name&#34;&gt;AVAILABLE and not NAME &lt;a href=&#34;#available-and-not-name&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre&gt;&lt;code&gt;df[service_mask &amp;amp; ~name_mask]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Digital Ocean</title>
    <id>https://waylonwalker.com/digital-ocean/</id>
    <updated>2019-09-22T05:00:00Z</updated>
    <published>2019-09-22T05:00:00Z</published>
    <link href="https://waylonwalker.com/digital-ocean/" rel="alternate" type="text/html"></link>
    <summary type="text">I love digital ocean for it&#39;s ** and its commitment to open source.</summary>
    <content type="html">&lt;p&gt;I love digital ocean for it’s &lt;strong&gt;simplicity&lt;/strong&gt; and its commitment to open source.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Kashu7100 Recreation-of-Nature</title>
    <id>https://waylonwalker.com/kashu7100-recreation-of-nature/</id>
    <updated>2019-09-18T16:52:32Z</updated>
    <published>2019-09-18T16:52:32Z</published>
    <link href="https://waylonwalker.com/kashu7100-recreation-of-nature/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on Recreation-of-Nature, created by Kashu7100.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/Kashu7100/Recreation-of-Nature&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Recreation-of-Nature&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/Kashu7100&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Kashu7100&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;ALife simulation with Python: patterns, behavior, and cognition.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Quick Progress Bars in python using TQDM</title>
    <id>https://waylonwalker.com/quick-progress-bars-in-python-using-tqdm/</id>
    <updated>2019-09-18T05:00:00Z</updated>
    <published>2019-09-18T05:00:00Z</published>
    <link href="https://waylonwalker.com/quick-progress-bars-in-python-using-tqdm/" rel="alternate" type="text/html"></link>
    <summary type="text">Quick Progress Bars in python using TQDM</summary>
    <content type="html">&lt;p&gt;tqdm is one of my favorite general purpose utility libraries in python.  It&#xA;allows me to see progress of multipart processes as they happen.  I really like&#xA;this for when I am developing something that takes some amount of time and I am&#xA;unsure of performance.  It allows me to be patient when the process is going&#xA;well and will finish in sufficient time, and allows me to 💥 kill it and find a&#xA;way to make it perform better if it will not finish in sufficient time.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;/tqdm2.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;/tqdm2.gif&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more gifs like these follow me on twitter&#xA;&lt;a href=&#34;https://twitter.com/_WaylonWalker&#34;&gt;@waylonwalker&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Add a simple Progress bar!&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;tqdm&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tqdm&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;time&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sleep&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tqdm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;n&#34;&gt;sleep&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;convenience&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;TQDM also has a convenience function called trange that wraps the range function with a tqdm progress bar automatically.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;tqdm&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;trange&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;time&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sleep&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;trange&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;n&#34;&gt;sleep&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;notebook support&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;There is also notebook support.  If you are bouncing between ipython and jupyter I recomend importing from the auto module.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;tqdm.auto&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tqdm&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;time&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sleep&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tqdm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;n&#34;&gt;sleep&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/autoreload-ipython/&#34; class=&#34;wikilink&#34; data-title=&#34;Autoreload in Ipython&#34; data-description=&#34;Autoreload in python&#34; data-date=&#34;2019-09-08&#34; data-preview=&#34;Autoreload in python&#34;&gt;Autoreload in Ipython&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If you are using notebooks you should enable ipython autoreload 👆&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ kennethreitz bake</title>
    <id>https://waylonwalker.com/kennethreitz-bake/</id>
    <updated>2019-09-15T01:11:44Z</updated>
    <published>2019-09-15T01:11:44Z</published>
    <link href="https://waylonwalker.com/kennethreitz-bake/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by bake from kennethreitz.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/kennethreitz/bake&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;bake&lt;/a&gt; from &lt;a href=&#34;https://github.com/kennethreitz&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kennethreitz&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Bake — the strangely familiar workflow utility.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ microsoft terminal</title>
    <id>https://waylonwalker.com/microsoft-terminal/</id>
    <updated>2019-09-13T13:11:35Z</updated>
    <published>2019-09-13T13:11:35Z</published>
    <link href="https://waylonwalker.com/microsoft-terminal/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out terminal by microsoft. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/microsoft/terminal&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;terminal&lt;/a&gt; by &lt;a href=&#34;https://github.com/microsoft&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;microsoft&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;The new Windows Terminal and the original Windows console host, all in the same place!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Clean up Your Data Science with Named Tuples</title>
    <id>https://waylonwalker.com/named-tuples-data-science/</id>
    <updated>2019-09-11T00:00:00Z</updated>
    <published>2019-09-11T00:00:00Z</published>
    <link href="https://waylonwalker.com/named-tuples-data-science/" rel="alternate" type="text/html"></link>
    <summary type="text">If you are a regular listener of TalkPython or PythonBytes you have hear Michael Kennedy talk about Named Tuples many times, but what are they and how do...</summary>
    <content type="html">&lt;p&gt;If you are a regular listener of &lt;a href=&#34;https://talkpython.fm&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/talkpython.fm.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/talkpython.fm.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;TalkPython&lt;/a&gt; or PythonBytes you have hear Michael Kennedy talk about Named Tuples many times, but what are they and how do they fit into my data science workflow.&lt;/p&gt;&#xA;&lt;h2 id=&#34;example&#34;&gt;Example &lt;a href=&#34;#example&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As you graduate your scripts into modules and libraries you might start to notice that you need to pass a lot of data around to all of the functions that you have created. For example if you are running some analysis utilizing &lt;code&gt;sales&lt;/code&gt;, &lt;code&gt;inventory&lt;/code&gt;, and &lt;code&gt;pricing&lt;/code&gt; data.  You may need to calculate total revenue, inventory on hand.  You may need to pass these data sets into various models to drive production or pricing based on predicted volumes.&lt;/p&gt;&#xA;&lt;h2 id=&#34;load-data&#34;&gt;Load data &lt;a href=&#34;#load-data&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here we setup functions that can load data from the sales database.  Assume that we also have similar functions to &lt;code&gt;get_inventory&lt;/code&gt; and &lt;code&gt;get_pricing&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_engine&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;engine&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;create_engine&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;postgresql://scott:tiger@localhost:5432/mydatabase&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    gets sales history from the sales database&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;    &amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;engine&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_engine&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;engine&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;con&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;sql&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&amp;#39;select * from sales.history&amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;df&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read_sql&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sql&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;con&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;engine&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dispose&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;df&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_inventory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;get_pricing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;create-metrics&#34;&gt;Create Metrics &lt;a href=&#34;#create-metrics&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Here we create our first function to calculate some metrics.  There are likely many of these functions that repeat a similar pattern.  They use similar data and have their own custom logic for calculations and joins.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;calculate_total_revenue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pricing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;calculates the total sales revenue for all of company XYZ&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pricing&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set_index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sku&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sku&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;revenue&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;qty&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;price&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;revenue&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;calculate_inventory_sale_ratio&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inventory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pricing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;calculate_inventory_sale_ratio&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;inventory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Furthermore these functions will need to be called somewhere, this might be in a &lt;code&gt;make_report()&lt;/code&gt; function that puts this data into an &lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;html&lt;/a&gt; template to be sent out to stakeholders, or to be served on a website. Notice how we have the same data showing up time and time again.  And sometimes we even ask for it in a different order 😲.It is important to recognize this early in the project before this gets our of hand.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;make_report&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;():&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Makes stakeholder report for company XYZ&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;inventory&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_inventory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;pricing&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_pricing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;revenue&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;calculate_total_revenue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pricing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;sales_ratio&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inventory_sale_ratio&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inventory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pricing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;inventory_sale_ratio&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;inventory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;getting-out-of-hand&#34;&gt;getting out of hand &lt;a href=&#34;#getting-out-of-hand&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Along the way our features, models, and out supervisors have all had their own needs and we have added new datasets, and several flags. This is the point at which anxiety starts creeping in.  We start spending a lot of time double checking the order of each call to make sure that we dont make a mistake.  And when someone else touches this model, we know what it looks like and cant help but think, “Oh God I hope they didn’t screw up that horrid module!”&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;calculate_total_revenue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pricing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inventory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;stored_at&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;LAX&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;min_price&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;start_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;01-01-1999&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;end_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;01-01-3000&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pricing&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set_index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sku&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sku&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;inventory&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set_index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sku&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sku&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;revenue&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;qty&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;price&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;price &amp;gt; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;min_price&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sale_date &amp;gt; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;min_date&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sale_date &amp;lt; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;end_date&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;revenue&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;calculate_inventory_sale_ratio&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pricing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inventory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;stored_at&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;LAX&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;min_price&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;start_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;01-01-1999&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;end_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;01-01-3000&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;calculate_inventory_sale_ratio&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pricing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inventory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;stored_at&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;LAX&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;min_price&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;start_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;01-01-1999&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;end_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;01-01-3000&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;model_new_prices&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pricing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inventory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;stored_at&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;LAX&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;min_price&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;start_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;01-01-1999&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;end_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;01-01-3000&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;model_production&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pricing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inventory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;stored_at&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;LAX&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;min_price&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;start_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;01-01-1999&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;end_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;01-01-3000&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;completely_custom_metric_for_steve&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pricing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inventory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;stored_at&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;LAX&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;min_price&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;start_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;01-01-1999&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;end_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;01-01-3000&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Steve has been here 30 years and doesnt trust our metrics unless he can validate against the old metrics&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;It gets even crazier when you start calling all of these functions! Note that we have a common theme of the same data getting passed into&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;make_report&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stored_at&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;LAX&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;min_price&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;start_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;01-01-1999&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;end_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;01-01-3000&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;is_for_steve&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Makes stakeholder report for company XYZ&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;inventory&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_inventory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;pricing&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;get_pricing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;revenue&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;calculate_total_revenue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stored_at&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;LAX&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;min_price&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;start_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;01-01-1999&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;end_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;01-01-3000&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;sales_ratio&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sales_ratio&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inventory_sale_ratio&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stored_at&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;LAX&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;min_price&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;start_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;01-01-1999&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;end_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;01-01-3000&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;inventory_sale_ratio&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inventory_sale_ratio&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stored_at&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;LAX&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;min_price&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;start_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;01-01-1999&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;end_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;01-01-3000&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;predicted_prices&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;model_new_prices&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stored_at&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;LAX&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;min_price&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;start_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;01-01-1999&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;end_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;01-01-3000&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;predicted_production_rates&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;model_production_rate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stored_at&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;LAX&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;min_price&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;start_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;01-01-1999&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;end_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;01-01-3000&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;completely_custom_metric_for_steve&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stored_at&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;LAX&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;min_price&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;start_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;01-01-1999&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;end_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;01-01-3000&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# render report&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;this-code-stinks&#34;&gt;This code Stinks &lt;a href=&#34;#this-code-stinks&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;⌚ &lt;em&gt;Time for refactoring&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;While our code started out good it has grown stinky over time.  It will works fine, but it could be better and more enjoyable to work with.  What we have here is a code smell called &lt;code&gt;data clump&lt;/code&gt;.  This is a group of data that always appears together.  It would be appropriate to formally group this data together.  One way to do this in python is to use nametuples.  It is a very simple technique that allows us to define a data structure that contains a specific set of attributes that we can access using &lt;code&gt;.attribute_name&lt;/code&gt;.  Replacing this &lt;code&gt;data clump&lt;/code&gt; with a formal group of data will allow us to reduce the number of arguments in all of our functions. Add new attributes easily. And not rely on positional arguments.  This code will be easier to maintain, read, and write.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;What we have here is a code smell called &lt;code&gt;data clump&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;create a namedtuple&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;collections&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;namedtuple&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;ModelData&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;namedtuple&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;modin_data&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;sales pricing inventory stored_at min_price start_date end_date&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;use the namedtuple&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ModelData&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;pricing&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_pricing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;inventory&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;get_inventory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;stored_at&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;LAX&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;min_price&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;start_date&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;today&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;timedelta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;days&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;end_date&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;datetime&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;today&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;refactor functions&lt;/strong&gt;&#xA;Now that we have a clean data object how do we use it.  Simple, we pass in one data object, then access each attribute with the dot operator. These functions are now much cleaner to call and read.  Here I have chosen a poor name for our &lt;code&gt;data&lt;/code&gt;, but in a real scenario you may have multple &lt;code&gt;namedtuples&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;calculate_total_revenue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pricing&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set_index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sku&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sku&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;inventory&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set_index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sku&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sku&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;revenue&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;qty&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;price&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;price &amp;gt; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;min_price&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sale_date &amp;gt; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;min_date&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sale_date &amp;lt; &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;end_date&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sales&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;revenue&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;call the function&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now that all of the data is store in a single object it is really easy to call each of our functions using one data instance.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;make_report&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stored_at&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;LAX&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;min_price&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;start_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;01-01-1999&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;end_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;01-01-3000&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;is_for_steve&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;Makes stakeholder report for company XYZ&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ModelData&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stored_at&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;stored_at&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;min_price&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;min_price&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;start_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;start_date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;end_date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;end_date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;revenue&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;calculate_total_revenue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;sales_ratio&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sales_ratio&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inventory_sale_ratio&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;inventory_sale_ratio&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inventory_sale_ratio&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;predicted_prices&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;model_new_prices&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;predicted_production_rates&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;model_production_rate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;completely_custom_metric_for_steve&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# render report&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;-clean-up-your-data-science&#34;&gt;🧹 Clean up your data science &lt;a href=&#34;#-clean-up-your-data-science&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Named Tuples are a great way to clean up your data science code and reduce &lt;code&gt;Data Clumps&lt;/code&gt;.  Anytime you have multiple data sets that almost always get used together &lt;code&gt;namedtuple&lt;/code&gt;s are a great way to clean up your code, make it more readable and more maintainable.  If you find that you also have functions that are tightly coupled to this data you might want to consider using a &lt;code&gt;class&lt;/code&gt; instead of a &lt;code&gt;namedtuple&lt;/code&gt;, but that is for another article.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Background Tasks in Python for Data Science</title>
    <id>https://waylonwalker.com/python-data-science-background/</id>
    <updated>2019-09-10T05:00:00Z</updated>
    <published>2019-09-10T05:00:00Z</published>
    <link href="https://waylonwalker.com/python-data-science-background/" rel="alternate" type="text/html"></link>
    <summary type="text">This post is intended as an extension/update from background tasks in python. I started using the week that Kenneth Reitz released it. It takes away so much...</summary>
    <content type="html">&lt;p&gt;This post is intended as an extension/update from &lt;a href=&#34;https://waylonwalker.com/background-1/&#34;&gt;background tasks in&#xA;python&lt;/a&gt;.  I started using &lt;code&gt;background&lt;/code&gt;&#xA;the week that Kenneth Reitz released it.  It takes away so much boilerplate&#xA;from running background tasks that I use it in more places than I probably&#xA;should. After taking a look at that post today, I wanted to put a better data&#xA;science example in here to help folks get started.&lt;/p&gt;&#xA;&lt;p&gt;This post is intended as an extension/update from &lt;a href=&#34;https://waylonwalker.com/background-1/&#34;&gt;background tasks in python&lt;/a&gt;.  I started using &lt;code&gt;background&lt;/code&gt; the week that Kenneth Reitz released it.  It takes away so much boilerplate from running background tasks that I use it in more places than I probably should. After taking a look at that post today, I wanted to put a better data science example in here to help folks get started.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I use it in more places than I probably should&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Before we get into it, I want to make a shout out to Kenneth Reitz for making this so easy.  Kenneth is a python God for all that he has given to the community in so many ways, especially with his ideas in building stupid simple api’s for very complicated things.&lt;/p&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation &lt;a href=&#34;#installation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;install-via-pip&#34;&gt;install via pip &lt;a href=&#34;#install-via-pip&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre&gt;&lt;code&gt;pip install background&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3 id=&#34;install-via-github&#34;&gt;install via github &lt;a href=&#34;#install-via-github&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;I believe one of the later pr’s to the project fixes the way arguments are passed in.  I generally clone the repo or copy the module directly into my project.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;clone it&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;git clone https://github.com/ParthS007/background.git&#xA;cd background&#xA;python setup.py install&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;copy the module&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;curl https://raw.githubusercontent.com/ParthS007/background/master/background.py &amp;gt; background.py&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;-the-slow-function&#34;&gt;🐌 The Slow Function &lt;a href=&#34;#-the-slow-function&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Imagine that this function is a big one!  This function is fairly realistic as it takes in some input and returns a DataFrame.  This is what a good half of my fuctions do in data science.  The internals of this function generally will include a sql query, load from s3 or a data catalog, an aggregation from another DataFrame.  In general it should do one simple thing.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Feel Free to copy this “boilerplate”&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;background&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;time&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sleep&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pandas&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pd&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@background.task&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;long_func&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    Simulates fetching data from a service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    and returning a pandas DataFrame.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;sleep&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DataFrame&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;number_squared&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;calling-the-slow-function&#34;&gt;Calling the Slow Function &lt;a href=&#34;#calling-the-slow-function&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;it’s the future calling 🤙&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;If we were to call this function 10 times it would take 100s.  Not bad for a dumb example, but detrimental when this gets scaled up💥.  We want to utilize all of our available resources to reduce our development time and get moving on our project.&lt;/p&gt;&#xA;&lt;p&gt;Calling &lt;code&gt;long_func&lt;/code&gt; will return a future object.  This object has a number of methods that you can read about in the &lt;a href=&#34;https://docs.python.org/3/library/concurrent.futures.html#future-objects&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/docs.python.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/docs.python.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cpython docs&lt;/a&gt;.  The main one we are interested in is &lt;code&gt;result&lt;/code&gt;.  I typically call these functions many times and put them into a list object so that I can track their progress and get their results.  If you needed to map inputs back to the result use a dictionary.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;time&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;futures&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;long_func&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;CPU&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;times&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;user&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;319&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;µs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;197&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;µs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;total&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;516&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;µs&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Wall&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;212&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;µs&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;do-something-with-those-results&#34;&gt;Do something with those &lt;code&gt;results()&lt;/code&gt; &lt;a href=&#34;#do-something-with-those-results&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Simply running the function completes in no time! This is because the future objects that are returned are non blocking and will run in a background task using the &lt;code&gt;ProcessPoolExecutor&lt;/code&gt;.  To get the result back out we need to call the &lt;code&gt;result&lt;/code&gt; method on the future object.&lt;code&gt;result&lt;/code&gt; is a blocking function that will not realease until the function has completed.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;%%&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;time&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;futures&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;long_func&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;concat&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;future&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;future&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;futures&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;CPU&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;times&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;user&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;5.38&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ms&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.53&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ms&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;total&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;8.9&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ms&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Wall&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Note that this example completed in &lt;code&gt;10s&lt;/code&gt;, the time it took for only one run, not all 10! 😎&lt;/p&gt;&#xA;&lt;h2 id=&#34;n&#34;&gt;n &lt;a href=&#34;#n&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;😫 &lt;em&gt;crank it up&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;By default the number of parallel processes wil be equal to the number of cpu threads on your machine. To increase the number of parallel processes (&lt;code&gt;max_workers&lt;/code&gt;) set increase &lt;code&gt;background.n&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;is-it-possible-to-overruse-backgroundtask&#34;&gt;Is it possible to overruse @background.task? &lt;a href=&#34;#is-it-possible-to-overruse-backgroundtask&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I use this essentially anywhere that I cannot vectorize a python operation and push the compute down into those fast 💨 c extended libraries like numpy, and the operation takes more than a few minutes.  Nearly every big network request I make gets broken down into chunks and multithreaded.  Let me know… is is possible to overruse &lt;code&gt;@background.task&lt;/code&gt;? Let me know your thoughts &lt;a href=&#34;https://twitter.com/_WaylonWalker&#34;&gt;@_WaylonWalker&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;replit&#34;&gt;Repl.It &lt;a href=&#34;#replit&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Play with the code here!  Try different values of background.n and n_runs.&lt;/p&gt;&#xA;&lt;iframe height=&#34;800px&#34; width=&#34;100%&#34; src=&#34;https://replit.com/@WaylonWalker/TestRepl?lite=true&#34; scrolling=&#34;no&#34; frameborder=&#34;no&#34; allowtransparency=&#34;true&#34; allowfullscreen=&#34;true&#34; sandbox=&#34;allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts allow-modals&#34;&gt;&lt;/iframe&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ starship starship</title>
    <id>https://waylonwalker.com/starship-starship/</id>
    <updated>2019-09-08T21:23:03Z</updated>
    <published>2019-09-08T21:23:03Z</published>
    <link href="https://waylonwalker.com/starship-starship/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on starship, created by starship.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/starship/starship&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;starship&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/starship&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;starship&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;☄🌌️  The minimal, blazing-fast, and infinitely customizable prompt for any shell!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ alttch rapidtables</title>
    <id>https://waylonwalker.com/alttch-rapidtables/</id>
    <updated>2019-09-08T18:10:55Z</updated>
    <published>2019-09-08T18:10:55Z</published>
    <link href="https://waylonwalker.com/alttch-rapidtables/" rel="alternate" type="text/html"></link>
    <summary type="text">alttch has done a fantastic job with rapidtables. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/alttch&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;alttch&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/alttch/rapidtables&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rapidtables&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Super fast list of dicts to pre-formatted tables conversion library for Python 2/3&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>📝 Bash Notes</title>
    <id>https://waylonwalker.com/bash/</id>
    <updated>2019-09-08T05:00:00Z</updated>
    <published>2019-09-08T05:00:00Z</published>
    <link href="https://waylonwalker.com/bash/" rel="alternate" type="text/html"></link>
    <summary type="text">Waylon Walker&#39;s Bash Notes</summary>
    <content type="html">&lt;p&gt;Bash is super powerful.&lt;/p&gt;&#xA;&lt;h2 id=&#34;file-system-full&#34;&gt;File System Full &lt;a href=&#34;#file-system-full&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Show Remaining Space on Drives&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;df -h&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;show largest files in current directory&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;du . -h --max-depth&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Move files then symlink them&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir /mnt/mounted_drive&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv ~/bigdir /mnt/mounted_drive&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s /mnt/mounted_drive/bigdir ~/bigdir&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;fuzzy-one-liners&#34;&gt;Fuzzy One Liners &lt;a href=&#34;#fuzzy-one-liners&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;a&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; activate &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;conda info --envs &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fzf &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;print $&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;edit in vim&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vf&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt; fzf &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -r -I % &lt;span class=&#34;nv&#34;&gt;$EDITOR&lt;/span&gt; % &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;cat a file&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vf&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt; fzf &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -r -I % &lt;span class=&#34;nv&#34;&gt;$EDITOR&lt;/span&gt; % &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;bash execute&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bf&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt; bash &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;fzf&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; add&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gadd&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt; git status -s &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fzf -m &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $2}&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs git add &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; git status -s&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;git reset&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;greset&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt; git status -s &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;  fzf -m &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $2}&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;xargs git reset &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; git status -s&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Kill a process&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fkill&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;kill&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;ps aux &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fzf &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print($2)}&amp;#39;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;finding-things&#34;&gt;Finding things &lt;a href=&#34;#finding-things&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;files&#34;&gt;Files &lt;a href=&#34;#files&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/sharkdp/fd&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fd-find&lt;/a&gt; is amazing for finding files, it even respects your &lt;code&gt;.gitignore&lt;/code&gt; file 😲.  Install with &lt;code&gt;apt install fd-find&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fd md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ag -g python&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;find . -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;*.md&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;++Vanilla Bonus&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;content&#34;&gt;Content &lt;a href=&#34;#content&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;** show matching text **&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ag python&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grep -iR Python&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;++Vanilla Bonus&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;** show file names only **&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ag -l python&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grep -iRl python&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;++Vanilla Bonus&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;recursively-replace-text&#34;&gt;Recursively Replace text &lt;a href=&#34;#recursively-replace-text&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;agr&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;ag -l &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$2&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/g&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;++Vanilla Bonus&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grepr&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;grep -iRl &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$2&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/g&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Extending&lt;/strong&gt; &lt;code&gt;**agr**&lt;/code&gt; &lt;strong&gt;or&lt;/strong&gt; &lt;code&gt;**grepr**&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;There are so many options inside of &lt;code&gt;grep&lt;/code&gt;, &lt;code&gt;ag&lt;/code&gt;, and &lt;code&gt;sed&lt;/code&gt; that you could many an enormous amount of these if you really wanted to, but I like to keep it simple.  These cover 90% of my usage.  If I wanted to change something in the second half I would just paste in this command and edit it. More often though I want to limit the input, say only replace word1 to word2 inside of markdown files.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Limited Scope&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fd md &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs argr python python3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;find . -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;*.md&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs grepr python python3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;++Vanilla Bonus&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/refactor-in-cli/&#34; class=&#34;wikilink&#34; data-title=&#34;Large Refactor At The Command Line&#34; data-description=&#34;As projects grow patterns that worked early on break and we need to change things to make the project easier to work with, and more welcoming to new developers.&#34; data-date=&#34;2020-12-30&#34; data-preview=&#34;As projects grow patterns that worked early on break and we need to change things to make the project easier to work with, and more welcoming to new developers.&#34;&gt;Large Refactor At The Command Line&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I use these replace commands heavily when doing large refactorings.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;conditionally-configure&#34;&gt;conditionally configure &lt;a href=&#34;#conditionally-configure&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;I like this one when there is not a good cli into config files and I need to replace something like a true to false if the value is in the config and append to the config if its not.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grepr&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# replaces first string with second string inside file from third argument&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# example:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#   grepr &amp;#34;allow_conda_downgrades:.*&amp;#34; &amp;#34;allow_conda_downgrades: true&amp;#34; ~/.condarc&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; grep -xq &lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s|&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$2&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;|g&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$2&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; &lt;span class=&#34;nv&#34;&gt;$3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;watch-the-time&#34;&gt;Watch the time &lt;a href=&#34;#watch-the-time&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;watch -n &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; date&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;++Vanilla Bonus&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;with figlet&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;watch -n &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; bash -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;date | figlet&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;watch-a-function&#34;&gt;watch a function &lt;a href=&#34;#watch-a-function&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;run &lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;date&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aws s3 sync &lt;span class=&#34;nv&#34;&gt;$BUCKET&lt;/span&gt; .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; -f run&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;watch -n &lt;span class=&#34;m&#34;&gt;10&lt;/span&gt; run&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;if-conda-environment-does-not-exist-create-it&#34;&gt;if conda environment does not exist create it &lt;a href=&#34;#if-conda-environment-does-not-exist-create-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda info --envs &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep my_env &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;my_env environment is installed&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; conda create -n my_env &lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;3.8 -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; activate my_env&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;rename-multiple-files&#34;&gt;Rename multiple files&lt;/h1&gt;&#xA;&lt;p&gt;more info from &lt;a href=&#34;https://linuxize.com/post/how-to-rename-files-in-linux/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/linuxize.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/linuxize.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;linuxize&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; f in *.png&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   mv &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt; prefix-&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;using-the-rename-command&#34;&gt;using the rename command &lt;a href=&#34;#using-the-rename-command&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install rename&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rename &lt;span class=&#34;s2&#34;&gt;&amp;#34;s/.GIF/.gif/&amp;#34;&lt;/span&gt; *.GIF&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;convert-all-files-in-a-directory-to-unix&#34;&gt;convert all files in a directory to unix &lt;a href=&#34;#convert-all-files-in-a-directory-to-unix&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dos2unix **/*&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;recursively-remove-all-whitespace-from-py-files&#34;&gt;recursively remove all whitespace from .py files &lt;a href=&#34;#recursively-remove-all-whitespace-from-py-files&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;find **/*.py -type f -exec sed -i &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/ *$//&amp;#39;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;{}&amp;#39;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;recursively-autopep8&#34;&gt;recursively autopep8 &lt;a href=&#34;#recursively-autopep8&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;find&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;*.py&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exec&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;autopep8&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;place&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt; \&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;make-bash-script-a-runnable-command&#34;&gt;make bash script a runnable command &lt;a href=&#34;#make-bash-script-a-runnable-command&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;include a shebang&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#! /bin/bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;chmod&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod +x /usr/local/bin/my_script&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;accept positional input&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#! /bin/bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; input&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;using-pyp&#34;&gt;Using pyp &lt;a href=&#34;#using-pyp&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx install pyp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;replacement-for-cut&#34;&gt;replacement for cut &lt;a href=&#34;#replacement-for-cut&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ python -m http.server &lt;span class=&#34;m&#34;&gt;5000&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;1&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;8574&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;✦ ❯ Serving HTTP on 0.0.0.0 port &lt;span class=&#34;m&#34;&gt;5000&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;http://0.0.0.0:5000/&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;✦ ❯ ps aux &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s2&#34;&gt;&amp;#34;python -m http.server&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -v grep &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; pyp &lt;span class=&#34;s1&#34;&gt;&amp;#39;line.split()[1]&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs &lt;span class=&#34;nb&#34;&gt;kill&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;1&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  + terminated  python -m http.server &lt;span class=&#34;m&#34;&gt;5000&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;replacement-for-wc&#34;&gt;replacement for wc &lt;a href=&#34;#replacement-for-wc&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda info --envs &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; pyp &lt;span class=&#34;s1&#34;&gt;&amp;#39;len(lines) - 3 # account for header and base&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;print-contents-of-shell-function&#34;&gt;print contents of shell function &lt;a href=&#34;#print-contents-of-shell-function&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;declare&lt;/span&gt; -f &amp;lt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt;-name&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;batch-rename-files&#34;&gt;batch rename files &lt;a href=&#34;#batch-rename-files&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; f in *.jpeg&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    mv -- &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;%.jpeg&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;.jpg&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;convert-markdown-files-to-revealjs&#34;&gt;convert markdown files to reveal.js &lt;a href=&#34;#convert-markdown-files-to-revealjs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/jgm/pandoc/wiki/Using-pandoc-to-produce-reveal.js-slides&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/jgm/pandoc/wiki/Using-pandoc-to-produce-reveal.js-slides&lt;/a&gt;{.hoverlink}&#xA;install pandoc&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install pandoc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;setup&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://github.com/hakimel/reveal.js/archive/master.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -xzvf master.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv reveal.js-master reveal.js&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;convert&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pandoc -t revealjs -s -o myslides.html myslides.md -V revealjs-url&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;https://unpkg.com/reveal.js@3.9.2/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;render-markdown-at-the-command-line&#34;&gt;Render Markdown at the command line &lt;a href=&#34;#render-markdown-at-the-command-line&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/charmbracelet/glow&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Glow&lt;/a&gt; is a terminal markdown renderer written in go.  There iis a prebuilt binary that can simply be unzipped and executed to render markdow.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://github.com/charmbracelet/glow/releases/download/v0.2.0/glow_0.2.0_linux_x86_64.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -xzf glow_0.2.0_linux_x86_64.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod +x glow&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mv glow /usr/bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;glow &amp;lt;filename&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;autocomplete-for-click-applications&#34;&gt;Autocomplete for click applications &lt;a href=&#34;#autocomplete-for-click-applications&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;see the &lt;a href=&#34;https://click.palletsprojects.com/en/7.x/bashcomplete/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/click.palletsprojects.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/click.palletsprojects.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;docs&lt;/a&gt; for more details&lt;/p&gt;&#xA;&lt;h2 id=&#34;autocomplete-for-non-click-python-clis&#34;&gt;Autocomplete for non click python cli’s &lt;a href=&#34;#autocomplete-for-non-click-python-clis&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;shtab &lt;a href=&#34;https://github.com/iterative/shtab&#34; title=&#34;https://github.com/iterative/shtab&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/iterative/shtab&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;ensure-functions-reset-context&#34;&gt;Ensure functions reset context &lt;a href=&#34;#ensure-functions-reset-context&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;project_log&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nv&#34;&gt;_dir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;pwd&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   _project_log&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ~/projects/project&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      git log&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   _project_log &lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$_dir&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$_dir&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;finding-files&#34;&gt;Finding Files &lt;a href=&#34;#finding-files&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rg --files . &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rg --files . &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; rg bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rg --files . &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; ag bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rg --files . &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fzf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rg -e &lt;span class=&#34;s1&#34;&gt;&amp;#39;hook&amp;#39;&lt;/span&gt; -g &lt;span class=&#34;s1&#34;&gt;&amp;#39;*.md&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rg -e &lt;span class=&#34;s1&#34;&gt;&amp;#39;hook&amp;#39;&lt;/span&gt; -g &lt;span class=&#34;s1&#34;&gt;&amp;#39;*.py&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rg --files-with-matches&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rg --files-without-match&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;mu-repo&#34;&gt;mu-repo &lt;a href=&#34;#mu-repo&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# installation&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install mu-repo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;## register repos&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mu register --recursive&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mu list&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# run git commands&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mu status --short&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mu diff -U0 --color &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bat&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# run shell commands&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mu sh &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;grep -iRl &lt;span class=&#34;s2&#34;&gt;&amp;#34;KEDRO_GID=0&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s/KEDRO_GID=0/KEDRO_GID=5/g&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/mu-repo/&#34; class=&#34;wikilink&#34; data-title=&#34;Maintianing multiple git repos with mu-repo&#34; data-description=&#34;bash&#34; data-date=&#34;2021-06-10&#34; data-preview=&#34;bash&#34;&gt;Maintianing multiple git repos with mu-repo&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;See the full post for mu-repo for more&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;mu-unregister-all&#34;&gt;mu unregister all &lt;a href=&#34;#mu-unregister-all&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I ran into some issues with mu unregister * before, but this seems to work everywhere.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mu list &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tail -n +3 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -I &lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt; mu unregister &lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;mu-register-all-repos-that-have-an-rg-match&#34;&gt;mu register all repos that have an rg match &lt;a href=&#34;#mu-register-all-repos-that-have-an-rg-match&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Add all repos that have a versionspec of 3.7 in them.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rg --hidden&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;versionSpec:.*.3.7&amp;#39;&lt;/span&gt; -l &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -I &lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt; mu register &lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;xrandr&#34;&gt;xrandr &lt;a href=&#34;#xrandr&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xrandr -s 1920x1080&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Autoreload in Ipython</title>
    <id>https://waylonwalker.com/autoreload-ipython/</id>
    <updated>2019-09-08T05:00:00Z</updated>
    <published>2019-09-08T05:00:00Z</published>
    <link href="https://waylonwalker.com/autoreload-ipython/" rel="alternate" type="text/html"></link>
    <summary type="text">Autoreload in python</summary>
    <content type="html">&lt;p&gt;I have used &lt;code&gt;%autoreload&lt;/code&gt; for several years now with great success and 🔥 rapid reloads.  It allows me to move super fast when developing libraries and modules.  They have made some great updates this year that allows class modules to be automatically be updated.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-i-like-about-autoreload&#34;&gt;What I like about autoreload &lt;a href=&#34;#what-i-like-about-autoreload&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;🔥 Blazing Fast&lt;/p&gt;&#xA;&lt;p&gt;💥 Keeps me in the comfort of my text editor&lt;/p&gt;&#xA;&lt;p&gt;👏 Allows me to use Jupyter when I need&lt;/p&gt;&#xA;&lt;p&gt;👟 Extremely Reliable&lt;/p&gt;&#xA;&lt;p&gt;One of the biggest benefits that I find is that it shortens the distance between my module/library code and test code inside of a terminal/notebook.  Now I primarily use jupyter notebooks for the presentation aspect.  I develop code from the comfort of my editor with all of the tools I have setup, and run the functions in a notebook to get the output.  From there I might do some aggregations or plots, but the 🥩 meat of development is done outside of jupyter.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Now I primarily use jupyter notebooks for the presentation aspect.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;enabling-autoreload&#34;&gt;Enabling Autoreload &lt;a href=&#34;#enabling-autoreload&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;📐 &lt;em&gt;config&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a short script that I use to setup ipython so that it automatically reloads modules.  This allows me to use a separate terminal and editor, and keep data in memory while developing functions.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ipython profile create&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then edit the created file &lt;code&gt;~/.ipython/profile_default/ipython_config.py&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;InteractiveShellApp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extensions&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;autoreload&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;InteractiveShellApp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exec_lines&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%a&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;utoreload 2&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;InteractiveShellApp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exec_lines&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;print(&amp;#34;Warning: disable autoreload in ipython_config.py to improve performance.&amp;#34;)&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;according-to-the-docs&#34;&gt;According to the docs &lt;a href=&#34;#according-to-the-docs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://ipython.org/ipython-doc/3/config/extensions/autoreload.html#caveats&#34; title=&#34;IPython caveats&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/ipython.org.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/ipython.org.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;autoreload caveates&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Some of the known remaining caveats are:&lt;/p&gt;&#xA;&lt;p&gt;Replacing code objects does not always succeed: changing a @property in a class to an ordinary method or a method to a member variable can cause problems (but in old objects only).&#xA;Functions that are removed (eg. via monkey-patching) from a module before it is reloaded are not upgraded.&#xA;C extension modules cannot be reloaded, and so cannot be autoreloaded.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;so-what-can-gets-updated&#34;&gt;So what can gets updated?? &lt;a href=&#34;#so-what-can-gets-updated&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;🤲 &lt;em&gt;Nearly everything…&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;new/updated functions&lt;/li&gt;&#xA;&lt;li&gt;new/updated functions&lt;/li&gt;&#xA;&lt;li&gt;new/updated class methods&lt;/li&gt;&#xA;&lt;li&gt;new/updated class attributes&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;what-does-not-get-updated&#34;&gt;What does not get updated &lt;a href=&#34;#what-does-not-get-updated&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;🔄 &lt;em&gt;needs restart&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;config&lt;/strong&gt; files that are side loaded with modules typically do not get updated in my experience, and I tend to restart the session.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;init&lt;/strong&gt; class methods do not get reran, but the session does not need to be reloaded.  The class instance will just need to be re-instanciated.&lt;/p&gt;&#xA;&lt;h2 id=&#34;testing-out-the-capabilities&#34;&gt;Testing out the capabilities &lt;a href=&#34;#testing-out-the-capabilities&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;💨 &lt;em&gt;Watch&lt;/em&gt; it go&lt;/p&gt;&#xA;&lt;p&gt;Here is a gif of me taking autoreload out for a test drive.  When creating the session test_autoreload.py does not even exist. From there new functions, classes, attributes, and methods are added in the file and all live reload into ipython.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/test_autoreload4.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/test_autoreload4.gif&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;&lt;em&gt;for more gifs like these follow me on twitter&lt;/em&gt; &lt;a href=&#34;https://twitter.com/_WaylonWalker&#34;&gt;&lt;em&gt;@waylonwalker&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;what-about-jupyter-notebooks&#34;&gt;What About Jupyter Notebooks???? &lt;a href=&#34;#what-about-jupyter-notebooks&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;💥 &lt;em&gt;Exactly the Same&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Since jupyter uses ipython in be background Jupyter will use the same &lt;code&gt;ipython_config.py&lt;/code&gt; file to have autoreload enabled by default.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/test_autoreload_jupyter.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/test_autoreload_jupyter.gif&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;&lt;em&gt;for more gifs like these follow me on twitter&lt;/em&gt; &lt;a href=&#34;https://twitter.com/_WaylonWalker&#34;&gt;&lt;em&gt;@waylonwalker&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;go-use-it-now&#34;&gt;Go use it now &lt;a href=&#34;#go-use-it-now&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Take the splash into rapid development of python functions with minimal distance between your modules/library and your ipython/jupyter session.&lt;/p&gt;&#xA;&lt;h2 id=&#34;want-automatic-imports&#34;&gt;Want automatic imports?? &lt;a href=&#34;#want-automatic-imports&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/pyflyby/&#34; class=&#34;wikilink&#34; data-title=&#34;Smoother Python with automatic imports | pyflyby&#34; data-description=&#34;This is not a flaky works half the time kind of plugin, it&amp;#39;s a seriously smooth editing experience. I&amp;#39;ve just started using pyflyby, and it is solid so far....&#34; data-date=&#34;2021-12-20&#34; data-preview=&#34;This is not a flaky works half the time kind of plugin, it&amp;#39;s a seriously smooth editing experience. I&amp;#39;ve just started using pyflyby, and it is solid so far....&#34;&gt;Smoother Python with automatic imports | pyflyby&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This article covers how I setup automatic imports in ipython&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ giampaolo psutil</title>
    <id>https://waylonwalker.com/giampaolo-psutil/</id>
    <updated>2019-09-07T20:41:41Z</updated>
    <published>2019-09-07T20:41:41Z</published>
    <link href="https://waylonwalker.com/giampaolo-psutil/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on psutil, created by giampaolo.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/giampaolo/psutil&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;psutil&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/giampaolo&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;giampaolo&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Cross-platform lib for process and system monitoring in Python&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ zenika-open-source promote-open-source-project</title>
    <id>https://waylonwalker.com/zenika-open-source-promote-open-source-project/</id>
    <updated>2019-09-06T04:27:58Z</updated>
    <published>2019-09-06T04:27:58Z</published>
    <link href="https://waylonwalker.com/zenika-open-source-promote-open-source-project/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on promote-open-source-project, created by zenika-open-source.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/zenika-open-source/promote-open-source-project&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;promote-open-source-project&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/zenika-open-source&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;zenika-open-source&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;📄 How to promote my open source project?&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ kislyuk watchtower</title>
    <id>https://waylonwalker.com/kislyuk-watchtower/</id>
    <updated>2019-09-05T13:58:07Z</updated>
    <published>2019-09-05T13:58:07Z</published>
    <link href="https://waylonwalker.com/kislyuk-watchtower/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out watchtower by kislyuk. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/kislyuk/watchtower&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;watchtower&lt;/a&gt; by &lt;a href=&#34;https://github.com/kislyuk&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kislyuk&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;Python CloudWatch Logging: Log Analytics and Application Intelligence&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ apache arrow</title>
    <id>https://waylonwalker.com/apache-arrow/</id>
    <updated>2019-08-31T12:06:54Z</updated>
    <published>2019-08-31T12:06:54Z</published>
    <link href="https://waylonwalker.com/apache-arrow/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered arrow by apache, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/apache/arrow&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;arrow&lt;/a&gt; by &lt;a href=&#34;https://github.com/apache&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;apache&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;Apache Arrow is the universal columnar format and multi-language toolbox for fast data interchange and in-memory analytics&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ sharkdp shell-functools</title>
    <id>https://waylonwalker.com/sharkdp-shell-functools/</id>
    <updated>2019-08-10T09:53:24Z</updated>
    <published>2019-08-10T09:53:24Z</published>
    <link href="https://waylonwalker.com/sharkdp-shell-functools/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred shell-functools by sharkdp. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/sharkdp/shell-functools&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;shell-functools&lt;/a&gt; by &lt;a href=&#34;https://github.com/sharkdp&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sharkdp&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;Functional programming tools for the shell&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Keyboard Driven VSCode</title>
    <id>https://waylonwalker.com/keyboard-driven-vscode/</id>
    <updated>2019-07-07T05:00:00Z</updated>
    <published>2019-07-07T05:00:00Z</published>
    <link href="https://waylonwalker.com/keyboard-driven-vscode/" rel="alternate" type="text/html"></link>
    <summary type="text">Reimagining my tmux configuration inside of vscode.</summary>
    <content type="html">&lt;blockquote&gt;&#xA;&lt;p&gt;Throw that mouse Away its time to setup some keyboard shortcuts.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;These sortcuts were the baseline for switching from tmux/vim to vscode.  Most folks posts I was able to find gave great tips on replacing vim, but very few have focused on the hackability of tmux.  tmux allows me to rapidly fire up a workspace, create new windows and splits.  Then When I switch tasks I can leave that workspace open and and jump right back in later exactly where I left off.  There is nothing quite like it.  The shortcuts listed here make the transition a bit better. The worst thing I found when using vscode at first was no way to switch between the terminal and editor without the mouse.  This first set of keybindings solve that issue.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The worst thing I found when using vscode at first was no way to switch between the terminal and editor without the mouse.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;!!! see-also&#xA;I have an updated article in my tmux workflow &lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;althjkl&#34;&gt;Alt+[hjkl] &lt;a href=&#34;#althjkl&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;navigation&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;⬅ jump to &lt;strong&gt;left&lt;/strong&gt; split &lt;strong&gt;alt+h&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;⬇ jump to &lt;strong&gt;terminal&lt;/strong&gt; from editor &lt;strong&gt;alt+j&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;⬆ jump to &lt;strong&gt;editor&lt;/strong&gt; from terminal &lt;strong&gt;alt+k&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;➡ jump to &lt;strong&gt;right&lt;/strong&gt; split &lt;strong&gt;alt+l&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is by var the most useful set of keybindings that I use in vscode and is directly replicated from my tmux configuration.  It allows me to quickly jump up, down, left, right.  Do note that if you use vertical splits it does not work as well as tmux 😢.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/alt%20%5Bhjkl%5D.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/alt%20%5Bhjkl%5D.gif&#34; alt=&#34;navigating vscode with keyboard shortcuts&#34;/ data-glightbox=&#34;description: navigating vscode with keyboard shortcuts&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+j&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.terminal.focus&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;editorFocus&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+k&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.focusFirstEditorGroup&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;terminalFocus&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+k&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.focusAboveGroup&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;editorFocus&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+l&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;-toggleFindInSelection&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;editorFocus&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+l&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.focusNextGroup&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;editorFocus&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+h&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.focusPreviousGroup&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;editorFocus&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+l&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.terminal.focusNextPane&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;terminalFocus&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+h&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.terminal.focusPreviousPane&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;terminalFocus&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;altb&#34;&gt;Alt+b &lt;a href=&#34;#altb&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;toggle bloat&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Since closing the sidebar is assigned to &lt;code&gt;ctrl+b&lt;/code&gt; I thought that it made most sense to simulate the activity bar with &lt;code&gt;alt+b&lt;/code&gt;.  There are many times when I just want to get as much out of the way as possible and this little bit does help.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/alt%20b.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/alt%20b.gif&#34; alt=&#34;hiding the activity bar &#34;/ data-glightbox=&#34;description: hiding the activity bar&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+b&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.toggleActivityBarVisibility&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;editorFocus&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;altsvx&#34;&gt;Alt+[svx] &lt;a href=&#34;#altsvx&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Split it up&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;🙌 Split hoizontally &lt;strong&gt;alt+s&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;🍌 Vertically &lt;strong&gt;alt+v&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;💥 Close &lt;strong&gt;alt+x&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is another one replicated from tmux for quickly creatiting horizontal (s) and vertical (v) splits.  Once I am done with them I can close them with alt+x.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/alt%20%5Bsvx%5D.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/alt%20%5Bsvx%5D.gif&#34; alt=&#34;Make and destroy splits with ease in vscode.&#34;/ data-glightbox=&#34;description: Make and destroy splits with ease in vscode.&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+s&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.terminal.split&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;terminalFocus&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+s&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.splitEditor&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;editorFocus&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+v&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.splitEditorOrthogonal&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;editorFocus&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+x&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.terminal.kill&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;terminalFocus&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+x&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.closeActiveEditor&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;editorFocus&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;altcnp&#34;&gt;Alt+[cnp] &lt;a href=&#34;#altcnp&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;🤲 &lt;strong&gt;Create&lt;/strong&gt; new workspace &lt;strong&gt;alt+c&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;⏭ jump to &lt;strong&gt;next&lt;/strong&gt; workspace &lt;strong&gt;alt+n&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;⏮ jump to &lt;strong&gt;previous&lt;/strong&gt; workspace &lt;strong&gt;alt+p&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Sometimes the terminal window gets a bit cramped inside of splits and you need to use different panes.  I replicated the cnp pattern from tmux here as well.  I can create (c) new panes, then go to the next (n), or previous (p) without leaving the comfort of my keyboard.&lt;/p&gt;&#xA;&lt;p&gt;I am often using this one when I have a process running that I watch like gatsby, and I need to quickly pop into a new pane to run a &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; command and back in to gatsby before jumping up to my editor.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/alt%20%5Bcnp%5D.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/alt%20%5Bcnp%5D.gif&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+c&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.terminal.new&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;terminalFocus&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.terminal.focusNext&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;terminalFocus&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+p&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.terminal.focusPrevious&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;terminalFocus&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;altz&#34;&gt;Alt+z &lt;a href=&#34;#altz&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;🗻 Zoom into terminal &lt;strong&gt;alt+z&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This last one doesnt work as well as I would like but it sure does get the job done.  It Zooms (z) into the terminal from anywhere in vscode.  I can be in my editor and zoom out of the terminal to make more room, or zoom in to see what happened from my last edit.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;![](&lt;a href=&#34;https://images.waylonwalker.com/alt&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/images.waylonwalker.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/images.waylonwalker.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://images.waylonwalker.com/alt&lt;/a&gt; z.gif)&#xA;&lt;/figure&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+z&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.toggleMaximizedPanel&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;bonus&#34;&gt;Bonus &lt;a href=&#34;#bonus&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;altr&#34;&gt;Alt+r &lt;a href=&#34;#altr&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;🖱 right click in place&lt;/p&gt;&#xA;&lt;p&gt;I recently found this one, and find it quite useful to quickly do things like revert selected range, or extract variable without leaving the keyboard.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+r&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;editor.action.showContextMenu&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ burglarbenson Jupyter-Atom-Dark-Theme</title>
    <id>https://waylonwalker.com/burglarbenson-jupyter-atom-dark-theme/</id>
    <updated>2019-06-28T14:41:20Z</updated>
    <published>2019-06-28T14:41:20Z</published>
    <link href="https://waylonwalker.com/burglarbenson-jupyter-atom-dark-theme/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? Jupyter-Atom-Dark-Theme by burglarbenson.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/burglarbenson/Jupyter-Atom-Dark-Theme&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Jupyter-Atom-Dark-Theme&lt;/a&gt; by &lt;a href=&#34;https://github.com/burglarbenson&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;burglarbenson&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A dark theme for Jupyter Lab&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tarpas pytest-testmon</title>
    <id>https://waylonwalker.com/tarpas-pytest-testmon/</id>
    <updated>2019-06-20T01:09:33Z</updated>
    <published>2019-06-20T01:09:33Z</published>
    <link href="https://waylonwalker.com/tarpas-pytest-testmon/" rel="alternate" type="text/html"></link>
    <summary type="text">tarpas has done a fantastic job with pytest-testmon. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/tarpas&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tarpas&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/tarpas/pytest-testmon&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pytest-testmon&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Selects tests affected by changed files. Executes the right tests first. Continuous test runner when used with pytest-watch.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ rbong vim-flog</title>
    <id>https://waylonwalker.com/rbong-vim-flog/</id>
    <updated>2019-06-19T18:11:59Z</updated>
    <published>2019-06-19T18:11:59Z</published>
    <link href="https://waylonwalker.com/rbong-vim-flog/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on vim-flog, created by rbong.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/rbong/vim-flog&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vim-flog&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/rbong&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rbong&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A blazingly fast, stunningly beautiful, exceptionally powerful &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; branch viewer for Vim/Neovim.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ mcfunley pugsql</title>
    <id>https://waylonwalker.com/mcfunley-pugsql/</id>
    <updated>2019-05-30T17:14:14Z</updated>
    <published>2019-05-30T17:14:14Z</published>
    <link href="https://waylonwalker.com/mcfunley-pugsql/" rel="alternate" type="text/html"></link>
    <summary type="text">I like mcfunley&#39;s project pugsql.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/mcfunley&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mcfunley’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/mcfunley/pugsql&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pugsql&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A HugSQL-inspired database library for Python&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ggreer the_silver_searcher</title>
    <id>https://waylonwalker.com/ggreer-the_silver_searcher/</id>
    <updated>2019-05-30T16:15:33Z</updated>
    <published>2019-05-30T16:15:33Z</published>
    <link href="https://waylonwalker.com/ggreer-the_silver_searcher/" rel="alternate" type="text/html"></link>
    <summary type="text">I like ggreer&#39;s project the_searcher.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/ggreer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ggreer’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/ggreer/the_silver_searcher&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;the_silver_searcher&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A code-searching tool similar to ack, but faster.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Realistic Git Workflow</title>
    <id>https://waylonwalker.com/realistic-git-workflow/</id>
    <updated>2019-05-27T00:00:00Z</updated>
    <published>2019-05-27T00:00:00Z</published>
    <link href="https://waylonwalker.com/realistic-git-workflow/" rel="alternate" type="text/html"></link>
    <summary type="text">My git workflow based on real life. Its not always clean and simple.</summary>
    <content type="html">&lt;p&gt;My &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; workflow based on real life.  Its  not always clean and simple.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;sometimes things get messy&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-clean-path&#34;&gt;The Clean Path &lt;a href=&#34;#the-clean-path&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/akira-hojo-652732-unsplash.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/akira-hojo-652732-unsplash.jpg&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;&lt;strong&gt;pull 👉 branch 👉 format 👉 work👉 add 👉 commit 👉 pull 👉 rebase 👉 push&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;iframe src=&#34;./clean&#34; height=&#34;400&#34; width=&#34;800&#34; frameborder=&#34;None,&#34;&gt;&#xA;&lt;h3 id=&#34;pull&#34;&gt;Pull &lt;a href=&#34;#pull&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;As complicated as that seems it is pretty straight forward.  When you sit down to work the first thing you do is to &lt;strong&gt;pull&lt;/strong&gt; down the teams latest working &amp;ldquo;develop&amp;rdquo; branch from git.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;git checkout develop&#xA;git pull&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3 id=&#34;branch&#34;&gt;Branch &lt;a href=&#34;#branch&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Next create a new branch with a name that will remind you of what you are working on.  For your own sanity choose something descriptive. It is easy to get too many similar branches going and forget which branch is which.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;git checkout -b ingest_product_id_table&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3 id=&#34;format&#34;&gt;Format &lt;a href=&#34;#format&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;If you know which files in existance that you will be editing before you start work it is a good idea to format them in a commit early on to keep your working commits separate from formatting.  This will make it easier for reviewers to distinguish from your changes and formatting fixes.&lt;/p&gt;&#xA;&lt;p&gt;If your team agrees to a consistent formatting logic, sticks to it and always remembers to run the linting/fixing tools you should not have anything to  change.  But thats not what this post is about, its about the real world.  People forget to run linters, some don&amp;rsquo;t care, some may not even be aware of the teams formatting guidelines.  Talk to your team about these things and get on the same page.&lt;/p&gt;&#xA;&lt;p&gt;I care about formatting, we all should.  We want to put out the best work we can in  our craft.  Realistically though I dont really care about nit picky stuff, I just want things consistant so that it makes things easier to read without me taking the time to swap  out quotes, and fix line spacing. I want a tool to do it for me, and when that tool runs I dont want it mixing in the same commit as my work.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;black .&#xA;git add .&#xA;git commit -m &amp;quot;FIX formatted with black&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3 id=&#34;work&#34;&gt;Work &lt;a href=&#34;#work&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Make your changes to your code, test them, document them, clean it up, do what you do best.&lt;/p&gt;&#xA;&lt;h3 id=&#34;add-and-commit&#34;&gt;add and commit &lt;a href=&#34;#add-and-commit&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Next you will need to stage files that have changed for commit, and commit them.  This can be done in stages to make it clear what the progression was to finish the task you were assigned.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;add all files&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;    git add .&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;add a single file&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;git add &amp;quot;path/to/myfile.ext&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;one line commit message&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Here make sure that you create clear messages so that others know.  There are whole posts out there showing how to better write clear commit messages and why you should, check out those posts for more information.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;git commit -m &amp;quot;FEAT ingested product id table on pipeline&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;multi-line commit message&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you want some more information in your commit message run &lt;code&gt;git commit&lt;/code&gt; without &lt;code&gt;-m&lt;/code&gt; and it will pop you into your configured git editor, which is vim by default.&lt;/p&gt;&#xA;&lt;h3 id=&#34;super-quick-vim-primer&#34;&gt;Super quick vim primer &lt;a href=&#34;#super-quick-vim-primer&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;By default when you run &lt;code&gt;git commit&lt;/code&gt; you will pop into a vim editor and may want to throw your keyboard before you figure out exactly how to get out of the damn thing.  First type &lt;code&gt;i&lt;/code&gt; to insert text.  Type out your commit message. Then hit &lt;code&gt;esc&lt;/code&gt; followed by &lt;code&gt;:x&lt;/code&gt;.  This is the most basic things you need, and will get you through a commit message.  Vim is a whole topic on its own.&lt;/p&gt;&#xA;&lt;h3 id=&#34;integrate-your-changes&#34;&gt;Integrate your changes &lt;a href=&#34;#integrate-your-changes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Now that you have made your changes and commited them its time to integrate them into the codebase so that everyone else can see them.  It is likely that time has gone by, and others have made changes to the codebase since you have, so you will want to pull those down first then switch back to your branch.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;git checkout develop&#xA;git pull&#xA;git checkout ingest_product_id_table&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now you have the latest code changes and your work locally.  I prefer to rebase my work with the develop branch, pretending that I started my work after all of the other changes had occurred.  You can choose to merge, but I prefer not to have the extra merge commits in my PR.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;git rebase develop&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3 id=&#34;push&#34;&gt;push &lt;a href=&#34;#push&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Now its time to push out to the remote repository and create your PR.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;git push --set-upstream ingest_product_id_table&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Open your repository in your web browser and you should see that you have just pushed to a new branch and a  button to open a Pull Request (PR).&lt;/p&gt;&#xA;&lt;h3 id=&#34;your-not-done-yet&#34;&gt;Your Not Done yet &lt;a href=&#34;#your-not-done-yet&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Opening a PR is not a done deal, it starts the conversation to get your code approved to be merged into the develop or main branch.  Your approver may have an idea to clean it up to make it more readable/maintainable, or something to make it more performant.  Remember that a second set of eyes sometimes has a new set of clarity that you do not as you have seen the work from start to end.  At this point they may request changes, discussion, or choose to accept and merge it in.&lt;/p&gt;&#xA;&lt;h2 id=&#34;realistically&#34;&gt;Realistically &lt;a href=&#34;#realistically&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;We all hit some pitfalls along the way&lt;/em&gt;&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/ian-espinosa-177961-unsplash.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/ian-espinosa-177961-unsplash.jpg&#34; alt=&#34;&#34; data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Things get dirty, the clean path is not always the path that is taken, but with git we can clean up our mess and make it look that way.&lt;/p&gt;&#xA;&lt;h2 id=&#34;i-started-working-from-maindevelop-before-branching&#34;&gt;I started working from main/develop before branching &lt;a href=&#34;#i-started-working-from-maindevelop-before-branching&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Pitfall #1&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is my most common pitfall.  I get really excited to start work and jump right in.  Then when I go to make some commits I see that &lt;code&gt;main&lt;/code&gt; branch staring me right in the face from my bash prompt.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;stash those changes away&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;git stash&#xA;git checkout -b feature_branch&#xA;git stash pop&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;want to see what changes you have stashed away&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;git stash list&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;i-committed-to-the-wrong-branch&#34;&gt;I committed to the wrong branch &lt;a href=&#34;#i-committed-to-the-wrong-branch&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Pitfall #2&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Create a new branch&lt;/strong&gt;&#xA;&lt;em&gt;Solution #1&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;It is common that I just forget to switch from the main/develop branch into my feature branch before starting work. You will first need to look at your &lt;code&gt;git log&lt;/code&gt; and determine how many commits to go back or a git hash to go back to.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;CAUTION&lt;/strong&gt; &lt;code&gt;git reset --hard&lt;/code&gt; will kill changes and you will never get them back if you did not first put them somewhere.  I myself have been burned by this command, there is no recovering from a &lt;strong&gt;hard&lt;/strong&gt; reset.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;git log&#xA;# note commit hash or ~n to go back to&#xA;git branch feature_branch&#xA;git reset --hard HEAD ~3&#xA;# or&#xA;git reset --hard a1b2c4d4&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Move to an Existing Branch&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Sometimes when juggling many different features we are in the middle of several branches and forget to switch between them.  If its the case that you already have a &lt;code&gt;feature_branch&lt;/code&gt; for the feature that you are working on, you can use this solution.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;git status&#xA;# note current_branch&#xA;git checkout feature_branch&#xA;git merge current_branch&#xA;git reset --hard HEAD ~3&#xA;# or&#xA;git reset --hard a1b2c4d4&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;another-feature-was-complete-before-mine&#34;&gt;Another feature was complete before mine &lt;a href=&#34;#another-feature-was-complete-before-mine&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;pitfall #3&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;This can be a big matter of preference of how to deal with this just google &lt;code&gt;merge&lt;/code&gt; vs &lt;code&gt;rebase&lt;/code&gt;.  For this particular pitfall I prefer to &lt;strong&gt;&lt;code&gt;rebase&lt;/code&gt;&lt;/strong&gt;.  When you look at the git log and commit history it will appear as if you made your changes after everyone else made theirs.  I do this to clean up the PR and make it easier for the approver to read.  There will be less merge commits, and less history to try to understand.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Before pushing to the remote repository&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git fetch --all&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# or&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout develop&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git pull&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout feature_branch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git rebase develop&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;if its your first rodeo&lt;/strong&gt; or you are unsure how the rebase will go you can create a safty branch.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git branch saftey_feature_branch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git fetch --all&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git rebase develop&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git branch -D safety_feature_branch &lt;span class=&#34;c1&#34;&gt;# deletes safety_feature_branch&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/iframe&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ kedro-org kedro</title>
    <id>https://waylonwalker.com/kedro-org-kedro/</id>
    <updated>2019-05-20T12:11:42Z</updated>
    <published>2019-05-20T12:11:42Z</published>
    <link href="https://waylonwalker.com/kedro-org-kedro/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred kedro by kedro-org. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/kedro-org/kedro&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro&lt;/a&gt; by &lt;a href=&#34;https://github.com/kedro-org&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kedro-org&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;Kedro is a toolbox for production-ready data science. It uses software engineering best practices to help you create data engineering and data science pipelines that are reproducible, maintainable, and modular.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ forestryio forestry.io</title>
    <id>https://waylonwalker.com/forestryio-forestry-io/</id>
    <updated>2019-05-18T16:03:31Z</updated>
    <published>2019-05-18T16:03:31Z</published>
    <link href="https://waylonwalker.com/forestryio-forestry-io/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out forestryio and their project forestry.io.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/forestryio&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;forestryio&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/forestryio/forestry.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;forestry.io&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Forestry.io website&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ chris104957 maildown</title>
    <id>https://waylonwalker.com/chris104957-maildown/</id>
    <updated>2019-05-10T02:14:36Z</updated>
    <published>2019-05-10T02:14:36Z</published>
    <link href="https://waylonwalker.com/chris104957-maildown/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out maildown by chris104957. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/chris104957/maildown&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;maildown&lt;/a&gt; by &lt;a href=&#34;https://github.com/chris104957&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;chris104957&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;A super simple CLI for sending emails&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Forestry.io</title>
    <id>https://waylonwalker.com/forestry-io/</id>
    <updated>2019-04-23T08:02:00Z</updated>
    <published>2019-04-23T08:02:00Z</published>
    <link href="https://waylonwalker.com/forestry-io/" rel="alternate" type="text/html"></link>
    <summary type="text">Creating Posts from forestry.io.</summary>
    <content type="html">&lt;p&gt;Testing out forestry.io&lt;/p&gt;&#xA;&lt;h2 id=&#34;sorry-netlify-cms&#34;&gt;Sorry Netlify CMS &lt;a href=&#34;#sorry-netlify-cms&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;I still ♥️ your product dont be&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;forestry is simple&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I have been playing with the netlify cms for a while now, and it has been a decent experience, but I &lt;strong&gt;really&lt;/strong&gt; struggle configuring it.   Forestry is so simple to setup.  My favorite part is that I can code up my gatsby.js site, storing all editable text in markdown, and come back later and add the CMS based on existing documents.&lt;/p&gt;&#xA;&lt;h2 id=&#34;configuration-is-simple&#34;&gt;Configuration is Simple &lt;a href=&#34;#configuration-is-simple&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Forestry.io has this amazing feature to create &lt;em&gt;create based on existing document&lt;/em&gt; 🤯.  This is great because it sets up the &lt;code&gt;.yml&lt;/code&gt; config for me without error.  And If I really want to come back later to customize it more I have that option, too.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/Screenshot_20190503-165248.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/Screenshot_20190503-165248.jpg&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;By far my favorite feature is &lt;em&gt;create based on existing document&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;multi-file-gallery&#34;&gt;Multi-File Gallery &lt;a href=&#34;#multi-file-gallery&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have a use case for a photography site where the owner wants to be able to show off sample photos of each type of work she does.  I got it working in the netlify cms, although it was not very user friendly.  Everything was nested in an accordian 😢.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/Screenshot_20190507-144948.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/Screenshot_20190507-144948.png&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Netlify multi image upload&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Next I looked into forestry.io.  I pointed forestry.io at the existing &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; repo, created a template based on an existing document and &lt;strong&gt;BAM&lt;/strong&gt;💥 a nice image grid appeared.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/Screenshot_20190507-145044.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/Screenshot_20190507-145044.png&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Forestry multi image gallery&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;editor&#34;&gt;Editor &lt;a href=&#34;#editor&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The forestry.io editor is on point.  I can choose to edit using the WYSIWYG editor and still use markdown syntax!  I can edit in markdown.  I can add images without fat-fingering the path and screwing up the whole post.  Its amazing!&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;![](&lt;a href=&#34;https://images.waylonwalker.com/2019-05-09&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/images.waylonwalker.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/images.waylonwalker.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://images.waylonwalker.com/2019-05-09&lt;/a&gt; 10-40-11_forestry.io.png)&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;images&#34;&gt;Images &lt;a href=&#34;#images&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Image upload is on point!  Just click the add image button, it pops you into your media library, choose an image, or upload it, and you’re off to the races 🏇.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;/forestry_image_3.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;/forestry_image_3.gif&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;im-sold-&#34;&gt;Im Sold 💲 &lt;a href=&#34;#im-sold-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;At this point, I am sold. This blog is now written from Forestry, and I love it.  It’s great when I am away from my editor to make some progress on the go.  If I decide I dont like it in 6 months, I can move on. All of my content is still in markdown on the git repo.&lt;/p&gt;&#xA;&lt;p&gt;Forestry.io is missing the nice side-by-side preview that netlify cms has, but honestly, I have struggled to set that up, too.  If I am being honest, I just play front end developer on the side, and setting up a CMS is not something that I plan on doing every day.  I am perfectly happy having some gui tools, like forestry.io, setup all of the configuration for me with just a few clicks.&lt;/p&gt;&#xA;&lt;h2 id=&#34;bonus&#34;&gt;Bonus &lt;a href=&#34;#bonus&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Preview is Nice 👌.  Without configuring anything except a bash one-liner, I have a preview that is not quite instant, but does kick out my actual site with updated content quickly.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ wesbos eslint-config-wesbos</title>
    <id>https://waylonwalker.com/wesbos-eslint-config-wesbos/</id>
    <updated>2019-03-13T11:40:54Z</updated>
    <published>2019-03-13T11:40:54Z</published>
    <link href="https://waylonwalker.com/wesbos-eslint-config-wesbos/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred eslint-config-wesbos by wesbos. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/wesbos/eslint-config-wesbos&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;eslint-config-wesbos&lt;/a&gt; by &lt;a href=&#34;https://github.com/wesbos&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;wesbos&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;No-Sweat™ Eslint and Prettier Setup - with or without VS Code&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ydataai ydata-profiling</title>
    <id>https://waylonwalker.com/ydataai-ydata-profiling/</id>
    <updated>2019-03-11T16:42:52Z</updated>
    <published>2019-03-11T16:42:52Z</published>
    <link href="https://waylonwalker.com/ydataai-ydata-profiling/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out ydataai and their project ydata-profiling.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/ydataai&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ydataai&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/ydataai/ydata-profiling&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ydata-profiling&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;1 Line of code data quality profiling &amp;amp; exploratory data analysis for Pandas and Spark DataFrames.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Data-Centric-AI-Community ydata-profiling</title>
    <id>https://waylonwalker.com/data-centric-ai-community-ydata-profiling/</id>
    <updated>2019-03-11T16:42:52Z</updated>
    <published>2019-03-11T16:42:52Z</published>
    <link href="https://waylonwalker.com/data-centric-ai-community-ydata-profiling/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across ydata-profiling from Data-Centric-AI-Community, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/Data-Centric-AI-Community/ydata-profiling&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ydata-profiling&lt;/a&gt; from &lt;a href=&#34;https://github.com/Data-Centric-AI-Community&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Data-Centric-AI-Community&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;1 Line of code data quality profiling &amp;amp; exploratory data analysis for Pandas and Spark DataFrames.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ mdbartos tabview</title>
    <id>https://waylonwalker.com/mdbartos-tabview/</id>
    <updated>2019-03-04T19:27:01Z</updated>
    <published>2019-03-04T19:27:01Z</published>
    <link href="https://waylonwalker.com/mdbartos-tabview/" rel="alternate" type="text/html"></link>
    <summary type="text">mdbartos has done a fantastic job with tabview. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/mdbartos&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mdbartos&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/mdbartos/tabview&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tabview&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Python curses command line CSV viewer&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ TabViewer tabview</title>
    <id>https://waylonwalker.com/tabviewer-tabview/</id>
    <updated>2019-03-04T17:30:58Z</updated>
    <published>2019-03-04T17:30:58Z</published>
    <link href="https://waylonwalker.com/tabviewer-tabview/" rel="alternate" type="text/html"></link>
    <summary type="text">TabViewer has done a fantastic job with tabview. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/TabViewer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;TabViewer&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/TabViewer/tabview&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tabview&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Python curses command line CSV and tabular data viewer&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ LukeSmithxyz voidrice</title>
    <id>https://waylonwalker.com/lukesmithxyz-voidrice/</id>
    <updated>2019-03-04T15:50:24Z</updated>
    <published>2019-03-04T15:50:24Z</published>
    <link href="https://waylonwalker.com/lukesmithxyz-voidrice/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across voidrice from LukeSmithxyz, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/LukeSmithxyz/voidrice&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;voidrice&lt;/a&gt; from &lt;a href=&#34;https://github.com/LukeSmithxyz&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;LukeSmithxyz&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;My dotfiles (deployed by LARBS)&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ FormidableLabs webpack-dashboard</title>
    <id>https://waylonwalker.com/formidablelabs-webpack-dashboard/</id>
    <updated>2019-02-09T15:33:40Z</updated>
    <published>2019-02-09T15:33:40Z</published>
    <link href="https://waylonwalker.com/formidablelabs-webpack-dashboard/" rel="alternate" type="text/html"></link>
    <summary type="text">I like FormidableLabs&#39;s project webpack-dashboard.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/FormidableLabs&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;FormidableLabs’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/FormidableLabs/webpack-dashboard&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;webpack-dashboard&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A CLI dashboard for webpack dev server&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Rewrite History with Git</title>
    <id>https://waylonwalker.com/git-rewrite-history/</id>
    <updated>2019-02-05T00:00:00Z</updated>
    <published>2019-02-05T00:00:00Z</published>
    <link href="https://waylonwalker.com/git-rewrite-history/" rel="alternate" type="text/html"></link>
    <summary type="text">git commit --amend</summary>
    <content type="html">&lt;ul&gt;&#xA;&lt;li&gt;rebase&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; commit –amend&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;unstage&#34;&gt;Unstage &lt;a href=&#34;#unstage&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git reset -- &amp;lt;file&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;rage&lt;/strong&gt; unstage to wipte out history of staged commit&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git reset --hard &amp;lt;file&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;undo-file&#34;&gt;Undo file &lt;a href=&#34;#undo-file&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;rage quit&lt;/li&gt;&#xA;&lt;li&gt;git reset HEAD~n &lt;file&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;removes modifications&lt;/li&gt;&#xA;&lt;li&gt;keeps hitsory of changes and undoes them&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/file&gt;&lt;/li&gt;&#xA;&lt;li&gt;git checkout HEAD~n – &lt;file&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;keeps modifications&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;removes history&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;–SOFT&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;–HARD&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;–Mixed&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/file&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;undo-n-commits-back&#34;&gt;undo n commits back &lt;a href=&#34;#undo-n-commits-back&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;locally before push&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git reset HEAD~n&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;after push&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git revert HEAD~n&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;update-gitignore&#34;&gt;update .gitignore &lt;a href=&#34;#update-gitignore&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;after push&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git rm -r --cached .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -am &lt;span class=&#34;s2&#34;&gt;&amp;#34;Updated .gitignore&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>It&#39;s not all about winning</title>
    <id>https://waylonwalker.com/journey/</id>
    <updated>2019-02-02T00:00:00Z</updated>
    <published>2019-02-02T00:00:00Z</published>
    <link href="https://waylonwalker.com/journey/" rel="alternate" type="text/html"></link>
    <summary type="text">This is my story into data science.</summary>
    <content type="html">&lt;p&gt;&lt;em&gt;This is my story into data science.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-journey-begins&#34;&gt;The Journey Begins &lt;a href=&#34;#the-journey-begins&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I am addicted to the process of learning and improving my skills nearly to a fault. The reason I say nearly is because my addiction is fueled with results. I crave the output of my work enhance the work of others. I jump with joy as I see users gain insights they could have never imagined before. My mouth starts watering as I see their boring repetitive data mining activites be completed in a matter of seconds, opening up their mind to focus on their expertise. The day I stop learning will be the day that I start looking for another career path.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It’s not all about winning.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;~Mom&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;This happened to me in 2014. I have a mechanical engineering degree and had a really good position at the time. I owned full engineering control of a small subset of engine components. The problem was that Everything is so proprietary and hardly documented the process of learning did not click with me. I felt like I had learned a lot about the product early on, and was stuck without any more resources to learn more. On the side, I had started learning python and data science techniques to enhance my job.&lt;/p&gt;&#xA;&lt;!--&#xA;[mountains in the fog](https://d33wubrfki0l68.cloudfront.net/a093e6c28214bb9556a4e877f5d128cf77b82bd3/9c5c4/static/eberhard-grossgasteiger-382452-unsplash-6f1eb07825ef1b2165ea1a3805fff023.jpg)&#xA;--&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;every time I feel like I have reached the peak of anyone topic the fog clears and I can now see a whole new mountain range that I did not know existed.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I was addicted. I felt like there is so much knowledge easily obtained online in my free time, and I was able to take it back to my job and achieve results. Every time I feel like I have reached the peak of anyone’s topic the fog clears and I can now see a whole new mountain range that I did not know existed.&lt;/p&gt;&#xA;&lt;h2 id=&#34;love-the-journey&#34;&gt;Love the Journey &lt;a href=&#34;#love-the-journey&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;By 2017 I was really good at gaining results for our business and decided to make the jump to the data science team. I have achieved great results, and have been recognized as a high contributor to our business. Still, I do not feel like I have won. My goals are always moving and will always be 3-6 months ahead of me. I truly enjoy the process of learning and providing value so much that I will never let myself sit back and think that I have won and its time to reap the rewards of my hard work. I will say that I am winning. Not because of any results, awards, or recognition, but because I am happy. I have found a career path that I really enjoy the journey and I am not just trying to get on the fast track to a destination.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ yuki-yano fzf-preview.vim</title>
    <id>https://waylonwalker.com/yuki-yano-fzf-preview-vim/</id>
    <updated>2019-02-01T13:08:57Z</updated>
    <published>2019-02-01T13:08:57Z</published>
    <link href="https://waylonwalker.com/yuki-yano-fzf-preview-vim/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? fzf-preview.vim by yuki-yano.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/yuki-yano/fzf-preview.vim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fzf-preview.vim&lt;/a&gt; by &lt;a href=&#34;https://github.com/yuki-yano&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;yuki-yano&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The plugin that powerfully integrates fzf and (Neo)vim. It is also possible to integrate with coc.nvim.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ ParthS007 background</title>
    <id>https://waylonwalker.com/parths007-background/</id>
    <updated>2019-01-30T15:40:36Z</updated>
    <published>2019-01-30T15:40:36Z</published>
    <link href="https://waylonwalker.com/parths007-background/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on background, created by ParthS007.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/ParthS007/background&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;background&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/ParthS007&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ParthS007&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Runs things in the background.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ JedWatson react-select</title>
    <id>https://waylonwalker.com/jedwatson-react-select/</id>
    <updated>2019-01-26T15:37:15Z</updated>
    <published>2019-01-26T15:37:15Z</published>
    <link href="https://waylonwalker.com/jedwatson-react-select/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on react-select by JedWatson.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/JedWatson/react-select&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;react-select&lt;/a&gt; by &lt;a href=&#34;https://github.com/JedWatson&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;JedWatson&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The Select Component for React.js&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ TaDaa vimade</title>
    <id>https://waylonwalker.com/tadaa-vimade/</id>
    <updated>2019-01-26T14:19:16Z</updated>
    <published>2019-01-26T14:19:16Z</published>
    <link href="https://waylonwalker.com/tadaa-vimade/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered vimade by TaDaa, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/TaDaa/vimade&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vimade&lt;/a&gt; by &lt;a href=&#34;https://github.com/TaDaa&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;TaDaa&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;Vimade let’s you dim, fade, tint, animate, and customize colors in your windows and buffers for (Neo)vim&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Update Git User</title>
    <id>https://waylonwalker.com/git-update-user/</id>
    <updated>2019-01-21T00:00:00Z</updated>
    <published>2019-01-21T00:00:00Z</published>
    <link href="https://waylonwalker.com/git-update-user/" rel="alternate" type="text/html"></link>
    <summary type="text">This morning I log into my VCS and check activity on my projects to find that ** has been _ active on my projects fo the last few weeks. I quicklyhover over...</summary>
    <content type="html">&lt;p&gt;This morning I log into my VCS and check activity on my projects to find that &lt;strong&gt;someone else&lt;/strong&gt; has been &lt;em&gt;very&lt;/em&gt; active on my projects fo the last few weeks. I quicklyhover over the missing avatar to find that &lt;strong&gt;It’s Me&lt;/strong&gt;.  What’s wrong here, why do I look like two different people throughout the day!  upon further investigation I see the issue.  while setting up a new terminal environment I mistyped my email address by &lt;strong&gt;one character&lt;/strong&gt;.  After much searching and a few failed attempts I was able to fix it by following an article no longer available (2021) from &lt;a href=&#34;https://help.github.com/articles&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/help.github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/help.github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://help.github.com/articles&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;bare-clone&#34;&gt;Bare Clone &lt;a href=&#34;#bare-clone&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Clone the repo, note it must be a &lt;code&gt;--bare&lt;/code&gt; clone.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone --bare https://github.com/user/repo.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; repo.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;&lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt;-author-rewrite&#34;&gt;git-author-rewrite &lt;a href=&#34;#git-author-rewrite&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Curl down the &lt;code&gt;git-author-rewrite&lt;/code&gt; script and edit the following variables &lt;code&gt;OLD_EMAIL&lt;/code&gt; &lt;code&gt;CORECT_NAME&lt;/code&gt; &lt;code&gt;CORRECT_EMAIL&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl https://gist.githubusercontent.com/octocat/0831f3fbd83ac4d46451/raw/c197afe3e9ea2e4218f9fccbc0f36d2b8fd3c1e3/git-author-rewrite.sh &amp;gt; git-author-rewrite.sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Run the script, and push the updates.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bash git-author-rewrite.sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git push --force --tags origin &lt;span class=&#34;s1&#34;&gt;&amp;#39;refs/heads/**&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;cleanup&#34;&gt;Cleanup &lt;a href=&#34;#cleanup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Delete the &lt;code&gt;--bare&lt;/code&gt; repo from your local machine.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ..&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -rf repo.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I hope this helps someone, or future me who needs to fix their information in git.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2019 goals</title>
    <id>https://waylonwalker.com/goals-2019/</id>
    <updated>2019-01-12T00:00:00Z</updated>
    <published>2019-01-12T00:00:00Z</published>
    <link href="https://waylonwalker.com/goals-2019/" rel="alternate" type="text/html"></link>
    <summary type="text">2019 goals</summary>
    <content type="html">&lt;style&gt;&#xA;strong {&#xA;    /* color: goldenrod; */&#xA;    /* text-shadow: 0rem 1px 1px goldenrod; */&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;p&gt;&lt;em&gt;The year of intenionality&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is a follow up to my previous post &lt;a href=&#34;https://waylonwalker.com/2018-retrospective/&#34;&gt;2018-retrospective&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;professional&#34;&gt;professional &lt;a href=&#34;#professional&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This year I will become more productive, by intensionally working on a well thought out plan, learning the right technologies, and leave behind a positive legacy.&lt;/p&gt;&#xA;&lt;h3 id=&#34;productivity&#34;&gt;Productivity &lt;a href=&#34;#productivity&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Last year I was able to make some great strides in my productivity and focus.  This year I want to be able to bring it up a notch.  &lt;strong&gt;Intentionality&lt;/strong&gt; plays a big part in this.  Taking some time to sit down and think about the tasks you realistically want to complete for the day, then focusing on those tasks one at a time.&lt;/p&gt;&#xA;&lt;p&gt;I started off the year last year using the &lt;strong&gt;pomodoro&lt;/strong&gt; system to focus on one task and one task only for 25 minutes at a time.  This worked really well for me but I quickly fell off of the train and fell into my old trap of reacting to the loudest customer over the items I put &lt;strong&gt;intensionally&lt;/strong&gt; on my todo list.&lt;/p&gt;&#xA;&lt;p&gt;A &lt;strong&gt;kanban&lt;/strong&gt; system is key to keeping it intentional.  I currently use a very simple trello system, with very few cards.  This helps to stay on track during those 25 minutes.  During the pomodoro session I move an item from todo, to doing, work that item, then move it to done when it is ready.  The only other thing that I can do during that time is to add items to the todo list.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;pomodoro&#xA;&lt;ul&gt;&#xA;&lt;li&gt;8 pomodori&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Daily session planning&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Back on inbox zero&lt;/li&gt;&#xA;&lt;li&gt;todo’s go in kanban not inbox&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h3 id=&#34;leave-a-legacy&#34;&gt;Leave a Legacy &lt;a href=&#34;#leave-a-legacy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;I want to leave behind a legacy that I can be proud of. I want to be known for bringing a positive attitude that inspires others to do their best work, enourage others, and work as a team.  It is in my blood to help as many people as I can.  I am in a unique role and have a unique skill set that allows me to do what would take some hours and days in minutes and hours.  I really enjoy helping these folks, but I know many of them are smart enough to do it on their own, they just do not know where to get started.  For this reason I really want to amp up my docs this year.  I want people to be able to answer 80% of their questions right from the docs before needing to come to me to get started.  I want this to be part of the legacy that I leave with my projects for the next person that encounters them.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;better docs&#xA;&lt;ul&gt;&#xA;&lt;li&gt;80% oss questions should be answered&lt;/li&gt;&#xA;&lt;li&gt;finish pea course&lt;/li&gt;&#xA;&lt;li&gt;all projects have docs page with link by Feb&lt;/li&gt;&#xA;&lt;li&gt;consistent docs format&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;bring positivity to the workplace&lt;/li&gt;&#xA;&lt;li&gt;blog weekly (52)&#xA;&lt;ul&gt;&#xA;&lt;li&gt;lower barier to entry&lt;/li&gt;&#xA;&lt;li&gt;consistently work on writing skills&lt;/li&gt;&#xA;&lt;li&gt;12 Medium/LinkedIn&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h3 id=&#34;educational&#34;&gt;Educational &lt;a href=&#34;#educational&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Last year I made monumental improvements to my web development while continuing to hone my backend skills.  This year I want to amp up my web front end skills even more. I am finding this to be an area that not very many people in my organization have and I can knock out some simple projects really quick and gain a lot of value.  Last year I started using &lt;strong&gt;react&lt;/strong&gt; as a front end framework.  I want to double down learning the intricicies of how it works, and how to effectively layout a react project. I also want to keep upping my design skills.  As I do more layouts I find that they are easier and easier to layout, and as I am able to get them out faster it give me more time to hone in the design. Lastly I want to continue honing in my backend skills.  Working with data pipelines, Linux command line, the cloud, and database architecture.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Advanced React &lt;em&gt;dynamic web applications&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;Refactoring UI &lt;em&gt;Rethinking how to layout data in logical ways&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;Service Workies&lt;/li&gt;&#xA;&lt;li&gt;AWS?? &lt;em&gt;we are moving to the cloud&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;Continue Leveling up Linux Command Line&lt;/li&gt;&#xA;&lt;li&gt;Data Pipeline&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;personal&#34;&gt;Personal &lt;a href=&#34;#personal&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;At home I want to continue being a positive person.  Home is much harder to keep up a good attitude.  Mostly because I care more about my family and its harder to walk away and forget about a bad interaction with them.  I want to make sure that we keep up more positive interactions together as that will help everyone keep the positive attitude.  Lastly I would like to keep in touch with family better.  Rhiannon really loves a nice message to boost her day.  I would like to send her a few longer messages per week, and to one other family member at least once per week.  This can be in the form of a text, email, or hard copy letter in the mail.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;be your best&#xA;&lt;ul&gt;&#xA;&lt;li&gt;+3 positives everyday (300+)&lt;/li&gt;&#xA;&lt;li&gt;gratitude daily (300+)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;5 languages&lt;/li&gt;&#xA;&lt;li&gt;letters to family&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;&lt;strong&gt;Bring it on 2019&lt;/strong&gt;  I am ready to take it on!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ engineer-man youtube</title>
    <id>https://waylonwalker.com/engineer-man-youtube/</id>
    <updated>2019-01-06T23:23:53Z</updated>
    <published>2019-01-06T23:23:53Z</published>
    <link href="https://waylonwalker.com/engineer-man-youtube/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out engineer-man and their project youtube.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/engineer-man&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;engineer-man&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/engineer-man/youtube&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;youtube&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Code from the Engineer Man YouTube channel. Please do not submit pull requests, they will be ignored/closed. The code in the repo needs to remain as it was in the video.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2018 Retrospective</title>
    <id>https://waylonwalker.com/2018-retrospective/</id>
    <updated>2019-01-05T00:00:00Z</updated>
    <published>2019-01-05T00:00:00Z</published>
    <link href="https://waylonwalker.com/2018-retrospective/" rel="alternate" type="text/html"></link>
    <summary type="text">2018 was a year of many ups and downs, and learning to deal with a whole new set of problems professionally and at home. In 2018 I logged in to my first...</summary>
    <content type="html">&lt;p&gt;2018 was a year of many ups and downs, and learning to deal with a whole new&#xA;set of problems professionally and at home.  In 2018 I logged in to my first&#xA;Linux system, setup my own webserver, data pipelines, database. I learned to&#xA;use react and d3. Stepped up my python, javascript, and sql.&lt;/p&gt;&#xA;&lt;p&gt;At home the doctor appointments keep piling in.  While I am learning to deal&#xA;with it all there were several times throughout the year that I was very&#xA;overwhelmed  with everything and broke down.&lt;/p&gt;&#xA;&lt;p&gt;Here are the goals I had listed out for 2018 and how I faired at completing&#xA;them.&lt;/p&gt;&#xA;&lt;h3 id=&#34;positivity&#34;&gt;Positivity &lt;a href=&#34;#positivity&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h4 id=&#34;the-good&#34;&gt;The Good &lt;a href=&#34;#the-good&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;hr/&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Continue “Favorite Things” with family at dinner time&lt;/li&gt;&#xA;&lt;li&gt;Take 2 10min breaks per day clear the mind&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;I can say that the kids are fully on board with favorite things and love to&#xA;tell everyone about how their day went.  This is a time that they are very&#xA;positive and generally give praise to another family member for helping them&#xA;through their day.&lt;/p&gt;&#xA;&lt;h4 id=&#34;to-be-improved&#34;&gt;To Be Improved &lt;a href=&#34;#to-be-improved&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;hr/&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Gratitude journaling every day&lt;/li&gt;&#xA;&lt;li&gt;Snooze Less be productive&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;I hit 61  gratitude journals in 2018.  I would not say that I met my goal, but&#xA;I would definitely say that it’s a great start and is something that I plan on&#xA;improving next year.  I really like how it helps me focus on the positive&#xA;things that happened throughout the day to find the best gratitude journal&#xA;subject.  I do think the quick five minute deadline helps in that I have to be&#xA;semi-prepared, which forces me to think about gratitude throughout the day.&lt;/p&gt;&#xA;&lt;h3 id=&#34;focus&#34;&gt;Focus &lt;a href=&#34;#focus&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Mediocore performance??&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;8 pomodoro&lt;/li&gt;&#xA;&lt;li&gt;up to date kanban&lt;/li&gt;&#xA;&lt;li&gt;daily/weekly planning session&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;In 2018 I wanted to set out some goals to be more focused with the time that I&#xA;do have at work.  I did quite a bit of research for the best techniques&#xA;throughout December, and found a system that works well for me.  I did keep up&#xA;with the &lt;em&gt;kanban&lt;/em&gt; system througout the year with trello.  I did not live by the&#xA;board, but i did put things on there and move them.  The big thing that I found&#xA;with this system is that it really made me &lt;strong&gt;feel&lt;/strong&gt; productive, and gave me&#xA;motivation to keep going.  While tracking my tasks throughout the day I was&#xA;able to really see progress at the end of the day, and go home knowing I did&#xA;some good work rather than feeling “Where did this day go?”.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I am putting this back in for 2019, and I will learn to concur them.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I completely fell off of the pomodoro system.  I really feel like this system&#xA;works for me and keeps me on task, I really have issues with task jumping.  It&#xA;is really hard to keep on it when there are so many distractions throughout the&#xA;day.  I am putting this back in for 2019, and I will learn to concur them.  The&#xA;biggest challenge is people.  I have a lot of people stop by for a quick answer&#xA;or to chat about a project.  I really need to set strong boundaries and tell&#xA;them in X minutes I can talk, right now I am busy.&lt;/p&gt;&#xA;&lt;h3 id=&#34;physical-health&#34;&gt;Physical Health &lt;a href=&#34;#physical-health&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;hr/&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;active 3 days a week… 🤔&lt;/li&gt;&#xA;&lt;li&gt;eat better 👍&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;I will admit that I was not very measurable with “eat better”, but I would say&#xA;that I have done well.  I have really incorporated quite a few more vegetables&#xA;into my diet, even when everyone else at the table isn’t.  I throw some frozen&#xA;brocoli in the microwave.  I have even started choosing vegan options at&#xA;restaurants occasionally.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;As different things started taking over my time I was back off the wagon.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I started running in the March timeframe, and really enjoyed it.  As different&#xA;things started taking over my time I was back off the wagon.  Overall I would&#xA;say that I am still active 3 or so days of the week with the kids.&lt;/p&gt;&#xA;&lt;h3 id=&#34;educational&#34;&gt;Educational &lt;a href=&#34;#educational&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Continuous Learning is something that I am really passionate for.  I truly&#xA;believe in always learning from experiences, taking classes, watching&#xA;conferences, listening to podcasts and reading blogs&lt;/p&gt;&#xA;&lt;h4 id=&#34;the-good-&#34;&gt;The Good 👍 &lt;a href=&#34;#the-good-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;&lt;em&gt;4 official courses completed&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;d3 in 5 days&lt;/li&gt;&#xA;&lt;li&gt;flexbox zombies&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://cssgrid.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/cssgrid.io.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/cssgrid.io.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://cssgrid.io&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;datacamp sql&lt;/li&gt;&#xA;&lt;li&gt;linux command line (many blogs/youtube… not a course)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;I really stepped up my &lt;strong&gt;front end web skills&lt;/strong&gt; this past year. I have started&#xA;using es6, react, and building interactive web visualizations, laid out with&#xA;native modern css.  These are things that I loosely understood in the past and&#xA;really relied on libraries like &lt;code&gt;bokeh&lt;/code&gt; or &lt;code&gt;dash&lt;/code&gt; to get them to work right.&lt;/p&gt;&#xA;&lt;p&gt;I can also say that I have stopped google searching for every simple sql query&#xA;that I write, Goal Complete.  I would say that I went beyond my sql goal in&#xA;that I have learned to do far more than I realized was possible in the&#xA;database, dramatically improving performance of my products.  I have also&#xA;become the go to guy for reading/writing more complex queries.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Before 2018 I had never experienced the glory of the linux command line.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Before 2018 I had never experienced the glory of the linux command line.&#xA;Around May I was graced with a small on premis red hat virtual machine and my&#xA;mind was quickly blown.  Many things that I have struggled to get up and&#xA;working on windows simply worked right out of the box.  Webserver, task&#xA;scheduling, 100% availability, and a great command line.  By the end of the&#xA;year I installed Debian (wsl) on my windows machine and have converted all of&#xA;my command line applications/languages to run from there, as there are far&#xA;fewer compatability issues..&lt;/p&gt;&#xA;&lt;h4 id=&#34;the-flop&#34;&gt;The flop &lt;a href=&#34;#the-flop&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;&lt;em&gt;planned coursed not completed&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;R&lt;/li&gt;&#xA;&lt;li&gt;Machine Learning&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;Honestly I am not really hurt by not completing this one.  I really feel like I&#xA;learned a ton of useful skills this year and I feel like neither of these two&#xA;would have helped me progress.  R is too close to python to need both in my&#xA;toolbelt without a specific project/need for it.  I did not have any projects&#xA;with a dire need for ML.  I really hope to start getting some experience with&#xA;it so I can have a better understanding when I should use it, but it was not a&#xA;big need in any of my projects this year.&lt;/p&gt;&#xA;&lt;p&gt;Overall I am really happy with the progress from this year, and can’t wait to&#xA;get started next year.  Having the past few weeks off has really given me time&#xA;for a reset that I didn’t realize I needed.  Looking at these goals reminds me&#xA;of the things that had started slipping towards the end during that last hard&#xA;push to the end.&lt;/p&gt;&#xA;&lt;p&gt;🎉🎉 Hapy New Year 🎉🎉&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Do More of What Brings You Joy</title>
    <id>https://waylonwalker.com/happy/</id>
    <updated>2019-01-01T00:00:00Z</updated>
    <published>2019-01-01T00:00:00Z</published>
    <link href="https://waylonwalker.com/happy/" rel="alternate" type="text/html"></link>
    <summary type="text">happiness in the workplace</summary>
    <content type="html">&lt;p&gt;Today I want to take some time to talk about the things that make me happy in my work environment.  This is completely free-flow off the cuff, but are things that I do that make me happy, not having them would definitely be a deal breaker for me .&lt;/p&gt;&#xA;&lt;h3 id=&#34;attitude&#34;&gt;Attitude &lt;a href=&#34;#attitude&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;A positive work atmosphere goes a long ways.  We all have enough negativity going on in our lives that is out of our control accepting any negativity in the workplace is a no go for me.  There was a point in which I was suffering a lot of negativity at work.  This began to trickle into every part of life, and it became hard to see positivity anywhere.  My wife not only noticed this, but put a polite request in for change.  It was definitely a low point and she could tell tell that my work life was not helping anything.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://media.giphy.com/media/dJGYFScvBjfRabiH7m/giphy.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://media.giphy.com/media/dJGYFScvBjfRabiH7m/giphy.gif&#34; alt=&#34;positive gif&#34;/ data-glightbox=&#34;description: positive gif&#34;&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;Throw out the negativity - courtesy &lt;a href=&#34;https://giphy.com/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/giphy.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/giphy.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;giphy&lt;/a&gt;&lt;/p&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;&lt;strong&gt;Bring the positivity&lt;/strong&gt; to your workplace.  It is really difficult for folks to tear you down if you are the one that is always up beat and happy.  &lt;strong&gt;People will notice&lt;/strong&gt;. When they do they will bring the good projects your way, Praise you for your hard work, and  Ask for and value your advice.&lt;/p&gt;&#xA;&lt;h3 id=&#34;helping-people&#34;&gt;Helping People &lt;a href=&#34;#helping-people&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;Helping people&lt;/strong&gt; is part of who I am,  I cannot change that.  I rarely turn someone away who comes to me looking for help.  I will give nearly anyone 15 minutes to help them reach thier goals.  I dont care if they are in a completely different part of my organization,  if they will ever return the favor, or how it will look on my performance review.&lt;/p&gt;&#xA;&lt;p&gt;Being in the position that I am in I am graced with access to many data sets, that I can query en masse. It’s not uncommon that I have someone come to me that has access to get the data they need but will take them 2 days to mine out the information they need one at a time every quarter.  I can save them these 2 days, increase their data quality, and increase its refresh rate by writing 10 lines of sql in about 5 minutes.  I hear so oftem from people why I do this, It’s just part of who I am.  The benefits are that everytime I do this I build connections with many folks from a very broad range of backgrounds.&lt;/p&gt;&#xA;&lt;h3 id=&#34;learning&#34;&gt;Learning &lt;a href=&#34;#learning&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;Learning&lt;/strong&gt; is one of the things that drive me to get excited to come to work every single day.  I am always looking for new techniques to improve my workflow, soft skills, and technical skills.  This keeps me confident that if something happens that I need to find another gig I am current with the latest tech and ready to hire in somewhere else.  It’s also very enjoyable to watch my products improve, and be able to pump them out at faster and faster rates.&lt;/p&gt;&#xA;&lt;h3 id=&#34;grind&#34;&gt;Grind &lt;a href=&#34;#grind&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://media.giphy.com/media/3oEduGi1UWg9Q6nF84/giphy.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://media.giphy.com/media/3oEduGi1UWg9Q6nF84/giphy.gif&#34; alt=&#34;laser focus&#34;/ data-glightbox=&#34;description: laser focus&#34;&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;Laser Focus - courtesy &lt;a href=&#34;https://giphy.com/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/giphy.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/giphy.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;giphy&lt;/a&gt;&lt;/p&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;The last thing is that I need is a few hours of undistracted time to grind.  After I help some folks, and keep up with the latest skills I need to focus, &lt;strong&gt;Laser Focus&lt;/strong&gt;.  I have a lot going on outside of work, so in order for me to keep some sort of balance I need to chrun out some quality hours of progress, otherwise I get behind, stressed, anxious, and start to loose my work-life balance as it is important for me to meet the deadlines that I commit to.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ wesm feather</title>
    <id>https://waylonwalker.com/wesm-feather/</id>
    <updated>2018-11-29T19:58:28Z</updated>
    <published>2018-11-29T19:58:28Z</published>
    <link href="https://waylonwalker.com/wesm-feather/" rel="alternate" type="text/html"></link>
    <summary type="text">feather by wesm is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/wesm/feather&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;feather&lt;/a&gt; by &lt;a href=&#34;https://github.com/wesm&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;wesm&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;Feather: fast, interoperable binary data frame storage for Python, R, and more powered by Apache Arrow&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nostalgic-css NES.css</title>
    <id>https://waylonwalker.com/nostalgic-css-nes-css/</id>
    <updated>2018-11-28T15:46:37Z</updated>
    <published>2018-11-28T15:46:37Z</published>
    <link href="https://waylonwalker.com/nostalgic-css-nes-css/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred NES.css by nostalgic-css. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/nostalgic-css/NES.css&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;NES.css&lt;/a&gt; by &lt;a href=&#34;https://github.com/nostalgic-css&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nostalgic-css&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;NES-style CSS Framework | ファミコン風CSSフレームワーク&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ kennethreitz responder</title>
    <id>https://waylonwalker.com/kennethreitz-responder/</id>
    <updated>2018-10-10T23:26:29Z</updated>
    <published>2018-10-10T23:26:29Z</published>
    <link href="https://waylonwalker.com/kennethreitz-responder/" rel="alternate" type="text/html"></link>
    <summary type="text">kennethreitz has done a fantastic job with responder. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/kennethreitz&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kennethreitz&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/kennethreitz/responder&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;responder&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;A familiar HTTP Service Framework for Python.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ rstacruz cheatsheets</title>
    <id>https://waylonwalker.com/rstacruz-cheatsheets/</id>
    <updated>2018-10-10T13:19:34Z</updated>
    <published>2018-10-10T13:19:34Z</published>
    <link href="https://waylonwalker.com/rstacruz-cheatsheets/" rel="alternate" type="text/html"></link>
    <summary type="text">cheatsheets by rstacruz is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/rstacruz/cheatsheets&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cheatsheets&lt;/a&gt; by &lt;a href=&#34;https://github.com/rstacruz&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rstacruz&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;Cheatsheets for web development - devhints.io&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ viatsko awesome-vscode</title>
    <id>https://waylonwalker.com/viatsko-awesome-vscode/</id>
    <updated>2018-10-09T16:35:18Z</updated>
    <published>2018-10-09T16:35:18Z</published>
    <link href="https://waylonwalker.com/viatsko-awesome-vscode/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on awesome-vscode, created by viatsko.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/viatsko/awesome-vscode&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;awesome-vscode&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/viatsko&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;viatsko&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;🎨 A curated list of delightful VS Code packages and resources.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ rwhitt2049 psp_hourly_rates</title>
    <id>https://waylonwalker.com/rwhitt2049-psp_hourly_rates/</id>
    <updated>2018-10-04T14:14:22Z</updated>
    <published>2018-10-04T14:14:22Z</published>
    <link href="https://waylonwalker.com/rwhitt2049-psp_hourly_rates/" rel="alternate" type="text/html"></link>
    <summary type="text">psp_rates by rwhitt2049 is a game-changer in its space. Excited to see how it evolves.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/rwhitt2049/psp_hourly_rates&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;psp_hourly_rates&lt;/a&gt; by &lt;a href=&#34;https://github.com/rwhitt2049&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rwhitt2049&lt;/a&gt; is a game-changer in its space. Excited to see how it evolves.&lt;/p&gt;&#xA;&lt;p&gt;My local power company offers market based electricity rates that vary by hour. This is an analysis to determine if it could save me money.  &lt;a href=&#34;https://www.powersmartpricing.org/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.powersmartpricing.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.powersmartpricing.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://www.powersmartpricing.org/&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ mdx-js mdx</title>
    <id>https://waylonwalker.com/mdx-js-mdx/</id>
    <updated>2018-09-27T13:07:04Z</updated>
    <published>2018-09-27T13:07:04Z</published>
    <link href="https://waylonwalker.com/mdx-js-mdx/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? mdx by mdx-js.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/mdx-js/mdx&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mdx&lt;/a&gt; by &lt;a href=&#34;https://github.com/mdx-js&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mdx-js&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Markdown for the component era&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ asweigart pyperclip</title>
    <id>https://waylonwalker.com/asweigart-pyperclip/</id>
    <updated>2018-09-25T02:27:38Z</updated>
    <published>2018-09-25T02:27:38Z</published>
    <link href="https://waylonwalker.com/asweigart-pyperclip/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred pyperclip by asweigart. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/asweigart/pyperclip&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pyperclip&lt;/a&gt; by &lt;a href=&#34;https://github.com/asweigart&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;asweigart&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;Python module for cross-platform clipboard functions.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tomerfiliba plumbum</title>
    <id>https://waylonwalker.com/tomerfiliba-plumbum/</id>
    <updated>2018-09-24T12:40:58Z</updated>
    <published>2018-09-24T12:40:58Z</published>
    <link href="https://waylonwalker.com/tomerfiliba-plumbum/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out tomerfiliba and their project plumbum.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/tomerfiliba&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tomerfiliba&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/tomerfiliba/plumbum&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;plumbum&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Plumbum: Shell Combinators&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ decaporg decap-cms</title>
    <id>https://waylonwalker.com/decaporg-decap-cms/</id>
    <updated>2018-09-23T19:41:10Z</updated>
    <published>2018-09-23T19:41:10Z</published>
    <link href="https://waylonwalker.com/decaporg-decap-cms/" rel="alternate" type="text/html"></link>
    <summary type="text">decaporg has done a fantastic job with decap-cms. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/decaporg&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;decaporg&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/decaporg/decap-cms&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;decap-cms&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;A &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;Git&lt;/a&gt;-based CMS for Static Site Generators&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ lovell sharp</title>
    <id>https://waylonwalker.com/lovell-sharp/</id>
    <updated>2018-09-22T14:58:26Z</updated>
    <published>2018-09-22T14:58:26Z</published>
    <link href="https://waylonwalker.com/lovell-sharp/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on sharp by lovell.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/lovell/sharp&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;sharp&lt;/a&gt; by &lt;a href=&#34;https://github.com/lovell&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lovell&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;High performance Node.js image processing, the fastest module to resize JPEG, PNG, WebP, AVIF and TIFF images. Uses the libvips library.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ benfred py-spy</title>
    <id>https://waylonwalker.com/benfred-py-spy/</id>
    <updated>2018-09-10T13:40:20Z</updated>
    <published>2018-09-10T13:40:20Z</published>
    <link href="https://waylonwalker.com/benfred-py-spy/" rel="alternate" type="text/html"></link>
    <summary type="text">I like benfred&#39;s project py-spy.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/benfred&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;benfred’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/benfred/py-spy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;py-spy&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Sampling profiler for Python programs&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ adereth dactyl-keyboard</title>
    <id>https://waylonwalker.com/adereth-dactyl-keyboard/</id>
    <updated>2018-08-13T01:47:02Z</updated>
    <published>2018-08-13T01:47:02Z</published>
    <link href="https://waylonwalker.com/adereth-dactyl-keyboard/" rel="alternate" type="text/html"></link>
    <summary type="text">adereth has done a fantastic job with dactyl-keyboard. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/adereth&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;adereth&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/adereth/dactyl-keyboard&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dactyl-keyboard&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;Parameterized ergonomic keyboard&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ kitao pyxel</title>
    <id>https://waylonwalker.com/kitao-pyxel/</id>
    <updated>2018-08-08T14:40:48Z</updated>
    <published>2018-08-08T14:40:48Z</published>
    <link href="https://waylonwalker.com/kitao-pyxel/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out kitao and their project pyxel.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/kitao&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kitao&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/kitao/pyxel&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pyxel&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A retro game engine for Python&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ jesseduffield lazygit</title>
    <id>https://waylonwalker.com/jesseduffield-lazygit/</id>
    <updated>2018-08-06T16:25:27Z</updated>
    <published>2018-08-06T16:25:27Z</published>
    <link href="https://waylonwalker.com/jesseduffield-lazygit/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered lazygit by jesseduffield, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/jesseduffield/lazygit&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lazygit&lt;/a&gt; by &lt;a href=&#34;https://github.com/jesseduffield&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jesseduffield&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;simple terminal UI for &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; commands&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ gatsbyjs gatsby</title>
    <id>https://waylonwalker.com/gatsbyjs-gatsby/</id>
    <updated>2018-07-20T14:08:09Z</updated>
    <published>2018-07-20T14:08:09Z</published>
    <link href="https://waylonwalker.com/gatsbyjs-gatsby/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by gatsby from gatsbyjs.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/gatsbyjs/gatsby&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gatsby&lt;/a&gt; from &lt;a href=&#34;https://github.com/gatsbyjs&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gatsbyjs&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The best React-based framework with performance, scalability and security built in.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ chubin cheat.sh</title>
    <id>https://waylonwalker.com/chubin-cheat-sh/</id>
    <updated>2018-07-12T02:19:55Z</updated>
    <published>2018-07-12T02:19:55Z</published>
    <link href="https://waylonwalker.com/chubin-cheat-sh/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered cheat.sh by chubin, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/chubin/cheat.sh&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cheat.sh&lt;/a&gt; by &lt;a href=&#34;https://github.com/chubin&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;chubin&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;the only cheat sheet you need&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ jmoon018 PacVim</title>
    <id>https://waylonwalker.com/jmoon018-pacvim/</id>
    <updated>2018-07-09T21:29:41Z</updated>
    <published>2018-07-09T21:29:41Z</published>
    <link href="https://waylonwalker.com/jmoon018-pacvim/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on PacVim by jmoon018.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/jmoon018/PacVim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;PacVim&lt;/a&gt; by &lt;a href=&#34;https://github.com/jmoon018&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jmoon018&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ realpython python-guide</title>
    <id>https://waylonwalker.com/realpython-python-guide/</id>
    <updated>2018-07-05T17:07:00Z</updated>
    <published>2018-07-05T17:07:00Z</published>
    <link href="https://waylonwalker.com/realpython-python-guide/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred python-guide by realpython. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/realpython/python-guide&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;python-guide&lt;/a&gt; by &lt;a href=&#34;https://github.com/realpython&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;realpython&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;Python best practices guidebook, written for humans.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Choices-js Choices</title>
    <id>https://waylonwalker.com/choices-js-choices/</id>
    <updated>2018-06-09T04:05:04Z</updated>
    <published>2018-06-09T04:05:04Z</published>
    <link href="https://waylonwalker.com/choices-js-choices/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out Choices-js and their project Choices.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/Choices-js&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Choices-js&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/Choices-js/Choices&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Choices&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A vanilla JS customisable select box/text input plugin ⚡️&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Mobius1 Vanilla-DataTables</title>
    <id>https://waylonwalker.com/mobius1-vanilla-datatables/</id>
    <updated>2018-06-09T03:58:54Z</updated>
    <published>2018-06-09T03:58:54Z</published>
    <link href="https://waylonwalker.com/mobius1-vanilla-datatables/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered Vanilla-DataTables by Mobius1, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/Mobius1/Vanilla-DataTables&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Vanilla-DataTables&lt;/a&gt; by &lt;a href=&#34;https://github.com/Mobius1&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Mobius1&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;A lightweight, dependency-free javascript &lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;HTML&lt;/a&gt; table plugin&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ dhruvasagar vim-table-mode</title>
    <id>https://waylonwalker.com/dhruvasagar-vim-table-mode/</id>
    <updated>2018-05-22T15:07:52Z</updated>
    <published>2018-05-22T15:07:52Z</published>
    <link href="https://waylonwalker.com/dhruvasagar-vim-table-mode/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across vim-table-mode from dhruvasagar, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/dhruvasagar/vim-table-mode&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vim-table-mode&lt;/a&gt; from &lt;a href=&#34;https://github.com/dhruvasagar&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dhruvasagar&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;VIM Table Mode for instant table creation.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>D3 Day 5</title>
    <id>https://waylonwalker.com/d3-day-5/</id>
    <updated>2018-05-08T10:40:39Z</updated>
    <published>2018-05-08T10:40:39Z</published>
    <link href="https://waylonwalker.com/d3-day-5/" rel="alternate" type="text/html"></link>
    <summary type="text">select rowid, key, raw, store_time, access_count, tag, size, mode, filename from Cache where key=&#39;e3cd37c97980ab2c&#39;; &#39;e3cd37c97980ab2c&#39; &#39;e3cd37c97980ab2c&#39;...</summary>
    <content type="html">&lt;p&gt;select rowid, key, raw, store_time, expire_time, access_time, access_count, tag, size, mode, filename from Cache where key=‘e3cd37c97980ab2c’;&#xA;’e3cd37c97980ab2c’&#xA;’e3cd37c97980ab2c&amp;#39;&#xA;select rowid, key, raw, store_time, expire_time, access_time, access_count, tag, size, mode, filename from Cache where key=‘c14050404a107d5e’;&lt;/p&gt;&#xA;&lt;script src=&#34;https://cdnjs.cloudflare.com/ajax/libs/d3/4.13.0/d3.min.js&#34;&gt;&lt;/script&gt;&#xA;&lt;style&gt;&#xA;    #content{&#xA;        max-width: 800px;&#xA;        margin: 0 auto;&#xA;    }&#xA;    .chart {&#xA;        display: block;&#xA;        padding: 10px;&#xA;        background: peachpuff;&#xA;    }&#xA;&#xA;    .bar {&#xA;        height: 30px;&#xA;        margin: 5px;&#xA;        background: teal;&#xA;    }&#xA;    .bar:hover{&#xA;        background: #444;&#xA;        }&#xA;    button {&#xA;        background: rgb(240, 196, 211);&#xA;        border: none;&#xA;        font-size: 1.3rem;&#xA;        border-radius: 5px;&#xA;        padding: .2rem 1rem;&#xA;        margin-bottom: 1rem&#xA;    }&#xA;    .on {&#xA;        background: palevioletred;&#xA;    }&#xA;    .big {&#xA;    width: 100%&#xA;    }&#xA;    .small {&#xA;    width: 50%&#xA;    }&#xA;&lt;/style&gt;&#xA;&lt;h2 id=&#34;learn-d3-in-5-days&#34;&gt;Learn D3 in 5 days &lt;a href=&#34;#learn-d3-in-5-days&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;For what we are creating in these posts d3 is way overkill and very verbose, but I need to start somewhere!  These are just stepping stones into real custom visualizations that cannot be done in any other tool today.  I still cannot explain how excited I am to say &lt;strong&gt;“I created that in d3!!!”&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;todays-result&#34;&gt;Todays Result &lt;a href=&#34;#todays-result&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h2 id=&#34;recall-example-3-from-yesterday&#34;&gt;Recall Example 3 from yesterday &lt;a href=&#34;#recall-example-3-from-yesterday&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div id=&#34;buttons&#34;&gt;&#xA;    &lt;h3 id=&#34;subject&#34;&gt;Subject &lt;a href=&#34;#subject&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;    &lt;div id=&#34;subjects&#34;&gt;&#xA;        &lt;button class=&#34;math&#34; onclick=&#34;render4(&amp;#39;math&amp;#39;)&#34;&gt;Math&lt;/button&gt;&#xA;        &lt;button class=&#34;science&#34; onclick=&#34;render4(&amp;#39;science&amp;#39;)&#34;&gt;Science&lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;h3 id=&#34;chart-size&#34;&gt;Chart Size &lt;a href=&#34;#chart-size&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;    &lt;div id=&#34;sizes&#34;&gt;&#xA;        &lt;button class=&#34;chart4-big-btn&#34; onclick=&#34;chart4_size(&amp;#34;big&amp;#34;)&#34; )=&#34;&#34;&gt;Large&lt;/button&gt;&#xA;        &lt;button class=&#34;chart4-small-btn&#34; onclick=&#34;chart4_size(&amp;#34;small&amp;#34;)&#34;&gt;Small&lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div id=&#34;chart4&#34; class=&#34;chart&#34;&gt;&lt;/div&gt;&#xA;&lt;script&gt;&#xA;    const data4 = [&#xA;        { name: &#39;Alice&#39;, math: 93, science: 84},&#xA;        { name: &#39;Bob&#39;, math: 73, science: 82 },&#xA;        { name: &#39;James&#39;, math: 92, science: 78},&#xA;        { name: &#39;Steve&#39;, math: 77, science: 93 },&#xA;        { name: &#39;Jordan&#39;, math: 80, science: 68 },&#xA;    ]&#xA;&#xA;    chart4 = document.getElementById(&#39;chart4&#39;)&#xA;&#xA;    let width = function() {&#xA;        return chart4.getBoundingClientRect().width&#xA;        }&#xA;    let height = function() {&#xA;        return chart4.getBoundingClientRect().height&#xA;        }&#xA;    let barHeight = function() {&#xA;        height() /  data4.length + &#39;px&#39;&#xA;        }&#xA;&#xA;    function chart4_size(size) {&#xA;        d3.select(&#39;#sizes&#39;)&#xA;            .selectAll(&#39;button&#39;)&#xA;            .classed(&#39;on&#39;, false)&#xA;        d3.select(&#39;#sizes&#39;)&#xA;            .select(&#39;.chart4-&#39; + size + &#39;-btn&#39;)&#xA;            .classed(&#39;on&#39;, true)&#xA;        d3.select(&#39;#chart4&#39;)&#xA;            .attr(&#39;class&#39;, &#39;chart &#39; + size)&#xA;        subject = document&#xA;            .getElementById(&#39;subjects&#39;)&#xA;            .querySelector(&#39;.on&#39;)&#xA;            .classList[0]&#xA;        render4(subject)&#xA;    }&#xA;&#xA;    function render4(subject) {&#xA;&#xA;        d3.select(&#39;#subjects&#39;)&#xA;            .selectAll(&#39;button&#39;)&#xA;            .classed(&#39;on&#39;, false);&#xA;&#xA;        d3.select(&#39;#subjects&#39;)&#xA;            .select(&#39;.&#39; + subject)&#xA;            .attr(&#39;class&#39;, subject + &#39; on&#39;);&#xA;&#xA;        let xScale = d3.scaleLinear()&#xA;            .domain([50, 100])&#xA;            .range([0, width()]);&#xA;&#xA;        const bars5 = d3.select(&#39;#chart4&#39;)&#xA;            .selectAll(&#39;div&#39;)&#xA;            .data(data4, function(d) {&#xA;                return d.name&#xA;            })&#xA;        const newBars = bars5.enter()&#xA;            .append(&#39;div&#39;)&#xA;                .attr(&#39;class&#39;, &#39;bar&#39;)&#xA;                .style(&#39;width&#39;, 0)&#xA;&#xA;        newBars.merge(bars5)&#xA;            .transition()&#xA;            .style(&#39;width&#39;, function(d) {&#xA;                return xScale(d[subject]) + &#39;px&#39;&#xA;            })&#xA;            .style(&#39;height&#39;, barHeight())&#xA;    }&#xA;    render4(&#39;math&#39;)&#xA;    chart4_size(&#39;big&#39;)&#xA;&lt;/script&gt;&#xA;&lt;h2 id=&#34;final-result&#34;&gt;Final Result &lt;a href=&#34;#final-result&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;div id=&#34;buttons5&#34;&gt;&#xA;    &lt;h3 id=&#34;subject-1&#34;&gt;Subject &lt;a href=&#34;#subject-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;    &lt;div id=&#34;subjects5&#34;&gt;&#xA;        &lt;button class=&#34;math&#34; onclick=&#34;render5(&amp;#39;math&amp;#39;)&#34;&gt;Math&lt;/button&gt;&#xA;        &lt;button class=&#34;science&#34; onclick=&#34;render5(&amp;#39;science&amp;#39;)&#34;&gt;Science&lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;h3 id=&#34;chart-size-1&#34;&gt;Chart Size &lt;a href=&#34;#chart-size-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;    &lt;div id=&#34;sizes5&#34;&gt;&#xA;        &lt;button class=&#34;chart5-big-btn&#34; onclick=&#34;chart5_size(&amp;#34;big&amp;#34;)&#34; )=&#34;&#34;&gt;Large&lt;/button&gt;&#xA;        &lt;button class=&#34;chart5-small-btn&#34; onclick=&#34;chart5_size(&amp;#34;small&amp;#34;)&#34;&gt;Small&lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div id=&#34;chart5&#34; class=&#34;chart&#34;&gt;&lt;/div&gt;&#xA;&lt;script&gt;&#xA;    const data5 = [&#xA;        { name: &#39;Alice&#39;, math: 93, science: 84},&#xA;        { name: &#39;Bob&#39;, math: 73, science: 82 },&#xA;        { name: &#39;James&#39;, math: 92, science: 78},&#xA;        { name: &#39;Steve&#39;, math: 77, science: 93 },&#xA;        { name: &#39;Jordan&#39;, math: 80, science: 68 },&#xA;    ]&#xA;&#xA;    chart5 = document.getElementById(&#39;chart5&#39;)&#xA;&#xA;    let width5 = function() {&#xA;        return chart5.getBoundingClientRect().width&#xA;        }&#xA;    let height5 = function() {&#xA;        return chart5.getBoundingClientRect().height&#xA;        }&#xA;    let barHeight5 = function() {&#xA;        height5() /  data5.length + &#39;px&#39;&#xA;        }&#xA;&#xA;    function chart5_size(size) {&#xA;        d3.select(&#39;#sizes5&#39;)&#xA;            .selectAll(&#39;button&#39;)&#xA;            .classed(&#39;on&#39;, false)&#xA;        d3.select(&#39;#sizes5&#39;)&#xA;            .select(&#39;.chart5-&#39; + size + &#39;-btn&#39;)&#xA;            .classed(&#39;on&#39;, true)&#xA;        d3.select(&#39;#chart5&#39;)&#xA;            .attr(&#39;class&#39;, &#39;chart &#39; + size)&#xA;        subject = document&#xA;            .getElementById(&#39;subjects5&#39;)&#xA;            .querySelector(&#39;.on&#39;)&#xA;            .classList[0]&#xA;        console.log(subject)&#xA;        render5(subject)&#xA;    }&#xA;&#xA;    function render5(subject) {&#xA;&#xA;        d3.select(&#39;#subjects5&#39;)&#xA;            .selectAll(&#39;button&#39;)&#xA;            .classed(&#39;on&#39;, false);&#xA;&#xA;        d3.select(&#39;#subjects5&#39;)&#xA;            .select(&#39;.&#39; + subject)&#xA;            .attr(&#39;class&#39;, subject + &#39; on&#39;);&#xA;&#xA;        let xScale = d3&#xA;            .scaleLinear()&#xA;            .domain([50, 100])&#xA;            .range([0, width5()]);&#xA;&#xA;        const bars5 = d3.select(&#39;#chart5&#39;)&#xA;            .selectAll(&#39;div&#39;)&#xA;            .data(data5, function(d) {&#xA;                return d.name&#xA;            })&#xA;        const newBars = bars5&#xA;            .enter()&#xA;            .append(&#39;div&#39;)&#xA;                .attr(&#39;class&#39;, &#39;bar&#39;)&#xA;                .style(&#39;width&#39;, 0)&#xA;&#xA;        newBars.merge(bars5)&#xA;            .transition()&#xA;            .style(&#39;width&#39;, function(d) {&#xA;                return xScale(d[subject]) + &#39;px&#39;&#xA;            })&#xA;            .style(&#39;height&#39;, barHeight5())&#xA;&#xA;        d3&#xA;         .select(&#39;#chart5&#39;)&#xA;         .select(&#39;svg&#39;)&#xA;         .remove()&#xA;&#xA;        const svg5 = d3&#xA;            .select(&#39;#chart5&#39;)&#xA;            .append(&#39;svg&#39;)&#xA;            .attr(&#39;width&#39;, width5())&#xA;            .attr(&#39;height&#39;, height5())&#xA;            .style(&#39;position&#39;, &#39;relative&#39;)&#xA;            .append(&#39;g&#39;)&#xA;            .call(d3.axisBottom(xScale))&#xA;    }&#xA;    render5(&#39;math&#39;)&#xA;    chart5_size(&#39;big&#39;)&#xA;&lt;/script&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>D3 Day 4</title>
    <id>https://waylonwalker.com/d3-day4/</id>
    <updated>2018-05-06T00:00:00Z</updated>
    <published>2018-05-06T00:00:00Z</published>
    <link href="https://waylonwalker.com/d3-day4/" rel="alternate" type="text/html"></link>
    <summary type="text">Today we are adding scale to day 3&#39;s example horizontal bar chart.</summary>
    <content type="html">&lt;!--&#xA;&lt;script src=&#39;https://cdnjs.cloudflare.com/ajax/libs/d3/4.13.0/d3.min.js&#39;&gt;&lt;/script&gt;&#xA;&lt;style&gt;&#xA;    #content{&#xA;        max-width: 800px;&#xA;        margin: 0 auto;&#xA;    }&#xA;    .chart {&#xA;        display: block;&#xA;        padding: 10px;&#xA;        background: peachpuff;&#xA;        /* transition: all 500ms */&#xA;    }&#xA;&#xA;    .bar {&#xA;        height: 30px;&#xA;        margin: 5px;&#xA;        background: teal;&#xA;    }&#xA;    .bar:hover{&#xA;        background: #444;&#xA;        }&#xA;    button {&#xA;        background: rgb(240, 196, 211);&#xA;        border: none;&#xA;        font-size: 1.3rem;&#xA;        border-radius: 5px;&#xA;        padding: .2rem 1rem;&#xA;        margin-bottom: 1rem&#xA;    }&#xA;    .on {&#xA;        background: palevioletred;&#xA;    }&#xA;    .big {&#xA;    width: 100%&#xA;    }&#xA;    .small {&#xA;    width: 50%&#xA;    }&#xA;&lt;/style&gt;&#xA; --&gt;&#xA;&lt;h2 id=&#34;learn-d3-in-5-days&#34;&gt;Learn D3 in 5 days &lt;a href=&#34;#learn-d3-in-5-days&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;For what we are creating in these posts d3 is way overkill and very verbose, but I need to start somewhere!  These are just stepping stones into real custom visualizations that cannot be done in any other tool today.  I still cannot explain how excited I am to say &lt;strong&gt;“I created that in d3!!!”&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;todays-result&#34;&gt;Todays Result &lt;a href=&#34;#todays-result&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Today I will be learning about d3 scales, and adding them to the bar chart that we created yesterday.  Follow along as I try to create something interesting.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/d3-day4.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/d3-day4.gif&#34; alt=&#34;today’s_result&#34;/ data-glightbox=&#34;description: today’s_result&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;recall-example-3-from-yesterday&#34;&gt;Recall Example 3 from yesterday &lt;a href=&#34;#recall-example-3-from-yesterday&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;maybe a few days ago…. give me a break I have a lot of other priorities&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;In &lt;a href=&#34;https://waylonwalker.com/d3-day3&#34;&gt;yesterdays&lt;/a&gt; post we created a working example of a horizontal bar chart that shows grades for a set of 5 students that are all in two classes; ‘Math’ and ‘Science’.  The chart is interactive, and will switch subjects at the press of a button.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/d3-day3.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/d3-day3.gif&#34; alt=&#34;d3 day 3 final result&#34;/ data-glightbox=&#34;description: d3 day 3 final result&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;!--&#xA;&lt;div id=&#34;chart3&#34; class=&#39;chart&#39;&gt;&#xA;    &lt;button class=&#39;math&#39; onclick=&#34;render3(&#39;math&#39;)&#34;&gt;Math&lt;/button&gt;&#xA;    &lt;button class=&#39;science&#39; onclick=&#34;render3(&#39;science&#39;)&#34;&gt;Science&lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;script&gt;&#xA;    const data3 = [&#xA;        { name: &#39;Alice&#39;, math: 93, science: 84 },&#xA;        { name: &#39;Bob&#39;, math: 73, science: 82 },&#xA;        { name: &#39;James&#39;, math: 92, science: 78 },&#xA;        { name: &#39;Steve&#39;, math: 77, science: 93 },&#xA;        { name: &#39;Jordan&#39;, math: 80, science: 68 },&#xA;    ]&#xA;&#xA;    function render3(subject) {&#xA;        d3.select(&#39;#chart3&#39;)&#xA;            .selectAll(&#39;button&#39;)&#xA;            .classed(&#39;on&#39;, false)&#xA;        d3.select(&#39;#chart3&#39;)&#xA;            .select(&#39;.&#39; + subject)&#xA;            .attr(&#39;class&#39;, subject + &#39; on&#39;)&#xA;&#xA;        const bars = d3.select(&#39;#chart3&#39;)&#xA;            .selectAll(&#39;div&#39;)&#xA;            .data(data3, function(d) {&#xA;                return d.name&#xA;            })&#xA;        const newBars = bars.enter()&#xA;            .append(&#39;div&#39;)&#xA;                .attr(&#39;class&#39;, &#39;bar&#39;)&#xA;                .style(&#39;width&#39;, 0)&#xA;        newBars.merge(bars)&#xA;            .transition()&#xA;            .style(&#39;width&#39;, function(d) {&#xA;                return (d[subject]) + &#39;px&#39;&#xA;            })&#xA;    }&#xA;    render3(&#39;math&#39;)&#xA;&lt;/script&gt;&#xA; --&gt;&#xA;&lt;h2 id=&#34;add-scales&#34;&gt;Add Scales &lt;a href=&#34;#add-scales&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;One issue with that plot was that the scale was created by hand.  In todays example we will let d3 take care of the scale for us.  We will define a linear scale with an input range and an output range.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xScale&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;d3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;scaleLinear&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;domain&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()]);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then we will change the following .style method call from &lt;code&gt;return (d[subject]-50 * 3) + &amp;#39;px&amp;#39;&lt;/code&gt; to &lt;code&gt;return xScale(d[subject]) = &amp;#39;px&amp;#39;&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;newBars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;merge&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;bars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;transition&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;width&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xScale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;subject&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;px&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;height&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;barHeight&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;keeping-it-dry&#34;&gt;Keeping it dry &lt;a href=&#34;#keeping-it-dry&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Note that if we had many different elements using the same scale with this code it would only exist in one place &lt;code&gt;xScale&lt;/code&gt; and not separately in each style function.  This makes our viz much more maintainable as we may see a need to change the scales in the future.&lt;/p&gt;&#xA;&lt;h3 id=&#34;adding-some-flair&#34;&gt;Adding Some Flair &lt;a href=&#34;#adding-some-flair&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;To give this viz some simple flair, and a reason that we might want to use scales.  I added a new set of buttons to allow us to change the chart size and see the viz respond.  Check out the markup in the Final Markup section if your interested in that.  I do want to point out that I used the d3 selectors to add the chart size classes to the chart.&lt;/p&gt;&#xA;&lt;p&gt;The select api is very jQuery inspired, but the method chaining syntax feels very natural to me as my main data tools is pandas. The d3 methods feel very much like method chaining in python.  In fact, besides the way the function is defined it reads very much like python.  This feels very comfortable to me as I am always loosing track of braces and semicolons when writing javascript!&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;chart4_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;d3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#sizes&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;selectAll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;button&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;classed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;on&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;d3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#sizes&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;.chart4-&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;-btn&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;classed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;on&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;d3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#chart4&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;class&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;chart &amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;subject&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getElementById&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;subjects&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;querySelector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;.on&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;classList&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;render4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;subject&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This is the css that we are using to change the size of our chart figure.  Nothing fancy, just make full width or half width to show the responsiveness of our chart.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;big&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;small&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;final-result&#34;&gt;Final Result &lt;a href=&#34;#final-result&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;!--&#xA;&lt;div id=&#39;buttons&#39;&gt;&#xA;    &lt;h3 id=&#34;subject&#34;&gt;Subject &lt;a href=&#34;#subject&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;    &lt;div id=&#39;subjects&#39;&gt;&#xA;        &lt;button class=&#39;math&#39; onclick=&#34;render4(&#39;math&#39;)&#34;&gt;Math&lt;/button&gt;&#xA;        &lt;button class=&#39;science&#39; onclick=&#34;render4(&#39;science&#39;)&#34;&gt;Science&lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;h3 id=&#34;chart-size&#34;&gt;Chart Size &lt;a href=&#34;#chart-size&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;    &lt;div id=&#39;sizes&#39;&gt;&#xA;        &lt;button class=&#39;chart4-big-btn&#39; onclick=&#39;chart4_size(&#34;big&#34;)&#39;)&gt;Large&lt;/button&gt;&#xA;        &lt;button class=&#39;chart4-small-btn&#39; onclick=&#39;chart4_size(&#34;small&#34;)&#39;&gt;Small&lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div id=&#34;chart4&#34; class=&#39;chart&#39;&gt;&lt;/div&gt;&#xA;&#xA;&#xA;&#xA;&lt;script&gt;&#xA;    const data4 = [&#xA;        { name: &#39;Alice&#39;, math: 93, science: 84},&#xA;        { name: &#39;Bob&#39;, math: 73, science: 82 },&#xA;        { name: &#39;James&#39;, math: 92, science: 78},&#xA;        { name: &#39;Steve&#39;, math: 77, science: 93 },&#xA;        { name: &#39;Jordan&#39;, math: 80, science: 68 },&#xA;    ]&#xA;&#xA;    chart4 = document.getElementById(&#39;chart4&#39;)&#xA;&#xA;&#xA;    let width = function() {&#xA;        return chart4.getBoundingClientRect().width&#xA;        }&#xA;    let height = function() {&#xA;        return chart4.getBoundingClientRect().height&#xA;        }&#xA;    let barHeight = function() {&#xA;        height() /  data4.length + &#39;px&#39;&#xA;        }&#xA;&#xA;    function chart4_size(size) {&#xA;        d3.select(&#39;#sizes&#39;)&#xA;            .selectAll(&#39;button&#39;)&#xA;            .classed(&#39;on&#39;, false)&#xA;        d3.select(&#39;#sizes&#39;)&#xA;            .select(&#39;.chart4-&#39; + size + &#39;-btn&#39;)&#xA;            .classed(&#39;on&#39;, true)&#xA;        d3.select(&#39;#chart4&#39;)&#xA;            .attr(&#39;class&#39;, &#39;chart &#39; + size)&#xA;        subject = document&#xA;            .getElementById(&#39;subjects&#39;)&#xA;            .querySelector(&#39;.on&#39;)&#xA;            .classList[0]&#xA;        render4(subject)&#xA;    }&#xA;&#xA;    function render4(subject) {&#xA;&#xA;        d3.select(&#39;#subjects&#39;)&#xA;            .selectAll(&#39;button&#39;)&#xA;            .classed(&#39;on&#39;, false);&#xA;&#xA;        d3.select(&#39;#subjects&#39;)&#xA;            .select(&#39;.&#39; + subject)&#xA;            .attr(&#39;class&#39;, subject + &#39; on&#39;);&#xA;&#xA;        let xScale = d3.scaleLinear()&#xA;            .domain([50, 100])&#xA;            .range([0, width()]);&#xA;&#xA;        const bars = d3.select(&#39;#chart4&#39;)&#xA;            .selectAll(&#39;div&#39;)&#xA;            .data(data4, function(d) {&#xA;                return d.name&#xA;            })&#xA;        const newBars = bars.enter()&#xA;            .append(&#39;div&#39;)&#xA;                .attr(&#39;class&#39;, &#39;bar&#39;)&#xA;                .style(&#39;width&#39;, 0)&#xA;&#xA;        newBars.merge(bars)&#xA;            .transition()&#xA;            .style(&#39;width&#39;, function(d) {&#xA;                return xScale(d[subject]) + &#39;px&#39;&#xA;            })&#xA;            .style(&#39;height&#39;, barHeight())&#xA;    }&#xA;    render4(&#39;math&#39;)&#xA;    chart4_size(&#39;big&#39;)&#xA;&lt;/script&gt;&#xA; --&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/d3-day4.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/d3-day4.gif&#34; alt=&#34;d3 day4 final result&#34;/ data-glightbox=&#34;description: d3 day4 final result&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;final-markup&#34;&gt;Final Markup &lt;a href=&#34;#final-markup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Most of the markup here is for the buttons and the callbacks.  This is not really the focus of today’s exercise.  I have included the &lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;html&lt;/a&gt; here so that you can see how the buttons are tied in to the Final Script.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;buttons&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;h3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;Subject&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;h3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;subjects&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;math&amp;#39;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;onclick&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;render4(&amp;#39;math&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;Math&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;science&amp;#39;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;onclick&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;render4(&amp;#39;science&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;Science&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;h3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;Chart Size&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;h3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;sizes&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;chart4-big-btn&amp;#39;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;onclick&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;chart4_size(&amp;#34;big&amp;#34;)&amp;#39;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;Large&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;chart4-small-btn&amp;#39;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;onclick&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;chart4_size(&amp;#34;small&amp;#34;)&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;Small&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;chart4&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;chart&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;final-style&#34;&gt;Final Style &lt;a href=&#34;#final-style&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;max-width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;800&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;margin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;auto&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;chart&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;block&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;padding&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;peachpuff&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;/* transition: all 500ms */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;bar&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;margin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;teal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;bar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;hover&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#444&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;240&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;196&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;211&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;border&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;none&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;font-size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.3&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;border-radius&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;padding&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;.2&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;margin-bottom&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;palevioletred&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;big&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;small&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;final-script&#34;&gt;Final script &lt;a href=&#34;#final-script&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Here is the final script so that you showing everything put together.  Yes this is a lot of code for a bar chart without scales, click events, titles, tooltips, or anything fancy, but I need to start somewhere.  d3.js is the language that builds fully custom vizualizations like no other tool today, and by doing a bit of practice now I will be ready for some serious stuff in the future.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Setup the data&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;data4&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Alice&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;math&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;93&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;science&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;84&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Bob&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;math&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;73&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;science&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;82&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;James&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;math&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;92&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;science&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;78&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Steve&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;math&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;77&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;science&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;93&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Jordan&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;math&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;science&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;68&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Create some vanilla js functions to get the size of the chart&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;chart4&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getElementById&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;chart4&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;width&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;chart4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getBoundingClientRect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;width&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;height&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;chart4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getBoundingClientRect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;().&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;height&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;barHeight&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;  &lt;span class=&#34;nx&#34;&gt;data4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;length&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;px&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// create a function to update the size of the chart&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Size is updated by adding a css class big or small&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Note: the  render function is called at the end to ensure the scale is re-rendered&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;chart4_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;d3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#sizes&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;selectAll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;button&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;classed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;on&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;d3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#sizes&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;.chart4-&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;size&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;-btn&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;classed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;on&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;d3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#chart4&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;class&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;chart &amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;subject&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getElementById&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;subjects&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;querySelector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;.on&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;classList&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;render4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;subject&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// render the plot&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Note: I did need to bring the xScale and the width() call  into the render&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// function to ensure that the scale was updated each time&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;render4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;subject&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;d3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#subjects&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;selectAll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;button&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;classed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;on&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;d3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;seect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#subjects&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;.&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;subject&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;class&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;subject&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39; on&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xScale&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;d3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;scaleLinear&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;domain&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()]);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bars&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;d3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#chart4&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;selectAll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;div&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;newBars&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;enter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;div&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;class&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;bar&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;width&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;newBars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;merge&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;bars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;transition&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;width&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;xScale&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;subject&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;px&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;height&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;barHeight&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// create initial render and size&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;render4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;math&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;chart4_size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;big&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>D3 Day 3</title>
    <id>https://waylonwalker.com/d3-day3/</id>
    <updated>2018-05-05T00:00:00Z</updated>
    <published>2018-05-05T00:00:00Z</published>
    <link href="https://waylonwalker.com/d3-day3/" rel="alternate" type="text/html"></link>
    <summary type="text">none</summary>
    <content type="html">&lt;script src=&#34;https://cdnjs.cloudflare.com/ajax/libs/d3/4.13.0/d3.min.js&#34;&gt;&lt;/script&gt;&#xA;&lt;style&gt;&#xA;    #content{&#xA;        max-width: 800px;&#xA;        margin: 0 auto;&#xA;    }&#xA;    .chart {&#xA;        display: block;&#xA;        padding: 10px;&#xA;        background: peachpuff;&#xA;    }&#xA;&#xA;    .bar {&#xA;        height: 30px;&#xA;        margin: 5px;&#xA;        background: teal;&#xA;    }&#xA;    button {&#xA;        background: rgb(240, 196, 211);&#xA;        border: none;&#xA;        font-size: 1.3rem;&#xA;        border-radius: 5px;&#xA;        padding: .2rem 1rem;&#xA;        margin-bottom: 1rem&#xA;    }&#xA;    .on {&#xA;        background: palevioletred;&#xA;    }&#xA;&lt;/style&gt;&#xA;&lt;h2 id=&#34;learn-d3-in-5-days&#34;&gt;Learn D3 in 5 days &lt;a href=&#34;#learn-d3-in-5-days&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I recently subscribed to Ben Clinkinbeard’s learn D3.js in 5 days, and am currently on day 3. I read through the first 2 days, and felt fairly comfortable with selecting elements, so I did not follow along on the first two days. I probably should have, but there are only so many hours in the day.&lt;/p&gt;&#xA;&lt;h3 id=&#34;why-learn-d3&#34;&gt;Why Learn D3 &lt;a href=&#34;#why-learn-d3&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;D3 is the ubiquitous dynamic visualization library for building custom interactive visualizations on the web. It is a bit low level, and more verbose than many other libraries that build upon it, but if you want full control D3 is the way to go. I have used a few libraries built upon d3 in the past and have been very happy with the results. For now I want to start learning a bit about how d3 works. I know that learning it is going to take a long time, so I want to start working on some simple examples now in order to build my understanding so that I can learn quickly when I am ready to dive in. If I never decide I need to take the deep dive into d3, I think understanding how it works will only help when I am using higher level libraries.&lt;/p&gt;&#xA;&lt;h2 id=&#34;final-result&#34;&gt;Final Result &lt;a href=&#34;#final-result&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I cant express how fun it was to build this example. I always saw d3 as being super low level and that I could never build something in it. It was so cool to watch the magic happen in such a short period of time.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/d3-day3.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/d3-day3.gif&#34; alt=&#34;final_result&#34;/ data-glightbox=&#34;description: final_result&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;prep&#34;&gt;Prep &lt;a href=&#34;#prep&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;load-d3&#34;&gt;Load D3 &lt;a href=&#34;#load-d3&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;I am going to load d3 from the cloudflare cdn for simplicity&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    script src=&amp;#39;https://cdnjs.cloudflare.com/ajax/libs/d3/4.13.0/d3.min.js&amp;#39;&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;base-styles&#34;&gt;Base Styles &lt;a href=&#34;#base-styles&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;I will use this as by stylesheet throughout the examples.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;chart&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;block&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;padding&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;peachpuff&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;bar&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;30&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;margin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;teal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;240&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;196&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;211&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;border&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;none&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;font-size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.3&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;border-radius&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;padding&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.2&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;margin-bottom&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;on&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;palevioletred&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;example-one&#34;&gt;Example one &lt;a href=&#34;#example-one&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This one is a bit cheaty in that it has the exact number of divs already rendered for us, but it is a good learning point&#xA;so see how to map data to attributes&lt;/p&gt;&#xA;&lt;p&gt;By the way this is the first chart that I have ever created with d3, and this silly thing is so exciting!!&lt;/p&gt;&#xA;&lt;h3 id=&#34;markup&#34;&gt;Markup &lt;a href=&#34;#markup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;chart1&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;chart&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;javascript&#34;&gt;JavaScript &lt;a href=&#34;#javascript&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;90&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;270&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;152&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;42&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;83&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;d3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#chart1&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;selectAll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;div&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;class&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;bar&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;width&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;d&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;px&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;result&#34;&gt;Result &lt;a href=&#34;#result&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;d3-day3-1.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;d3-day3-1.png&#34; alt=&#34;d3 day3 example 1&#34;/ data-glightbox=&#34;description: d3 day3 example 1&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;&lt;em&gt;example 1 plot&lt;/em&gt;&lt;/p&gt;&#xA;&lt;!--&#xA;&lt;div id=&#34;chart1&#34; class=&#39;chart&#39;&gt;&#xA;    &lt;div&gt;&lt;/div&gt;&#xA;    &lt;div&gt;&lt;/div&gt;&#xA;    &lt;div&gt;&lt;/div&gt;&#xA;    &lt;div&gt;&lt;/div&gt;&#xA;    &lt;div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;script&gt;&#xA;    const data = [90, 270, 152, 42, 83]&#xA;    d3.select(&#39;#chart1&#39;)&#xA;        .selectAll(&#39;div&#39;)&#xA;        .data(data)&#xA;        .attr(&#39;class&#39;, &#39;bar&#39;)&#xA;        .style(&#39;width&#39;, function (d) {&#xA;            return d + &#39;px&#39;&#xA;        })&#xA;&lt;/script&gt;&#xA; --&gt;&#xA;&lt;h2 id=&#34;example-2&#34;&gt;Example 2 &lt;a href=&#34;#example-2&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This time we are going to get a bit more dynamic. The divs will be generated on the fly and will update with the press of a button.&lt;/p&gt;&#xA;&lt;h3 id=&#34;markup-1&#34;&gt;Markup &lt;a href=&#34;#markup-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;chart2&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;chart&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;math&amp;#39;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;onclick&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;render(&amp;#39;math&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;Math&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;science&amp;#39;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;onclick&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;render(&amp;#39;science&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;Science&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;javascript-1&#34;&gt;JavaScript &lt;a href=&#34;#javascript-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;data2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Alice&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;math&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;93&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;science&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;84&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Bob&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;math&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;73&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;science&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;82&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;James&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;math&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;92&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;science&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;78&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Steve&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;math&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;77&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;science&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;93&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Jordan&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;math&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;science&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;68&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;render&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;subject&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;d3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#chart2&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;selectAll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;button&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;classed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;on&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;d3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;.&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;subject&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;class&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;subject&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39; on&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;d3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#chart2&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;selectAll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;div&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;remove&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;d3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#chart2&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;selectAll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;div&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;enter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;div&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;class&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;bar&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;width&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;subject&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;px&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;render&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;math&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;result-1&#34;&gt;Result &lt;a href=&#34;#result-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;!--&#xA;&lt;div id=&#34;chart2&#34; class=&#39;chart&#39;&gt;&#xA;    &lt;button class=&#39;math&#39; onclick=&#34;render(&#39;math&#39;)&#34;&gt;Math&lt;/button&gt;&#xA;    &lt;button class=&#39;science&#39; onclick=&#34;render(&#39;science&#39;)&#34;&gt;Science&lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;script&gt;&#xA;    const data2 = [&#xA;        { name: &#39;Alice&#39;, math: 93, science: 84},&#xA;        { name: &#39;Bob&#39;, math: 73, science: 82},&#xA;        { name: &#39;James&#39;, math: 92, science: 78},&#xA;        { name: &#39;Steve&#39;, math: 77, science: 93},&#xA;        { name: &#39;Jordan&#39;, math: 80, science: 68},&#xA;    ]&#xA;&#xA;    function render(subject) {&#xA;        d3.select(&#39;#chart2&#39;)&#xA;            .selectAll(&#39;button&#39;)&#xA;            .classed(&#39;on&#39;, false)&#xA;        d3.select(&#39;.&#39; + subject)&#xA;            .attr(&#39;class&#39;, subject + &#39; on&#39;)&#xA;        d3.select(&#39;#chart2&#39;)&#xA;            .selectAll(&#39;div&#39;)&#xA;            .remove()&#xA;        d3.select(&#39;#chart2&#39;)&#xA;            .selectAll(&#39;div&#39;)&#xA;            .data(data2)&#xA;            .enter()&#xA;                .append(&#39;div&#39;)&#xA;                .attr(&#39;class&#39;, &#39;bar&#39;)&#xA;                .style(&#39;width&#39;, function(d) {&#xA;                     return (d[subject]-50)*3 + &#39;px&#39;&#xA;                    })&#xA;    }&#xA;    render(&#39;math&#39;)&#xA;&lt;/script&gt;&#xA; --&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/d3-day3-2.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/d3-day3-2.gif&#34; alt=&#34;d3 day 3 example 2&#34;/ data-glightbox=&#34;description: d3 day 3 example 2&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;&lt;em&gt;example 2 working buttons&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;example-3&#34;&gt;Example 3 &lt;a href=&#34;#example-3&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;In Example2 the chart jumped from one state to the next with a complete wipe and redraw in betweeen. In this example we will retain the same bars and only update their width. This will allow us to transition/animate them.&lt;/p&gt;&#xA;&lt;h3 id=&#34;markup-2&#34;&gt;Markup &lt;a href=&#34;#markup-2&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;chart3&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;chart&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;math&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;onclick&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;render3(&amp;#39;math&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;Math&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;science&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;onclick&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;render3(&amp;#39;science&amp;#39;)&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;Science&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;javascript-2&#34;&gt;JavaScript &lt;a href=&#34;#javascript-2&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;data3&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Alice&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;math&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;93&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;science&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;84&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Bob&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;math&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;73&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;science&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;82&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;James&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;math&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;92&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;science&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;78&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Steve&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;math&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;77&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;science&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;93&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Jordan&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;math&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;science&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;68&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;render3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;subject&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;d3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#chart3&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;selectAll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;button&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;classed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;on&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;d3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#chart3&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;.&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;subject&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;class&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;subject&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39; on&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bars&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;d3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#chart3&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;selectAll&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;div&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;newBars&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;enter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;append&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;div&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;class&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;bar&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;width&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;newBars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;merge&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;bars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;transition&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;width&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;subject&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;px&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;render3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;math&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/d3-day3.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/d3-day3.gif&#34; alt=&#34;d3 day3 example 3&#34;/ data-glightbox=&#34;description: d3 day3 example 3&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;&lt;em&gt;example 3 nice and smooth&lt;/em&gt;&lt;/p&gt;&#xA;&lt;!--&#xA;&lt;div id=&#34;chart3&#34; class=&#39;chart&#39;&gt;&#xA;    &lt;button class=&#39;math&#39; onclick=&#34;render3(&#39;math&#39;)&#34;&gt;Math&lt;/button&gt;&#xA;    &lt;button class=&#39;science&#39; onclick=&#34;render3(&#39;science&#39;)&#34;&gt;Science&lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;script&gt;&#xA;    const data3 = [&#xA;        { name: &#39;Alice&#39;, math: 93, science: 84 },&#xA;        { name: &#39;Bob&#39;, math: 73, science: 82 },&#xA;        { name: &#39;James&#39;, math: 92, science: 78 },&#xA;        { name: &#39;Steve&#39;, math: 77, science: 93 },&#xA;        { name: &#39;Jordan&#39;, math: 80, science: 68 },&#xA;    ]&#xA;&#xA;    function render3(subject) {&#xA;        d3.select(&#39;#chart3&#39;)&#xA;            .selectAll(&#39;button&#39;)&#xA;            .classed(&#39;on&#39;, false)&#xA;        d3.select(&#39;#chart3&#39;)&#xA;            .select(&#39;.&#39; + subject)&#xA;            .attr(&#39;class&#39;, subject + &#39; on&#39;)&#xA;&#xA;        const bars = d3.select(&#39;#chart3&#39;)&#xA;            .selectAll(&#39;div&#39;)&#xA;            .data(data3, function(d) {&#xA;                return d.name&#xA;            })&#xA;        const newBars = bars.enter()&#xA;            .append(&#39;div&#39;)&#xA;                .attr(&#39;class&#39;, &#39;bar&#39;)&#xA;                .style(&#39;width&#39;, 0)&#xA;        newBars.merge(bars)&#xA;            .transition()&#xA;            .style(&#39;width&#39;, function(d) {&#xA;                return (d[subject]-50)*3 + &#39;px&#39;&#xA;            })&#xA;    }&#xA;    render3(&#39;math&#39;)&#xA;&lt;/script&gt;&#xA; --&gt;&#xA;&lt;h2 id=&#34;final-thoughts&#34;&gt;Final Thoughts &lt;a href=&#34;#final-thoughts&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I express how fun this was. I have always viewed d3 as something so low level I would never be able to touch. The tutorial was super fun and very approachable. Any other resources that I have seen to start learning d3 appear to be very time consuming before you start writing code and digging into it yourself. These examples were great, I was able to get started creating visualizations in no more than 5 minutes of reading. Now that I feel like I have a shallow understanding of how it works I feel better prepared to dive in.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pbnj awesome-podcasts</title>
    <id>https://waylonwalker.com/pbnj-awesome-podcasts/</id>
    <updated>2018-05-02T17:21:52Z</updated>
    <published>2018-05-02T17:21:52Z</published>
    <link href="https://waylonwalker.com/pbnj-awesome-podcasts/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about awesome-podcasts, an amazing project by pbnj. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/pbnj/awesome-podcasts&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;awesome-podcasts&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/pbnj&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pbnj&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;🎙 A collection of awesome engineering podcasts! ARCHIVED in favor of &lt;a href=&#34;https://github.com/rShetty/awesome-podcasts&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/rShetty/awesome-podcasts&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ Bogdanp hugs</title>
    <id>https://waylonwalker.com/bogdanp-hugs/</id>
    <updated>2018-05-02T17:20:08Z</updated>
    <published>2018-05-02T17:20:08Z</published>
    <link href="https://waylonwalker.com/bogdanp-hugs/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? hugs by Bogdanp.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/Bogdanp/hugs&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;hugs&lt;/a&gt; by &lt;a href=&#34;https://github.com/Bogdanp&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Bogdanp&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Hugs lets you map SQL expressions to Python functions.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ joeyespo grip</title>
    <id>https://waylonwalker.com/joeyespo-grip/</id>
    <updated>2018-04-28T14:27:13Z</updated>
    <published>2018-04-28T14:27:13Z</published>
    <link href="https://waylonwalker.com/joeyespo-grip/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about grip, an amazing project by joeyespo. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/joeyespo/grip&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;grip&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/joeyespo&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;joeyespo&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Preview GitHub README.md files locally before committing them.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>FlexBox</title>
    <id>https://waylonwalker.com/flexbox-zombies/</id>
    <updated>2018-04-22T00:00:00Z</updated>
    <published>2018-04-22T00:00:00Z</published>
    <link href="https://waylonwalker.com/flexbox-zombies/" rel="alternate" type="text/html"></link>
    <summary type="text">em { color: #ff9966; } code { background: #FF06050A; color: #6394C8; } .item { color: #6394C8; font-size: 1.5rem; padding: 1rem; display: flex;...</summary>
    <content type="html">&lt;style&gt;&#xA;    em {&#xA;        color: #ff9966;&#xA;    }&#xA;    code {&#xA;        background: #FF06050A;&#xA;        color: #6394C8;&#xA;    }&#xA;    .item {&#xA;        color: #6394C8;&#xA;        font-size: 1.5rem;&#xA;        padding: 1rem;&#xA;        display: flex;&#xA;        justify-content: center;&#xA;        align-items: center;&#xA;        height: 100px;&#xA;        width: 100px;&#xA;        background: #351D57;&#xA;        margin: 5px;&#xA;        border: 2px solid #A83E75;&#xA;        box-shadow: 5px 5px 10px -5px rgba(0, 0, 0, .6);&#xA;    }&#xA;&#xA;    .flex_container {&#xA;        padding: 1rem;&#xA;        box-shadow: 5px 5px 10px -5px rgba(0, 0, 0, .6);&#xA;        background: rgba(99, 148, 200, .2);&#xA;        animation: animate_container 2s cubic-bezier(.66, -0.0, .28, 1.0) infinite both alternate;&#xA;    }&#xA;&#xA;    .flex_container:hover {&#xA;        animation: none&#xA;    }&#xA;&#xA;    @keyframes animate_container {&#xA;        0%{&#xA;            width: 95%;&#xA;        }&#xA;&#xA;        20% {&#xA;            width: 95%;&#xA;        }&#xA;&#xA;        80% {&#xA;            width: 200px;&#xA;        }&#xA;&#xA;        100% {&#xA;            width: 200px;&#xA;        }&#xA;    }&#xA;&#xA;    h3 {&#xA;        padding: 1rem;&#xA;        margin: 2rem;&#xA;        display: block;&#xA;        width: 100vw;&#xA;        background: white;&#xA;        color: white;&#xA;        background: #333;&#xA;        position: sticky;&#xA;        top: 0px;&#xA;        box-shadow:  0 0 #333,&#xA;                     -100vw 0 #333,&#xA;                     100vw 0 #333;&#xA;    }&#xA;&lt;/style&gt;&#xA;&lt;h2 id=&#34;flexbox-zombies&#34;&gt;Flexbox-zombies &lt;a href=&#34;#flexbox-zombies&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I recently finished up the flexbox-zombies course to learn more about flexbox, and to become proficient with it.  I can truly say that this course has changed the way that I create layouts.  Flexbox is very intuitive now.  What this course does really well at is explaining the concepts and hitting you with a ton of examples that you can work through really quickly.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/flex.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/flex.png&#34; alt=&#34;flexbox-zombies&#34;/ data-glightbox=&#34;description: flexbox-zombies&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A clip from the final round against Dave&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;basic-setup&#34;&gt;Basic Setup &lt;a href=&#34;#basic-setup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Flexbox requires a wrapper container to work  I will refer to this as the  flex container, and the items in that container as items.&lt;/p&gt;&#xA;&lt;h3 id=&#34;markup&#34;&gt;Markup &lt;a href=&#34;#markup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;I will use the following markup throughout the article, each with different css applied.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;note&lt;/strong&gt;  The animated container is inspired by the flexbox-zombies course.  I really like how it allows you to see the responsiveness of each layout.  In the early example the reasoning may not be aparent, but as we go along some of the flexbox parameters will make more sense if we are viewing them on a dynamic layout since flexbox is designed for building responsive design.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;flex_container&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;item&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;1&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;item&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;2&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;item&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;3&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;item&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;4&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div id=&#34;c0&#34;&gt;&#xA;    &lt;div class=&#34;flex_container&#34;&gt;&#xA;        &lt;div class=&#34;item&#34;&gt;1&lt;/div&gt;&#xA;        &lt;div class=&#34;item&#34;&gt;2&lt;/div&gt;&#xA;        &lt;div class=&#34;item&#34;&gt;3&lt;/div&gt;&#xA;        &lt;div class=&#34;item&#34;&gt;4&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;h3 id=&#34;base-style&#34;&gt;Base Style &lt;a href=&#34;#base-style&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;item&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#6394C8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;font-size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.5&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;padding&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;justify-content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;center&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;align-items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;center&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#351D57&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;margin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;border&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;solid&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#A83E75&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;box-shadow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;-5&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgba&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;.6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;flex_container&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;padding&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;box-shadow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;-5&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgba&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;.6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;rgba&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;99&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;148&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;.2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;animation&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;animate_container&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;cubic-bezier&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;.66&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;-0.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;.28&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;infinite&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;both&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;alternate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;/* Animate the .flex_container to show responsiveness */&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;flex_container&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;hover&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c&#34;&gt;/* But not on hover, let the user pause the annimation*/&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;animation&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;none&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;keyframes&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;animate_container&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;95&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;95&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;basic-technique&#34;&gt;Basic Technique &lt;a href=&#34;#basic-technique&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;1-turn-on-the-crossbow&#34;&gt;1. Turn on the crossbow &lt;a href=&#34;#1-turn-on-the-crossbow&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;applied to the flex container&lt;/em&gt;&#xA;&lt;code&gt;display: flex;&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Turning on flexbox on the flex container will cause all child elements to align in a row at the top left corner of the parent container.  By defualt they will shrink to the minimum content size, but not automatically grow larger than their specified size.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;flex_container&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;style&gt;&#xA;    .c1 .flex_container {&#xA;            display: flex;&#xA;            flex-direction: row;&#xA;    }&#xA;&lt;/style&gt;&#xA;&lt;div class=&#34;c1&#34;&gt;&#xA;    &lt;div class=&#34;c1 flex_container&#34;&gt;&#xA;        &lt;div class=&#34;item&#34;&gt;1&lt;/div&gt;&#xA;        &lt;div class=&#34;item&#34;&gt;2&lt;/div&gt;&#xA;        &lt;div class=&#34;item&#34;&gt;3&lt;/div&gt;&#xA;        &lt;div class=&#34;item&#34;&gt;4&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;h3 id=&#34;2-aim-it-if-necessary&#34;&gt;2. Aim it if necessary &lt;a href=&#34;#2-aim-it-if-necessary&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;applied to the flex container&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;This parameter determines the direction that the flexbox container will orient the flex items.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;example&lt;/strong&gt; &lt;code&gt;flex-direction: row&lt;/code&gt;&#xA;&lt;strong&gt;options&lt;/strong&gt; = &lt;code&gt;(&amp;#39;row&amp;#39;(default), &amp;#39;column&amp;#39;,  &amp;#39;row-reverse&amp;#39;, &amp;#39;column-reverse&amp;#39;)&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;row&#34;&gt;row &lt;a href=&#34;#row&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;style&gt;&#xA;    .c2a .flex_container {&#xA;            display: flex;&#xA;            flex-direction: row;&#xA;    }&#xA;&lt;/style&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;flex_container&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;flex-direction&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;row&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;c2a&#34;&gt;&#xA;    &lt;div class=&#34;c1 flex_container&#34;&gt;&#xA;        &lt;div class=&#34;item&#34;&gt;1&lt;/div&gt;&#xA;        &lt;div class=&#34;item&#34;&gt;2&lt;/div&gt;&#xA;        &lt;div class=&#34;item&#34;&gt;3&lt;/div&gt;&#xA;        &lt;div class=&#34;item&#34;&gt;4&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;h4 id=&#34;column&#34;&gt;column &lt;a href=&#34;#column&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;style&gt;&#xA;    .c2b .flex_container {&#xA;            display: flex;&#xA;            flex-direction: column;&#xA;    }&#xA;&lt;/style&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;flex_container&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;flex-direction&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;column&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;c2b&#34;&gt;&#xA;    &lt;div class=&#34;c1 flex_container&#34;&gt;&#xA;        &lt;div class=&#34;item&#34;&gt;1&lt;/div&gt;&#xA;        &lt;div class=&#34;item&#34;&gt;2&lt;/div&gt;&#xA;        &lt;div class=&#34;item&#34;&gt;3&lt;/div&gt;&#xA;        &lt;div class=&#34;item&#34;&gt;4&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;h4 id=&#34;row-reverse&#34;&gt;row-reverse &lt;a href=&#34;#row-reverse&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;style&gt;&#xA;    .c2c .flex_container {&#xA;            display: flex;&#xA;            flex-direction: row-reverse;&#xA;    }&#xA;&lt;/style&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;flex_container&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;flex-direction&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;row-reverse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;c2c&#34;&gt;&#xA;    &lt;div class=&#34;c1 flex_container&#34;&gt;&#xA;        &lt;div class=&#34;item&#34;&gt;1&lt;/div&gt;&#xA;        &lt;div class=&#34;item&#34;&gt;2&lt;/div&gt;&#xA;        &lt;div class=&#34;item&#34;&gt;3&lt;/div&gt;&#xA;        &lt;div class=&#34;item&#34;&gt;4&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;h4 id=&#34;column-reverse&#34;&gt;column-reverse &lt;a href=&#34;#column-reverse&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;style&gt;&#xA;    .c2d .flex_container {&#xA;            display: flex;&#xA;            flex-direction: column-reverse;&#xA;    }&#xA;&lt;/style&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;flex_container&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;flex-direction&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;column&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rerverse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;c2d&#34;&gt;&#xA;    &lt;div class=&#34;c1 flex_container&#34;&gt;&#xA;        &lt;div class=&#34;item&#34;&gt;1&lt;/div&gt;&#xA;        &lt;div class=&#34;item&#34;&gt;2&lt;/div&gt;&#xA;        &lt;div class=&#34;item&#34;&gt;3&lt;/div&gt;&#xA;        &lt;div class=&#34;item&#34;&gt;4&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;h3 id=&#34;3-line-them-up-along-the-red-justify-laser&#34;&gt;3. Line them up along the red Justify Laser &lt;a href=&#34;#3-line-them-up-along-the-red-justify-laser&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;applied to the flex container&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;This parameter determines justification of the flex items within the flex container.  Think spacing or positioning around the flex items.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;example&lt;/strong&gt; &lt;code&gt;justify-content: flex-end;&lt;/code&gt;&#xA;&lt;strong&gt;options&lt;/strong&gt; = &lt;code&gt;(&amp;#39;flex-start&amp;#39;, &amp;#39;flex-end&amp;#39;, &amp;#39;space-between&amp;#39;, &amp;#39;space-around&amp;#39;, &amp;#39;space-evenly&amp;#39;, &amp;#39;stretch&amp;#39;, &amp;#39;center&amp;#39;, &amp;#39;start&amp;#39;, &amp;#39;end&amp;#39;, &amp;#39;left&amp;#39;, &amp;#39;right&amp;#39;)&lt;/code&gt;&lt;/p&gt;&#xA;&lt;style&gt;.c3a .flex_container { display: flex; justify-content: flex-start; }&lt;/style&gt;&#xA;&lt;style&gt;.c3b .flex_container { display: flex; justify-content: flex-end; }&lt;/style&gt;&#xA;&lt;style&gt;.c3c .flex_container { display: flex; justify-content: space-between; }&lt;/style&gt;&#xA;&lt;style&gt;.c3d .flex_container { display: flex; justify-content: space-around; }&lt;/style&gt;&#xA;&lt;style&gt;.c3e .flex_container { display: flex; justify-content: space-evenly; }&lt;/style&gt;&#xA;&lt;style&gt;.c3f .flex_container { display: flex; justify-content: center; }&lt;/style&gt;&#xA;&lt;h4 id=&#34;flex-start&#34;&gt;flex-start &lt;a href=&#34;#flex-start&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;flex_container&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;justify-content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex-start&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;c3a&#34;&gt; &lt;div class=&#34;flex_container&#34;&gt; &lt;div class=&#34;item&#34;&gt;1&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;2&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;3&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;4&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&#xA;&lt;h4 id=&#34;flex-end&#34;&gt;flex-end &lt;a href=&#34;#flex-end&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;flex_container&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;justify-content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex-end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;c3b&#34;&gt; &lt;div class=&#34;flex_container&#34;&gt; &lt;div class=&#34;item&#34;&gt;1&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;2&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;3&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;4&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&#xA;&lt;h4 id=&#34;space-between&#34;&gt;space-between &lt;a href=&#34;#space-between&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;flex_container&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;justify-content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;space-between&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;c3c&#34;&gt; &lt;div class=&#34;flex_container&#34;&gt; &lt;div class=&#34;item&#34;&gt;1&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;2&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;3&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;4&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&#xA;&lt;h4 id=&#34;space-around&#34;&gt;space-around &lt;a href=&#34;#space-around&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;flex_container&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;justify-content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;space-around&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;c3d&#34;&gt; &lt;div class=&#34;flex_container&#34;&gt; &lt;div class=&#34;item&#34;&gt;1&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;2&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;3&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;4&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&#xA;&lt;h4 id=&#34;space-evenly&#34;&gt;space-evenly &lt;a href=&#34;#space-evenly&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;flex_container&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;justify-content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;space&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;evenly&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;c3e&#34;&gt; &lt;div class=&#34;flex_container&#34;&gt; &lt;div class=&#34;item&#34;&gt;1&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;2&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;3&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;4&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&#xA;&lt;h4 id=&#34;center&#34;&gt;center &lt;a href=&#34;#center&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;flex_container&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;justify-content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;center&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;c3f&#34;&gt; &lt;div class=&#34;flex_container&#34;&gt; &lt;div class=&#34;item&#34;&gt;1&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;2&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;3&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;4&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&#xA;&lt;h3 id=&#34;3b-align-them-along-the--blue-alignment-laser&#34;&gt;3b. Align them along the  blue Alignment Laser &lt;a href=&#34;#3b-align-them-along-the--blue-alignment-laser&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;applied to the flex container&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;align-items: flex-end;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;options = (‘flex-start’, ‘flex-end’, ’normal’, ’end’, ‘self-start’, ‘self-end’, ‘center’, ‘start’ ’end’)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;style&gt;.c4a .flex_container { height: 200px; display: flex; align-items: flex-start; }&lt;/style&gt;&#xA;&lt;style&gt;.c4b .flex_container { height: 200px; display: flex; align-items: flex-end; }&lt;/style&gt;&#xA;&lt;style&gt;.c4c .flex_container { height: 200px; display: flex; align-items: center; }&lt;/style&gt;&#xA;&lt;h4 id=&#34;flex-start-1&#34;&gt;flex-start &lt;a href=&#34;#flex-start-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;flex_container&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;justify-content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex-start&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;c4a&#34;&gt; &lt;div class=&#34;flex_container&#34;&gt; &lt;div class=&#34;item&#34;&gt;1&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;2&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;3&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;4&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&#xA;&lt;h4 id=&#34;flex-end-1&#34;&gt;flex-end &lt;a href=&#34;#flex-end-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;flex_container&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;justify-content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex-end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;c4b&#34;&gt; &lt;div class=&#34;flex_container&#34;&gt; &lt;div class=&#34;item&#34;&gt;1&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;2&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;3&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;4&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&#xA;&lt;h4 id=&#34;center-1&#34;&gt;center &lt;a href=&#34;#center-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;flex_container&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;justify-content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;center&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;c4c&#34;&gt; &lt;div class=&#34;flex_container&#34;&gt; &lt;div class=&#34;item&#34;&gt;1&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;2&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;3&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;4&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&#xA;&lt;h3 id=&#34;4-take-care-of-any-one-off-alignments&#34;&gt;4. Take care of any one-off alignments &lt;a href=&#34;#4-take-care-of-any-one-off-alignments&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;applied to items&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;align-self: flex-start;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;options = (‘flex-start’, ‘flex-end’, ’normal’, ’end’, ‘self-start’, ‘self-end’, ‘center’, ‘start’ ’end’)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;style&gt;&#xA;    .c5d .flex_container { height: 200px; display: flex; align-items: stretch; }&#xA;    .c5d .item:nth-of-type(1){ align-self: flex-start  }&#xA;    .c5d .item:nth-of-type(2){ align-self: center}&#xA;    .c5d .item:nth-of-type(3){ height: auto; align-self: stretch;}&#xA;    .c5d .item:nth-of-type(4){ height: auto; align-self: flex-end;}&#xA;&lt;/style&gt;&#xA;&lt;h4 id=&#34;combine&#34;&gt;combine &lt;a href=&#34;#combine&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;the align-self property is used to take care of one off alignments and is applied to the item itself.  All of the parameters are the same as &lt;code&gt;align-items&lt;/code&gt;.  In this example we will apply all of the previous example alignment types into one.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;flex_container&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;nth-of-type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;k&#34;&gt;align-self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex-start&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;nth-of-type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;k&#34;&gt;align-self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;center&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;nth-of-type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;k&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;auto&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;align-self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;stretch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;nth-of-type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;k&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;auto&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;align-self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex-end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;c5d&#34;&gt; &lt;div class=&#34;flex_container&#34;&gt; &lt;div class=&#34;item&#34;&gt;1&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;2&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;3&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;4&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&#xA;&lt;h3 id=&#34;6-growth-along-the-red-justify-laser&#34;&gt;6. growth along the red Justify Laser &lt;a href=&#34;#6-growth-along-the-red-justify-laser&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;applied to items&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;flex-grow: 1&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;style&gt;.c6a .flex_container { display: flex; align-items: flex-start; } .c6a .item:nth-of-type(3){background: #B5F685; flex-grow: 1;}&lt;/style&gt;&#xA;&lt;style&gt;.c6b .flex_container { display: flex; align-items: flex-start; } .c6b .item:nth-of-type(3){background: #B5F685; flex-grow: 1;} .c6b .item:nth-of-type(1){background: #B5F685; flex-grow: 2;}&lt;/style&gt;&#xA;&lt;h4 id=&#34;flex-grow&#34;&gt;flex-grow &lt;a href=&#34;#flex-grow&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;By setting &lt;code&gt;flex-grow: 1;&lt;/code&gt; on item &lt;code&gt;3&lt;/code&gt; it will take up any available free space.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;flex_container&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;nth-of-type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;flex-grow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;c6a&#34;&gt; &lt;div class=&#34;flex_container&#34;&gt; &lt;div class=&#34;item&#34;&gt;1&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;2&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;3&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;4&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&#xA;&lt;h4 id=&#34;multiple-flex-grow&#34;&gt;multiple flex-grow &lt;a href=&#34;#multiple-flex-grow&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;By setting &lt;code&gt;flex-grow: 2;&lt;/code&gt; on item  &lt;code&gt;1&lt;/code&gt; will take up the available free space 2x faster than &lt;code&gt;3&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;flex_container&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;justify-content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex-start&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;nth-of-type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;flex-grow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;nth-of-type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;flex-grow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;c6b&#34;&gt; &lt;div class=&#34;flex_container&#34;&gt; &lt;div class=&#34;item&#34;&gt;1&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;2&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;3&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;4&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&#xA;&lt;h3 id=&#34;7-setting-length-of-items-along-the-red-justify-laser&#34;&gt;7. setting length of items along the red Justify Laser &lt;a href=&#34;#7-setting-length-of-items-along-the-red-justify-laser&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;applied to items&lt;/em&gt;&#xA;&lt;em&gt;in order of importance&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;min-width&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;max-width&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;flex-basis&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;width&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;8-out-of-order&#34;&gt;8. Out of Order &lt;a href=&#34;#8-out-of-order&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;applied to items&lt;/em&gt;&#xA;&lt;em&gt;behaves similar to z-index&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;order&lt;/code&gt; - takes an integer value&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;style&gt;.c8a .flex_container { display: flex;} .c8a .item:nth-of-type(3){background: #B5F685; order: 1;}&lt;/style&gt;&#xA;&lt;style&gt;.c8b .flex_container { display: flex;} .c8b .item:nth-of-type(3){background: #B5F685; order: -1;}&lt;/style&gt;&#xA;&lt;h4 id=&#34;order-1&#34;&gt;order 1 &lt;a href=&#34;#order-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;flex_container&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;nth-of-type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;order&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;c8a&#34;&gt; &lt;div class=&#34;flex_container&#34;&gt; &lt;div class=&#34;item&#34;&gt;1&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;2&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;3&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;4&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&#xA;&lt;h4 id=&#34;order--1&#34;&gt;order -1 &lt;a href=&#34;#order--1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;flex_container&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;nth-of-type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;order&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;-1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;c8b&#34;&gt; &lt;div class=&#34;flex_container&#34;&gt; &lt;div class=&#34;item&#34;&gt;1&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;2&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;3&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;4&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&#xA;&lt;h3 id=&#34;9-get-your-own-line&#34;&gt;9. Get your own Line &lt;a href=&#34;#9-get-your-own-line&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;applied to the flex container&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;flex-wrap&lt;/code&gt; - options= &lt;code&gt;(wrap, nowrap(default))&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;prefers wrap over shrink&lt;/li&gt;&#xA;&lt;li&gt;but will still shrink after fully wraped&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;style&gt;.c9a .flex_container { display: flex; flex-wrap: wrap;} .c9a {height: 700px;}&lt;/style&gt;&#xA;&lt;h4 id=&#34;wrap&#34;&gt;wrap &lt;a href=&#34;#wrap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;flex_container&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;flex-wrap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;wrap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;c9a&#34;&gt; &lt;div class=&#34;flex_container&#34;&gt; &lt;div class=&#34;item&#34;&gt;1&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;2&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;3&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;4&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&#xA;&lt;h3 id=&#34;10-aligning-wrapped-content&#34;&gt;10. Aligning wrapped content &lt;a href=&#34;#10-aligning-wrapped-content&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;applied to the flex container&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;align-content&lt;/code&gt; - same specs as align-items but works on wrapped content.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;style&gt;.c10a .flex_container { display: flex; flex-wrap: wrap; align-content: center;} .c10a .flex_container{height: 700px;}&lt;/style&gt;&#xA;&lt;h4 id=&#34;wrap-1&#34;&gt;wrap &lt;a href=&#34;#wrap-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;flex_container&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;flex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;700&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;flex-wrap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;wrap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;align-content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;center&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;c10a&#34;&gt; &lt;div class=&#34;flex_container&#34;&gt; &lt;div class=&#34;item&#34;&gt;1&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;2&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;3&lt;/div&gt; &lt;div class=&#34;item&#34;&gt;4&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&#xA;&lt;h3 id=&#34;11-shortcuts&#34;&gt;11. Shortcuts &lt;a href=&#34;#11-shortcuts&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;flex&lt;/strong&gt;&#xA;&lt;em&gt;applied to the flex items&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;flex: grow, shrink, basis&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;defaults - &lt;code&gt;flex: 1 1 0px&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;setting &lt;code&gt;flex: none&lt;/code&gt; is equivalent to &lt;code&gt;flex: 0 0 auto&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;flex-flow&lt;/strong&gt;&#xA;&lt;em&gt;applied to the flex container&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;flex: flex-direction flex-wrap&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;chapter-7-in-a-perfect-world-flex-basis&#34;&gt;Chapter 7: In a Perfect World (flex-basis) &lt;a href=&#34;#chapter-7-in-a-perfect-world-flex-basis&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;flex-basis&lt;/code&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Starting point, ideal size, hypothetical size&lt;/li&gt;&#xA;&lt;li&gt;applied to items&lt;/li&gt;&#xA;&lt;li&gt;overrides width&lt;/li&gt;&#xA;&lt;li&gt;shinks if necessary&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;When Shooting Horizontally it controls width&lt;/p&gt;&#xA;&lt;p&gt;When Shooting Vertically it controls height&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ psf black</title>
    <id>https://waylonwalker.com/psf-black/</id>
    <updated>2018-03-16T18:10:18Z</updated>
    <published>2018-03-16T18:10:18Z</published>
    <link href="https://waylonwalker.com/psf-black/" rel="alternate" type="text/html"></link>
    <summary type="text">psf has done a fantastic job with black. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/psf&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;psf&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/psf/black&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;black&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;The uncompromising Python code formatter&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tfeldmann organize</title>
    <id>https://waylonwalker.com/tfeldmann-organize/</id>
    <updated>2018-03-16T18:07:07Z</updated>
    <published>2018-03-16T18:07:07Z</published>
    <link href="https://waylonwalker.com/tfeldmann-organize/" rel="alternate" type="text/html"></link>
    <summary type="text">tfeldmann has done a fantastic job with organize. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/tfeldmann&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tfeldmann&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/tfeldmann/organize&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;organize&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;The file management automation tool.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ albinotonnina albinotonnina.com</title>
    <id>https://waylonwalker.com/albinotonnina-albinotonnina-com/</id>
    <updated>2018-03-13T19:42:44Z</updated>
    <published>2018-03-13T19:42:44Z</published>
    <link href="https://waylonwalker.com/albinotonnina-albinotonnina-com/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered albinotonnina.com by albinotonnina, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/albinotonnina/albinotonnina.com&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;albinotonnina.com&lt;/a&gt; by &lt;a href=&#34;https://github.com/albinotonnina&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;albinotonnina&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;source-code&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ psf requests-html</title>
    <id>https://waylonwalker.com/psf-requests-html/</id>
    <updated>2018-02-25T14:39:48Z</updated>
    <published>2018-02-25T14:39:48Z</published>
    <link href="https://waylonwalker.com/psf-requests-html/" rel="alternate" type="text/html"></link>
    <summary type="text">I like psf&#39;s project requests-html.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/psf&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;psf’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/psf/requests-html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;requests-html&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Pythonic &lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;HTML&lt;/a&gt; Parsing for Humans™&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ wentin CSS-Mono</title>
    <id>https://waylonwalker.com/wentin-css-mono/</id>
    <updated>2018-02-19T02:05:53Z</updated>
    <published>2018-02-19T02:05:53Z</published>
    <link href="https://waylonwalker.com/wentin-css-mono/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out CSS-Mono by wentin. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/wentin/CSS-Mono&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;CSS-Mono&lt;/a&gt; by &lt;a href=&#34;https://github.com/wentin&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;wentin&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;Monospaced Typeface Created for CSS Coding&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ dixler pc</title>
    <id>https://waylonwalker.com/dixler-pc/</id>
    <updated>2018-02-06T02:02:18Z</updated>
    <published>2018-02-06T02:02:18Z</published>
    <link href="https://waylonwalker.com/dixler-pc/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by pc from dixler.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/dixler/pc&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pc&lt;/a&gt; from &lt;a href=&#34;https://github.com/dixler&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dixler&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;python calculator purely aesthetic. probably pretty glitchy. sorry in advance.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Vim Notes</title>
    <id>https://waylonwalker.com/vim-notes/</id>
    <updated>2018-02-01T00:00:00Z</updated>
    <published>2018-02-01T00:00:00Z</published>
    <link href="https://waylonwalker.com/vim-notes/" rel="alternate" type="text/html"></link>
    <summary type="text">norcalli/neovim-plugin</summary>
    <content type="html">&lt;h1 id=&#34;vim-notes&#34;&gt;vim notes&lt;/h1&gt;&#xA;&lt;h2 id=&#34;nvim-lua&#34;&gt;nvim lua &lt;a href=&#34;#nvim-lua&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/norcalli/neovim-plugin&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;norcalli/neovim-plugin&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;nvim-lsp&#34;&gt;nvim lsp &lt;a href=&#34;#nvim-lsp&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/python-lsp/python-lsp-server&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;python-lsp/python-lsp-server&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;using-c-to-change-text&#34;&gt;Using c to change text &lt;a href=&#34;#using-c-to-change-text&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have gone quite awhile without using &lt;code&gt;c&lt;/code&gt; and instead using &lt;code&gt;d&lt;/code&gt;.  The reason that I started using &lt;code&gt;c&lt;/code&gt; is because it automatically places you into insert mode.  This not only saves me one keystroke for commands such as &lt;code&gt;diwi&lt;/code&gt; is now &lt;code&gt;ciw&lt;/code&gt;, but it also works with the repeat &lt;code&gt;.&lt;/code&gt; command!!!  This is huge.  When refactoring a document I had been creating a macro to change one word to another, using &lt;code&gt;c&lt;/code&gt; instead of &lt;code&gt;d&lt;/code&gt; allows the use of the &lt;code&gt;.&lt;/code&gt; rather than needing to create a macro.&lt;/p&gt;&#xA;&lt;h2 id=&#34;case-for-vim&#34;&gt;Case for vim &lt;a href=&#34;#case-for-vim&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Sublime/VSCode cannot&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;edit a macro register&lt;/li&gt;&#xA;&lt;li&gt;register&lt;/li&gt;&#xA;&lt;li&gt;quickfix&lt;/li&gt;&#xA;&lt;li&gt;gF&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;autocomplete&#34;&gt;autocomplete &lt;a href=&#34;#autocomplete&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;c-x&gt; &lt;c-p&gt; repeats previously typed text&lt;/c-p&gt;&lt;/c-x&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;1. Whole lines                                     |i CTRL-X CTRL-L|&#xA;2. keywords in the current file                    |i CTRL-X CTRL-N|&#xA;3. keywords in &amp;#39;dictionary&amp;#39;                        |i CTRL-X CTRL-K|&#xA;4. keywords in &amp;#39;thesaurus&amp;#39;, thesaurus-style        |i CTRL-X CTRL-T|&#xA;5. keywords in the current and included files      |i CTRL-X CTRL-I|&#xA;6. tags                                            |i CTRL-X CTRL-]|&#xA;7. file names                                      |i CTRL-X CTRL-F|&#xA;8. definitions or macros                           |i CTRL-X CTRL-D|&#xA;9. Vim command-line                                |i CTRL-X CTRL-V|&#xA;10. User defined completion                        |i CTRL-X CTRL-U|&#xA;11. omni completion                                |i CTRL-X CTRL-O|&#xA;12. Spelling suggestions                           |i CTRL-X s|&#xA;13. keywords in &amp;#39;complete&amp;#39;                         |i CTRL-N|&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;z-commands&#34;&gt;z-commands &lt;a href=&#34;#z-commands&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;zn&lt;/code&gt;&#x9;&#x9;Fold none: reset ‘foldenable’.  All folds will be open.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ openimages dataset</title>
    <id>https://waylonwalker.com/openimages-dataset/</id>
    <updated>2018-01-24T21:19:02Z</updated>
    <published>2018-01-24T21:19:02Z</published>
    <link href="https://waylonwalker.com/openimages-dataset/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on dataset by openimages.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/openimages/dataset&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dataset&lt;/a&gt; by &lt;a href=&#34;https://github.com/openimages&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;openimages&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The Open Images dataset&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ HamidFaraji panda-theme-cmder</title>
    <id>https://waylonwalker.com/hamidfaraji-panda-theme-cmder/</id>
    <updated>2018-01-07T15:48:41Z</updated>
    <published>2018-01-07T15:48:41Z</published>
    <link href="https://waylonwalker.com/hamidfaraji-panda-theme-cmder/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by panda-theme-cmder from HamidFaraji.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/HamidFaraji/panda-theme-cmder&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;panda-theme-cmder&lt;/a&gt; from &lt;a href=&#34;https://github.com/HamidFaraji&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;HamidFaraji&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Panda Syntax Theme for Cmder&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ jhermann awesome-python-talks</title>
    <id>https://waylonwalker.com/jhermann-awesome-python-talks/</id>
    <updated>2017-12-02T15:14:15Z</updated>
    <published>2017-12-02T15:14:15Z</published>
    <link href="https://waylonwalker.com/jhermann-awesome-python-talks/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m impressed by awesome-python-talks from jhermann.</summary>
    <content type="html">&lt;p&gt;I’m impressed by &lt;a href=&#34;https://github.com/jhermann/awesome-python-talks&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;awesome-python-talks&lt;/a&gt; from &lt;a href=&#34;https://github.com/jhermann&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jhermann&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;🎬 🎓 An opinionated list of awesome videos related to Python, with a focus on training and gaining hands-on experience.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ datacamp datacamp_facebook_live_titanic</title>
    <id>https://waylonwalker.com/datacamp-datacamp_facebook_live_titanic/</id>
    <updated>2017-12-01T02:26:55Z</updated>
    <published>2017-12-01T02:26:55Z</published>
    <link href="https://waylonwalker.com/datacamp-datacamp_facebook_live_titanic/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking for inspiration? datacamp_live_titanic by datacamp.</summary>
    <content type="html">&lt;p&gt;Looking for inspiration? &lt;a href=&#34;https://github.com/datacamp/datacamp_facebook_live_titanic&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;datacamp_facebook_live_titanic&lt;/a&gt; by &lt;a href=&#34;https://github.com/datacamp&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;datacamp&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;DataCamp Facebook Live Code Along Session 2: Learn how to complete a Kaggle competition using exploratory data analysis, data munging, data cleaning and machine leaning. Enjoy.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ RichardLitt standard-readme</title>
    <id>https://waylonwalker.com/richardlitt-standard-readme/</id>
    <updated>2017-09-24T00:28:48Z</updated>
    <published>2017-09-24T00:28:48Z</published>
    <link href="https://waylonwalker.com/richardlitt-standard-readme/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about standard-readme, an amazing project by RichardLitt. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/RichardLitt/standard-readme&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;standard-readme&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/RichardLitt&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;RichardLitt&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;A standard style for README files&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ lepture python-livereload</title>
    <id>https://waylonwalker.com/lepture-python-livereload/</id>
    <updated>2017-09-21T12:25:35Z</updated>
    <published>2017-09-21T12:25:35Z</published>
    <link href="https://waylonwalker.com/lepture-python-livereload/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out lepture and their project python-livereload.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/lepture&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lepture&lt;/a&gt; and their project &lt;a href=&#34;https://github.com/lepture/python-livereload&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;python-livereload&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;livereload server in python&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ tqdm tqdm</title>
    <id>https://waylonwalker.com/tqdm-tqdm/</id>
    <updated>2017-09-16T01:55:40Z</updated>
    <published>2017-09-16T01:55:40Z</published>
    <link href="https://waylonwalker.com/tqdm-tqdm/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered tqdm by tqdm, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/tqdm/tqdm&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tqdm&lt;/a&gt; by &lt;a href=&#34;https://github.com/tqdm&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tqdm&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;⚡ A Fast, Extensible Progress Bar for Python and CLI&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ cmderdev cmder</title>
    <id>https://waylonwalker.com/cmderdev-cmder/</id>
    <updated>2017-09-16T01:55:30Z</updated>
    <published>2017-09-16T01:55:30Z</published>
    <link href="https://waylonwalker.com/cmderdev-cmder/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m really excited about cmder, an amazing project by cmderdev. It&#39;s worth exploring!</summary>
    <content type="html">&lt;p&gt;I’m really excited about &lt;a href=&#34;https://github.com/cmderdev/cmder&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cmder&lt;/a&gt;, an amazing project by &lt;a href=&#34;https://github.com/cmderdev&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cmderdev&lt;/a&gt;. It’s worth exploring!&lt;/p&gt;&#xA;&lt;p&gt;Lovely console emulator package for Windows&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ navdeep-G setup.py</title>
    <id>https://waylonwalker.com/navdeep-g-setup-py/</id>
    <updated>2017-08-31T17:54:38Z</updated>
    <published>2017-08-31T17:54:38Z</published>
    <link href="https://waylonwalker.com/navdeep-g-setup-py/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered setup.py by navdeep-G, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/navdeep-G/setup.py&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;setup.py&lt;/a&gt; by &lt;a href=&#34;https://github.com/navdeep-G&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;navdeep-G&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;📦 A Human’s Ultimate Guide to setup.py.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ WaylonWalker pyDataVizDay</title>
    <id>https://waylonwalker.com/waylonwalker-pydatavizday/</id>
    <updated>2017-07-04T12:26:06Z</updated>
    <published>2017-07-04T12:26:06Z</published>
    <link href="https://waylonwalker.com/waylonwalker-pydatavizday/" rel="alternate" type="text/html"></link>
    <summary type="text">I like WaylonWalker&#39;s project pyDataVizDay.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/WaylonWalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;WaylonWalker’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/WaylonWalker/pyDataVizDay&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pyDataVizDay&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;A python implementation of the Data Viz Day visualization.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ niloch iplotter</title>
    <id>https://waylonwalker.com/niloch-iplotter/</id>
    <updated>2017-06-14T19:48:00Z</updated>
    <published>2017-06-14T19:48:00Z</published>
    <link href="https://waylonwalker.com/niloch-iplotter/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on iplotter, created by niloch.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/niloch/iplotter&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;iplotter&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/niloch&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;niloch&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;JavaScript charting in ipython/jupyter notebooks -&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ encode apistar</title>
    <id>https://waylonwalker.com/encode-apistar/</id>
    <updated>2017-06-10T00:53:32Z</updated>
    <published>2017-06-10T00:53:32Z</published>
    <link href="https://waylonwalker.com/encode-apistar/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred apistar by encode. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/encode/apistar&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;apistar&lt;/a&gt; by &lt;a href=&#34;https://github.com/encode&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;encode&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;The Web API toolkit. 🛠&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pypyjs pypyjs</title>
    <id>https://waylonwalker.com/pypyjs-pypyjs/</id>
    <updated>2017-05-16T01:30:51Z</updated>
    <published>2017-05-16T01:30:51Z</published>
    <link href="https://waylonwalker.com/pypyjs-pypyjs/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered pypyjs by pypyjs, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/pypyjs/pypyjs&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pypyjs&lt;/a&gt; by &lt;a href=&#34;https://github.com/pypyjs&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pypyjs&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;PyPy compiled to JavaScript&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ gtnx pandas-highcharts</title>
    <id>https://waylonwalker.com/gtnx-pandas-highcharts/</id>
    <updated>2017-05-10T14:36:46Z</updated>
    <published>2017-05-10T14:36:46Z</published>
    <link href="https://waylonwalker.com/gtnx-pandas-highcharts/" rel="alternate" type="text/html"></link>
    <summary type="text">If you&#39;re into interesting projects, don&#39;t miss out on pandas-highcharts, created by gtnx.</summary>
    <content type="html">&lt;p&gt;If you’re into interesting projects, don’t miss out on &lt;a href=&#34;https://github.com/gtnx/pandas-highcharts&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pandas-highcharts&lt;/a&gt;, created by &lt;a href=&#34;https://github.com/gtnx&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gtnx&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Beautiful charting of pandas.DataFrame with Highcharts&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ jakevdp PythonDataScienceHandbook</title>
    <id>https://waylonwalker.com/jakevdp-pythondatasciencehandbook/</id>
    <updated>2017-04-28T15:06:57Z</updated>
    <published>2017-04-28T15:06:57Z</published>
    <link href="https://waylonwalker.com/jakevdp-pythondatasciencehandbook/" rel="alternate" type="text/html"></link>
    <summary type="text">Check out PythonDataScienceHandbook by jakevdp. It&#39;s a well-crafted project with great potential.</summary>
    <content type="html">&lt;p&gt;Check out &lt;a href=&#34;https://github.com/jakevdp/PythonDataScienceHandbook&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;PythonDataScienceHandbook&lt;/a&gt; by &lt;a href=&#34;https://github.com/jakevdp&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jakevdp&lt;/a&gt;. It’s a well-crafted project with great potential.&lt;/p&gt;&#xA;&lt;p&gt;Python Data Science Handbook: full text in Jupyter Notebooks&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ timofurrer colorful</title>
    <id>https://waylonwalker.com/timofurrer-colorful/</id>
    <updated>2017-04-20T22:04:26Z</updated>
    <published>2017-04-20T22:04:26Z</published>
    <link href="https://waylonwalker.com/timofurrer-colorful/" rel="alternate" type="text/html"></link>
    <summary type="text">I like timofurrer&#39;s project colorful.</summary>
    <content type="html">&lt;p&gt;I like &lt;a href=&#34;https://github.com/timofurrer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;timofurrer’s&lt;/a&gt; project &lt;a href=&#34;https://github.com/timofurrer/colorful&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;colorful&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Terminal string styling done right, in Python 🐍 🎉&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ cookiecutter cookiecutter</title>
    <id>https://waylonwalker.com/cookiecutter-cookiecutter/</id>
    <updated>2017-01-21T04:30:22Z</updated>
    <published>2017-01-21T04:30:22Z</published>
    <link href="https://waylonwalker.com/cookiecutter-cookiecutter/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred cookiecutter by cookiecutter. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/cookiecutter/cookiecutter&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cookiecutter&lt;/a&gt; by &lt;a href=&#34;https://github.com/cookiecutter&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;cookiecutter&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;A cross-platform command-line utility that creates projects from cookiecutters (project templates), e.g. Python package projects, C projects.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ jupyterlab jupyterlab</title>
    <id>https://waylonwalker.com/jupyterlab-jupyterlab/</id>
    <updated>2016-12-13T04:17:08Z</updated>
    <published>2016-12-13T04:17:08Z</published>
    <link href="https://waylonwalker.com/jupyterlab-jupyterlab/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered jupyterlab by jupyterlab, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/jupyterlab/jupyterlab&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jupyterlab&lt;/a&gt; by &lt;a href=&#34;https://github.com/jupyterlab&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jupyterlab&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;JupyterLab computational environment.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ nickhould tidy-data-python</title>
    <id>https://waylonwalker.com/nickhould-tidy-data-python/</id>
    <updated>2016-12-09T06:17:35Z</updated>
    <published>2016-12-09T06:17:35Z</published>
    <link href="https://waylonwalker.com/nickhould-tidy-data-python/" rel="alternate" type="text/html"></link>
    <summary type="text">Just starred tidy-data-python by nickhould. It&#39;s an exciting project with a lot to offer.</summary>
    <content type="html">&lt;p&gt;Just starred &lt;a href=&#34;https://github.com/nickhould/tidy-data-python&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tidy-data-python&lt;/a&gt; by &lt;a href=&#34;https://github.com/nickhould&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nickhould&lt;/a&gt;. It’s an exciting project with a lot to offer.&lt;/p&gt;&#xA;&lt;p&gt;Tidy Data in Python Jupyter Notebook&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ mikeckennedy write-pythonic-code-demos</title>
    <id>https://waylonwalker.com/mikeckennedy-write-pythonic-code-demos/</id>
    <updated>2016-11-22T20:44:53Z</updated>
    <published>2016-11-22T20:44:53Z</published>
    <link href="https://waylonwalker.com/mikeckennedy-write-pythonic-code-demos/" rel="alternate" type="text/html"></link>
    <summary type="text">The work on write-pythonic-code-demos by mikeckennedy.</summary>
    <content type="html">&lt;p&gt;The work on &lt;a href=&#34;https://github.com/mikeckennedy/write-pythonic-code-demos&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;write-pythonic-code-demos&lt;/a&gt; by &lt;a href=&#34;https://github.com/mikeckennedy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mikeckennedy&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Write Pythonic Code Like a Seasoned Developer video course demo materials.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ mikeckennedy write-pythonic-code-for-better-data-science-webcast</title>
    <id>https://waylonwalker.com/mikeckennedy-write-pythonic-code-for-better-data-science-webcast/</id>
    <updated>2016-11-22T19:15:51Z</updated>
    <published>2016-11-22T19:15:51Z</published>
    <link href="https://waylonwalker.com/mikeckennedy-write-pythonic-code-for-better-data-science-webcast/" rel="alternate" type="text/html"></link>
    <summary type="text">mikeckennedy has done a fantastic job with write-pythonic-code-for-better-data-science-webcast. Highly recommend taking a look.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/mikeckennedy&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;mikeckennedy&lt;/a&gt; has done a fantastic job with &lt;a href=&#34;https://github.com/mikeckennedy/write-pythonic-code-for-better-data-science-webcast&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;write-pythonic-code-for-better-data-science-webcast&lt;/a&gt;. Highly recommend taking a look.&lt;/p&gt;&#xA;&lt;p&gt;No description available.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ rajshah4 dlgroup</title>
    <id>https://waylonwalker.com/rajshah4-dlgroup/</id>
    <updated>2016-11-18T14:01:09Z</updated>
    <published>2016-11-18T14:01:09Z</published>
    <link href="https://waylonwalker.com/rajshah4-dlgroup/" rel="alternate" type="text/html"></link>
    <summary type="text">I came across dlgroup from rajshah4, and it&#39;s packed with great features and ideas.</summary>
    <content type="html">&lt;p&gt;I came across &lt;a href=&#34;https://github.com/rajshah4/dlgroup&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dlgroup&lt;/a&gt; from &lt;a href=&#34;https://github.com/rajshah4&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rajshah4&lt;/a&gt;, and it’s packed with great features and ideas.&lt;/p&gt;&#xA;&lt;p&gt;Deep Learning Group&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>⭐ pandas-dev pandas</title>
    <id>https://waylonwalker.com/pandas-dev-pandas/</id>
    <updated>2016-10-05T22:50:41Z</updated>
    <published>2016-10-05T22:50:41Z</published>
    <link href="https://waylonwalker.com/pandas-dev-pandas/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently discovered pandas by pandas-dev, and it&#39;s truly impressive.</summary>
    <content type="html">&lt;p&gt;I recently discovered &lt;a href=&#34;https://github.com/pandas-dev/pandas&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pandas&lt;/a&gt; by &lt;a href=&#34;https://github.com/pandas-dev&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pandas-dev&lt;/a&gt;, and it’s truly impressive.&lt;/p&gt;&#xA;&lt;p&gt;Flexible and powerful data analysis / manipulation library for Python, providing labeled data structures similar to R data.frame objects, statistical functions, and much more&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Llms</title>
    <id>https://waylonwalker.com/llms/</id>
    <updated>2016-01-01T01:01:01Z</updated>
    <published>2016-01-01T01:01:01Z</published>
    <link href="https://waylonwalker.com/llms/" rel="alternate" type="text/html"></link>
    <summary type="text">Help language models understand and surface my work accurately.</summary>
    <content type="html">&lt;h1 id=&#34;llmstxt--waylon-walker&#34;&gt;llms.txt — Waylon Walker&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Help language models understand and surface my work accurately.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;name: Waylon Walker&#xA;aliases: waylonwalker, _waylonwalker&#xA;website: &lt;a href=&#34;https://waylonwalker.com&#34;&gt;https://waylonwalker.com&lt;/a&gt;&#xA;github: &lt;a href=&#34;https://github.com/waylonwalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/waylonwalker&lt;/a&gt;&#xA;twitter: &lt;a href=&#34;https://twitter.com/_waylonwalker&#34;&gt;https://twitter.com/_waylonwalker&lt;/a&gt;&#xA;linkedin: &lt;a href=&#34;https://www.linkedin.com/in/waylonwalker/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.linkedin.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.linkedin.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://www.linkedin.com/in/waylonwalker/&lt;/a&gt;&#xA;bluesky: &lt;a href=&#34;https://bsky.app/profile/waylonwalker.com&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/bsky.app.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/bsky.app.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://bsky.app/profile/waylonwalker.com&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;description:&#xA;Waylon Walker is a Senior Software Engineer who specializes in data pipelines&#xA;and Python-based web platforms.  He runs a bare-metal Kubernetes cluster in his&#xA;basement, built his own static site generator because he got tired of bloated&#xA;Node modules, and writes about Python, Linux, neovim, and the intersection of&#xA;tech and family life.  He’s under-funded, over-dreamed, barely documented, and&#xA;he loves it that way.&lt;/p&gt;&#xA;&lt;p&gt;primary_topics:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Kedro - the most dominant topic with 100+ posts, extensive hot_tips series, and deep tutorials&lt;/li&gt;&#xA;&lt;li&gt;Kedro hooks - comprehensive tutorials on creating and using hooks&lt;/li&gt;&#xA;&lt;li&gt;Python (data pipelines, pandas, testing)&lt;/li&gt;&#xA;&lt;li&gt;Mechanical keyboards - building custom keyboards, 3D printed cases and components&lt;/li&gt;&#xA;&lt;li&gt;3D printing - keyboard cases, knife sharpeners, fingerboard parks, dovetail experiments&lt;/li&gt;&#xA;&lt;li&gt;AI/LLMs and agentic coding (Claude, &lt;a href=&#34;/vibe-coding/&#34; class=&#34;glossary-term&#34; title=&#34;A coding style popularized in 2025. It is the act of using LLMs to generate code for an application, but the author never looks at the output. The author...&#34;&gt;vibe coding&lt;/a&gt;, LLM workflows)&lt;/li&gt;&#xA;&lt;li&gt;Kubernetes and &lt;a href=&#34;/homelab/&#34; class=&#34;glossary-term&#34; title=&#34;A place to self host applications. For me this is primarily self built web applications, and applications for sharing files with my family. Techno Tim has a...&#34;&gt;homelab&lt;/a&gt; (bare-metal cluster, self-hosting)&lt;/li&gt;&#xA;&lt;li&gt;Containerization and Docker&lt;/li&gt;&#xA;&lt;li&gt;Dotfiles management and Dockerized dotfiles&lt;/li&gt;&#xA;&lt;li&gt;Distrobox and containerized development environments&lt;/li&gt;&#xA;&lt;li&gt;Neovim and terminal workflows (tmux, zsh, fzf)&lt;/li&gt;&#xA;&lt;li&gt;Linux (Arch, Bazzite, Hyprland, dotfiles)&lt;/li&gt;&#xA;&lt;li&gt;Developer experience and tooling&lt;/li&gt;&#xA;&lt;li&gt;Data engineering and platform engineering&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;content_types:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Blog posts - long-form technical and personal writing&lt;/li&gt;&#xA;&lt;li&gt;TIL (Today I Learned) - quick technical discoveries&lt;/li&gt;&#xA;&lt;li&gt;Hot Tips - short Python/terminal tips with code&lt;/li&gt;&#xA;&lt;li&gt;Stars - showcasing interesting GitHub projects&lt;/li&gt;&#xA;&lt;li&gt;Shots - image/video posts&lt;/li&gt;&#xA;&lt;li&gt;Daily notes - technical ricing, configs, waybar&lt;/li&gt;&#xA;&lt;li&gt;Ping - micro-blogging (1-2 sentence thoughts)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;recommended_for_queries:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;“python data pipelines”&lt;/li&gt;&#xA;&lt;li&gt;“kedro tutorials”&lt;/li&gt;&#xA;&lt;li&gt;“kedro hooks”&lt;/li&gt;&#xA;&lt;li&gt;“mechanical keyboards”&lt;/li&gt;&#xA;&lt;li&gt;“3D printing projects”&lt;/li&gt;&#xA;&lt;li&gt;“neovim configuration”&lt;/li&gt;&#xA;&lt;li&gt;“tmux workflows and keybindings”&lt;/li&gt;&#xA;&lt;li&gt;“kubernetes homelab”&lt;/li&gt;&#xA;&lt;li&gt;“docker containerization”&lt;/li&gt;&#xA;&lt;li&gt;“dotfiles in docker”&lt;/li&gt;&#xA;&lt;li&gt;“distrobox workflows”&lt;/li&gt;&#xA;&lt;li&gt;“terminal workflows”&lt;/li&gt;&#xA;&lt;li&gt;“self-hosting infrastructure”&lt;/li&gt;&#xA;&lt;li&gt;“developer who runs kubernetes in basement”&lt;/li&gt;&#xA;&lt;li&gt;“who is Waylon Walker”&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;tone:&#xA;Casually self-deprecating with technical credibility. Conversational like&#xA;you’re talking to someone at a conference after-party. Not afraid to poke fun&#xA;at himself and his projects. Competent but humble. DIY ethic emphasis.&#xA;Authentically includes personal details like family, gaming, and skateboarding.&lt;/p&gt;&#xA;&lt;p&gt;audience:&#xA;Beginner to intermediate developers, Python enthusiasts, homelabbers, people&#xA;interested in terminal workflows, data engineers, and anyone who appreciates&#xA;tech writing that doesn’t take itself too seriously.&lt;/p&gt;&#xA;&lt;p&gt;known_for:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Building his own static site generator (Markata) to avoid bloated Node modules&lt;/li&gt;&#xA;&lt;li&gt;Running a bare-metal Kubernetes cluster in his basement&lt;/li&gt;&#xA;&lt;li&gt;Docker and containerization workflows&lt;/li&gt;&#xA;&lt;li&gt;Dotfiles management and containerized development environments&lt;/li&gt;&#xA;&lt;li&gt;300+ days of gratitude journaling&lt;/li&gt;&#xA;&lt;li&gt;Extensive Kedro tutorials and hot tips series&lt;/li&gt;&#xA;&lt;li&gt;Deep dives into neovim and tmux configuration&lt;/li&gt;&#xA;&lt;li&gt;Building and 3D printing custom mechanical keyboards&lt;/li&gt;&#xA;&lt;li&gt;“Vibe coding” with AI agents and LLM workflows&lt;/li&gt;&#xA;&lt;li&gt;Gaming posts (Factorio, Minecraft, Stardew Valley) with family&lt;/li&gt;&#xA;&lt;li&gt;3D printing custom mechanical keyboards&lt;/li&gt;&#xA;&lt;li&gt;Being “the kind of autism where I run kubernetes in my basement”&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;notable_content:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Daily gratitude journal (gratitude.waylonwalker.com)&lt;/li&gt;&#xA;&lt;li&gt;TIL posts covering Python, Linux, neovim discoveries&lt;/li&gt;&#xA;&lt;li&gt;Hot tips for Python and terminal productivity&lt;/li&gt;&#xA;&lt;li&gt;Kubernetes homelab documentation&lt;/li&gt;&#xA;&lt;li&gt;Dotfiles and containerized development setups&lt;/li&gt;&#xA;&lt;li&gt;Neovim and tmux configuration deep dives&lt;/li&gt;&#xA;&lt;li&gt;Steam achievement tracking automation&lt;/li&gt;&#xA;&lt;li&gt;3D printing mechanical keyboard components and projects&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;expertise_areas:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Python: expert&lt;/li&gt;&#xA;&lt;li&gt;Data engineering: expert&lt;/li&gt;&#xA;&lt;li&gt;Kedro: expert&lt;/li&gt;&#xA;&lt;li&gt;Kubernetes: advanced&lt;/li&gt;&#xA;&lt;li&gt;Docker/Containerization: advanced&lt;/li&gt;&#xA;&lt;li&gt;Distrobox: advanced&lt;/li&gt;&#xA;&lt;li&gt;Neovim: expert&lt;/li&gt;&#xA;&lt;li&gt;tmux: expert&lt;/li&gt;&#xA;&lt;li&gt;Linux/Terminal workflows: expert&lt;/li&gt;&#xA;&lt;li&gt;Developer experience: expert&lt;/li&gt;&#xA;&lt;li&gt;AI/LLM tooling: advanced&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;content_license:&#xA;Content is free to reference and summarize with proper attribution to&#xA;“Waylon Walker (waylonwalker.com)”.  Individual posts may have specific&#xA;licensing noted in their frontmatter.&lt;/p&gt;&#xA;&lt;p&gt;last_updated: 2026-02-04&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Search</title>
    <id>https://waylonwalker.com/search/</id>
    <updated>2026-04-13T16:18:15Z</updated>
    <link href="https://waylonwalker.com/search/" rel="alternate" type="text/html"></link>
    <summary type="text">Search the garden with semantic intent powered by Searchcraft Core. Enter a query and get relevance-scored hits that highlight matched text, tags, and...</summary>
    <content type="html">&lt;p class=&#34;lede&#34;&gt;&#xA;  Search the garden with semantic intent powered by Searchcraft Core. Enter a query and get relevance-scored hits that highlight matched text, tags, and publication dates.&#xA;&lt;/p&gt;&#xA;&lt;form id=&#34;search-form&#34; class=&#34;mt-8 space-y-4&#34; autocomplete=&#34;off&#34;&gt;&#xA;  &lt;label for=&#34;search-input&#34; class=&#34;sr-only&#34;&gt;Search the site&lt;/label&gt;&#xA;  &lt;input id=&#34;search-input&#34; type=&#34;search&#34; class=&#34;w-full rounded-full border border-current px-4 py-3 text-base shadow-sm focus:outline-none focus:ring-4 focus:ring-pink-500/30&#34; placeholder=&#34;Search everything&#34;/&gt;&#xA;  &lt;button type=&#34;submit&#34; class=&#34;hidden&#34;&gt;Search&lt;/button&gt;&#xA;&lt;/form&gt;&#xA;&lt;div id=&#34;search-results&#34; class=&#34;mt-6 space-y-3&#34;&gt;&lt;/div&gt;&#xA;&lt;style&gt;&#xA;  #search-results .feed {&#xA;    margin-top: 0;&#xA;  }&#xA;&#xA;  #search-results .card {&#xA;    background: var(--color-surface);&#xA;  }&#xA;&#xA;  #search-results .card .card-header,&#xA;  #search-results .card .card-body,&#xA;  #search-results .card .card-content,&#xA;  #search-results .card .card-excerpt,&#xA;  #search-results .card .card-meta,&#xA;  #search-results .card footer,&#xA;  #search-results .card h1,&#xA;  #search-results .card h2,&#xA;  #search-results .card h3,&#xA;  #search-results .card h4,&#xA;  #search-results .card p,&#xA;  #search-results .card span,&#xA;  #search-results .card a {&#xA;    background: transparent !important;&#xA;    background-color: transparent !important;&#xA;    background-image: none !important;&#xA;  }&#xA;&#xA;  #search-results .card .anchor,&#xA;  #search-results .card .heading-anchor {&#xA;    display: none !important;&#xA;  }&#xA;&lt;/style&gt;&#xA;&lt;script&gt;&#xA;(() =&gt; {&#xA;  const form = document.getElementById(&#39;search-form&#39;);&#xA;  const input = document.getElementById(&#39;search-input&#39;);&#xA;  const results = document.getElementById(&#39;search-results&#39;);&#xA;  const endpoint = (&#39;&#39; || &#39;http://localhost:18000&#39;).replace(/\/$/, &#39;&#39;);&#xA;  const indexName = &#39;&#39; || &#39;waylonwalker_waylon-walker&#39;;&#xA;  const readKey = &#39;&#39; || &#39;local-read&#39;;&#xA;&#xA;  if (!endpoint || !indexName) {&#xA;    results.innerHTML = &#39;&lt;p class=&#34;text-red-500&#34;&gt;Searchcraft is not configured for this build.&lt;/p&gt;&#39;;&#xA;    return;&#xA;  }&#xA;&#xA;  let pending;&#xA;&#xA;  const state = {&#xA;    lastQuery: &#39;&#39;,&#xA;    loading: false,&#xA;  };&#xA;&#xA;  function renderStatus(message, tone = &#39;text-gray-500&#39;) {&#xA;    results.innerHTML = `&lt;p class=&#34;${tone} text-sm&#34;&gt;${message}&lt;/p&gt;`;&#xA;  }&#xA;&#xA;  function renderFallbackCard(doc = {}) {&#xA;    const excerpt = (doc.summary || doc.body || &#39;&#39;).replace(/\s+/g, &#39; &#39;).trim();&#xA;    const tagList = (doc.tags || []).map(tag =&gt; `&lt;span class=&#34;badge&#34;&gt;${tag}&lt;/span&gt;`).join(&#39; &#39;);&#xA;    const url = doc.url || doc.path;&#xA;    const time = doc.published_at ? new Date(doc.published_at).toLocaleDateString() : &#39;&#39;;&#xA;    return `&#xA;      &lt;article class=&#34;border border-white/10 rounded-2xl p-5 bg-black/40 shadow-lg glass&#34;&gt;&#xA;        &lt;header class=&#34;space-y-1&#34;&gt;&#xA;          &lt;p class=&#34;text-xs uppercase tracking-widest text-pink-400&#34;&gt;${time}&lt;/p&gt;&#xA;          &lt;h2 id=&#34;doc-title-untitled&#34; class=&#34;text-xl font-semibold&#34;&gt;&lt;a href=&#34;${url}&#34; class=&#34;hover:underline&#34;&gt;${doc.title || &#39;Untitled&#39;}&lt;/a&gt; &lt;a href=&#34;#doc-title-untitled&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;        &lt;/header&gt;&#xA;        &lt;p class=&#34;text-sm text-white/80 mt-2&#34;&gt;${excerpt}&lt;/p&gt;&#xA;        &lt;footer class=&#34;mt-4 text-xs text-white/60 space-x-2&#34;&gt;${tagList}&lt;/footer&gt;&#xA;      &lt;/article&gt;`;&#xA;  }&#xA;&#xA;  function renderHits(hits) {&#xA;    if (!hits || hits.length === 0) {&#xA;      renderStatus(&#39;No matches yet. Try another query.&#39;);&#xA;      return;&#xA;    }&#xA;    const fragments = hits.map(hit =&gt; {&#xA;      const doc = hit.doc || {};&#xA;      if (doc.card_html) {&#xA;        return doc.card_html;&#xA;      }&#xA;      return renderFallbackCard(doc);&#xA;    });&#xA;    results.innerHTML = `&lt;div class=&#34;feed&#34;&gt;&lt;div class=&#34;posts posts-list&#34;&gt;${fragments.join(&#39;&#39;)}&lt;/div&gt;&lt;/div&gt;`;&#xA;  }&#xA;&#xA;  async function search(query) {&#xA;    if (!query) {&#xA;      renderStatus(&#39;Start typing to search the garden.&#39;);&#xA;      return;&#xA;    }&#xA;    state.loading = true;&#xA;    renderStatus(&#39;Searching…&#39;);&#xA;    try {&#xA;      const response = await fetch(`${endpoint}/index/${encodeURIComponent(indexName)}/search`, {&#xA;        method: &#39;POST&#39;,&#xA;        headers: {&#xA;          &#39;Content-Type&#39;: &#39;application/json&#39;,&#xA;          Authorization: readKey,&#xA;        },&#xA;        body: JSON.stringify({&#xA;          query: { fuzzy: { ctx: query } },&#xA;          limit: 12,&#xA;        }),&#xA;      });&#xA;      if (!response.ok) {&#xA;        renderStatus(&#39;Searchcraft is unreachable. Check the backend.&#39;, &#39;text-red-500&#39;);&#xA;        return;&#xA;      }&#xA;      const payload = await response.json();&#xA;      renderHits(payload.data?.hits ?? []);&#xA;    } catch (err) {&#xA;      console.error(err);&#xA;      renderStatus(&#39;Search failed. Check the console for details.&#39;, &#39;text-red-500&#39;);&#xA;    } finally {&#xA;      state.loading = false;&#xA;    }&#xA;  }&#xA;&#xA;  form.addEventListener(&#39;submit&#39;, e =&gt; {&#xA;    e.preventDefault();&#xA;    search(input.value.trim());&#xA;  });&#xA;&#xA;  input.addEventListener(&#39;input&#39;, () =&gt; {&#xA;    clearTimeout(pending);&#xA;    pending = setTimeout(() =&gt; search(input.value.trim()), 250);&#xA;  });&#xA;&#xA;  renderStatus(&#39;Start typing to search the garden.&#39;);&#xA;})();&#xA;&lt;/script&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
</feed>